嘿伙计们,我是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)。“
你可能需要它。
提前谢谢。
答案 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]。
再次感谢你。