c - 未使用的可变错误

标签 c variables

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

相关文章:

c - 如果哈希表是用二维数组实现的,但数组的第二维永远不会被访问,那么效率会损失多少?

java - NPE同时计算apk大小

variables - 如何在 Julia 中恢复默认常量值

javascript - 如何使用 Excel VBA 将变量参数传递到 Javascript 函数

php - 如何在 PHP 中将两个字符串组合在一起?

c - strcpy 中的指针赋值是如何工作的?

c - c、fclose()、remove()、rename() 中的奇怪行为

c - Linux中自动启动应用程序,输出失败

计算数组中的音节

Javascript - 将相同的属性应用于多个变量