虽然循环不在c中重复

时间:2016-02-22 11:58:24

标签: c

我必须创建一个从用户请求整数的程序 重复通过键盘,直到用户输入0.我已经到了while循环,它没有重复,我不知道为什么。任何帮助将不胜感激。 感谢

编辑:我已经根据它不重复修复了循环,但现在它无限重复,我不知道为什么。

for(size_t i=0; i<SENSORS_N; i++)
{
  uint16_t freq = freq_read[i]();
  // do something with freq
}

5 个答案:

答案 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;
}