我是编程新手,目前正在学习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/