由于C中的错误条件导致的无限循环

时间:2015-12-21 22:18:47

标签: c

嘿伙计们,我是C的新手,我正在努力学习一些东西。

所以这就是问题:我有一个无限循环,我不明白为什么。 我已经检查了其他主题,但实际上我并不理解。

以下是代码:

 #include <stdlib.h>
#include <stdio.h>
#include <string.h>

/**
 * Auto-generated code below aims at helping you parse
 * the standard input according to the problem statement.
 **/
int main()
{
    int n,i=0; // the number of temperatures to analyse
    scanf("%d", &n); fgetc(stdin);
    char temps[257]; // the n temperatures expressed as integers ranging from -273 to 5526
    fgets(temps, 257, stdin); // the n temperatures expressed as integers ranging from -273 to 5526


    int temp[257]={0};
    char *pointer;

    pointer= temps;


   while(*pointer != NULL){
      int i=0, sign=1;

      if(*pointer == '-'){
          sign=-1;
          pointer++;
      }

     while(*pointer != 32) { //infinite loop!
     if(*pointer >='0' && *pointer<='9'){
         temp[i]= (temp[i] *10) + ((*pointer) -'0');
         temp[i]= temp[i]*sign;
         printf("try");
         }
   }     

      printf("%d\n", temp[i]); //verifying temps != 0
      pointer++;
      i++;
    }
    return 0;
}

我真的不明白为什么。

无论如何,该程序的目标是:“编写一个打印输入数据中最接近0的温度的程序。如果两个数字同样接近于零,则必须将正整数视为最接近零(例如,如果温度为-5和5,然后显示5)。“

你可能需要它。

提前谢谢。

2 个答案:

答案 0 :(得分:7)

在循环中:

while(*pointer != 32)

您永远不会在循环体内更改pointer*pointer。因此,如果输入此循环,则它永远不会退出。

你可能想要在某个地方有一个pointer++,也许循环条件实际上应该是while(*pointer >='0' && *pointer<='9')(如果字符串有一些数字,那么一个字母,然后是一些数字呢?)

但请记住,此循环还必须检查字符串结尾('\0')并正确退出外部循环(如果它确实触及了pointer++并继续执行在输入只是-)的情况下,超过终结符。

答案 1 :(得分:0)

好的,我真的明白了。谢谢。

所以现在这是循环

while(*pointer != 32 || *pointer != '\0') {
         if(*pointer >='0' && *pointer<='9'){
             temp[i]= (temp[i] *10) + ((*pointer) -'0');
             temp[i]= temp[i]*sign;
             pointer++;
         }        
 }

现在它给了我价值,但在某个时刻,它变得无限。 其余代码是相同的。

编辑:我用while修改了循环条件(*指针&gt; =&#39; 0&#39;&amp;&amp; *指针&lt; =&#39; 9&#39;)并且它没有无穷! 但是没有用。可能存在逻辑错误。

编辑2:我找到了。我在while循环中初始化了i = 0,当然它不断更新相同的temp [i]。

再次感谢你。