我必须创建一个从用户请求整数的程序 重复通过键盘,直到用户输入0.我已经到了while循环,它没有重复,我不知道为什么。任何帮助将不胜感激。 感谢
编辑:我已经根据它不重复修复了循环,但现在它无限重复,我不知道为什么。
for(size_t i=0; i<SENSORS_N; i++)
{
uint16_t freq = freq_read[i]();
// do something with freq
}
答案 0 :(得分:6)
循环不重复,因为循环中有return
语句,会立即离开main
函数。只需删除它。
您还有另一个更糟糕的问题:未定义的行为。本地非静态变量(例如代码中的n
)不会被初始化,而是具有 indeterminate 值。试图使用这种未初始化的变量会导致所述未定义的行为。
在条件中使用变量之前,需要将变量显式初始化为某个值,例如重新排序代码,以便在循环之前读取输入,然后在循环结束时读取。
答案 1 :(得分:3)
局部变量n未初始化,产生未定义的结果,称为未定义的行为。在进入循环之前初始化它:
n = 1;
检查scanf的结果:
if (scanf("%d", &n) != 1)
// error
答案 2 :(得分:1)
循环不起作用,因为你没有在while循环中初始化n
和不必要的返回0。您可以使用do..while
进行修复,如下所示。因为您将输入语句作为第一个语句,所以最好选择do..while。
do{
scanf("%d", &n);
if(n%2==0){
printf("%d is even.\n",n);
etotal++;
}
else {
printf("%d is odd.\n",n);
ototal++;
}
} while (n!=0);
答案 3 :(得分:1)
因为n未初始化,所以它具有随机值:
int n, even, odd, etotal, ototal;
/* ... */
while (n!=0){
答案 4 :(得分:0)
您使用scanf读取输入,但在if / else语句之后返回0,因此您将离开该程序。所以如果你写一个偶数或奇数就无所谓了。
while (n!=0){
scanf("%d", &n);
if(n%2==0){
printf("%d is even.\n",n);
etotal++; }
else{
printf("%d is odd.\n",n);
ototal++;
}
return 0;
}