当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《由于C中的错误条件导致的无限循环》经验,为你挑选了1个好方法。

嘿家伙我是C的新手,我正在努力学习一些东西.

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

这是代码:

 #include 
#include 
#include 

/**
 * 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)."

你可能需要它.

先感谢您.



1> M.M..:

在循环:

while(*pointer != 32)

你永远不会改变pointer*pointer在循环体内.因此,如果输入此循环,则它永远不会退出.


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

但是要记住,这个循环还必须检查end-of-string('\0')并正确地退出外部循环(如果它确实击中了它(而不是pointer++像输入那样进行和越过终止符)只是-).

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有