嘿家伙我是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)."
你可能需要它.
先感谢您.
在循环:
while(*pointer != 32)
你永远不会改变pointer
或*pointer
在循环体内.因此,如果输入此循环,则它永远不会退出.
你可能想要有一个pointer++
地方,也许循环条件实际应该是while(*pointer >='0' && *pointer<='9')
(如果字符串有一些数字,然后是一个字母,然后是一些数字?)
但是要记住,这个循环还必须检查end-of-string('\0'
)并正确地退出外部循环(如果它确实击中了它(而不是pointer++
像输入那样进行和越过终止符)只是-
).