gpt4 book ai didi

c - 未使用的可变错误

转载 作者:行者123 更新时间:2023-11-30 20:06:19 25 4
gpt4 key购买 nike

我是编程新手,目前正在学习C语言。这是我的代码。我尝试了不同的修复方法,例如确保有分号。但是,当我在联机编译器中检查代码时,总是得到未使用的变量,并且数据定义没有类型或存储类。我向您保证,任何信息都会对我有所帮助,所以请告诉我您认为可能的解决方案是什么。

//C code
//This program will calculate the average speed of passing cars using a WHILE-END loop
//Developer: Jasmine Tucker
//Date: 7 Sept 2014
#include <stdio.h>
Int main ()
{
/* define variable */
int average_speed;
int car_count;
int car_speed;
};
/* set variable values */
average_speed= 0;
car_count=0;
car_speed=0;

/*WHILE-END loop */
WHILE (car_count > 0)
{
printf (“Enter the car’s speed %s:”, car_count);
scanf (“%d”, & car_speed);
average_speed= car_speed/ car_count
car_count++;
}
printf (“\n The average speed is %d miles per hour. \n”, (average_speed));
return 0;
}

最佳答案

一些东西:

Int main()


应该

int main()


这可能是一个简单的错字,或者是语法检查的不幸副作用。

通过研究C中的标准类型,您可能会做得很好。
除了修饰符之外,修饰符不是很多,除了特殊类型 _Bool, _Complex, _Imaginary以外,它们都是小写的。 (关键字也是如此)。
存储类是指不太常用的东西,或者至少不在该程序的范围内(自动,注册,静态,外部)。

以下定义也使用 int类型,因此我将在此处复制它们。

/* define variable */
int average_speed;
int car_count;
int car_speed;
};
/* set variable values */
average_speed= 0;
car_count=0;
car_speed=0;


正如其他人提到的那样,在声明了三个变量之后,还有一个多余的花括号。 };
(注意他看起来很伤心。)
如果您来自使用花括号后要使用分号的语言,则您有一些难以改正的习惯。

无论如何,注释掉应该删除几个错误:

/* }; */


因为这实际上关闭了 main()的块。



正如用户 haini指出的那样,您实际上可以将变量定义拉到 main()之外,从而允许任何函数都可以访问它们。 (在源文件中使用会弹出前面提到的 extern)。
一些程序员使用特殊的变量[pre | suf]前缀来区分全局变量和局部变量。

int g_average_speed;
int g_car_count;
int g_car_speed;


由于这些变量需要在使用前进行初始化,因此可以在定义中执行以下操作:

int g_average_speed = 0;
int g_car_count = 0;
int g_car_speed = 0;


通常,不建议使用全局变量,而宁愿使用基于参数的变量共享,一旦引入了多个函数,这将更有意义。



如前所述,“ WHILE”不是关键字,而 while是。与变量类型一样,关键字列表非常短,并且大多为小写。最好知道关键词,以避免将它们用于变量/函数命名。

就逻辑而言, while-loop将永远不会开始,因为将 car_count > 0初始化为0时将不满足表达式 car_count

虽然很容易对值进行硬编码,但您可能希望将另一个变量(例如 max_cars)设置为上限,并检查 car_count < max_cars。 (别忘了您从0开始计数)。

/* define variable */
int max_cars = 10;
/* rest of variables, init */
while( car_count < max_cars )


现在,除了会给您带来麻烦的引号“”,以及 haini再次指出的在 average_speed = car_speed / car_count处缺少分号之外,您还应尝试在思维上循序渐进。永远不要忘记,用户天生就是邪恶的,当被允许与程序交互时,他们会尝试可能无法预料的值( scanf())。对于 int%d,负值和0并非没有问题,尽管您可能希望某些汽车处于“停车”状态,并因此将速度设为0。使用。

无论如何,最好养成清理用户输入的习惯,和/或为用户提供选择退出的选项(即“ TYPE -1 to break ...”),并使用以下命令检查无效代码或退出代码的习惯:一个 unsigned。 (在这种情况下, %u可能是要追求的关键字)

您的 if计算似乎不太正确。不要忘记将值存储为整数,因此会出现一些舍入错误。

首先考虑一下当您的初始案例到达时会发生什么-什么是 break,以及除以该值会发生什么?

然后,考虑最后一个情况(假设您的上限为10),其中 average_speed。您将为 car_count分配 car_count == 9。这真的是您想要的吗?

您可以通过“跟踪”所有速度的总和,并且仅进行一次平均计算,从而将舍入误差和更困难的计算降至最低。

/* define variable */
int total_speed = 0;


在您的 car_speed / car_count循环中:

total_speed += car_speed;


要么

total_speed = total_speed + car_speed;


然后在循环之外:

average_speed = total_speed / (car_count - 1);


(必须调整到 average_speed,因为该值在最终循环后会增加。)
注意:在此有限的示例中,除非在 while之外使用,否则 car_count变量可能不是必需的。

关于c - 未使用的可变错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25751925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com