gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:20:01 24 4
gpt4 key购买 nike

大家好,我是 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)。”

你可能需要它。

提前谢谢您。

最佳答案

在循环中:

while(*pointer != 32)

您永远不会在循环体内更改 pointer*pointer 。因此,如果这个循环进入一次,那么它就永远不会退出。

<小时/>

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

但是请记住,此循环还必须检查字符串结尾( '\0' ),如果确实达到了该值,则正确退出外循环(而不是像在输入仅为 pointer++ 的情况)。

关于c - 由于 C 中的错误条件而导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34405278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com