男孩,这件事让我感到难过。我想创建一个循环来验证用户是否输入了int(而不是其他一些数据类型)。为此,我使用fgets()
获取用户输入的第一个字符,然后检查该字符是否为数字(这是我的代码中断的最小部分)。
char input[2];
int main(){
printf("Please enter the minimum value the random number can be: ");
fgets(input, sizeof(input), stdin);
printf("%c", input[0]);
if(!isdigit(input[0])){
int escape = 0;
while(escape == 0)
printf("Try again: ");
fgets(input, sizeof(input), stdin); //This will now overwrite whatever was in 'input'
if (isdigit(input[0])) //Will keep looping back to the fgets(), asking for new input each time until you enter a number.
escape = 1;
flushInpt();
}
在上面的代码中(假设所有正确的库都是#included),它应该询问输入(它执行)然后检查该输入的第一个字符是否为数字(它是)并且如果它不是数字,它应该进入while
循环,在那里打印“再试一次:”,新的fgets()
等待用户放入新的输入。它保持在while
循环内,直到它们输入一个数字作为第一个字符,此时它突破循环(这是它不执行的部分)。
但是每当我第一次输入非数字时,它会按预期进入while
循环,然后无限次地打印“再次尝试:”而不会停止在getsf()语句中等待新的输入?我的问题是为什么它无限循环?
我已经验证了flushInpt()函数不是罪魁祸首,因为无论该调用是否在循环中,都会出现问题。如果您想知道,flushInpt只是一个基本循环函数,它遍历输入缓冲区并删除可能存在的任何内容。
char ch;
void flushInpt(){
while ((ch = getchar()) != '\n' && ch != EOF)
continue;
}
答案 0 :(得分:2)
你缺少花括号:
while(escape == 0)
{ //<--
printf("Try again: ");
fgets(input, sizeof(input), stdin); //This will now overwrite whatever was in 'input'
if (isdigit(input[0])) //Will keep looping back to the fgets(), asking for new input each time until you enter a number.
escape = 1;
flushInpt();
} //<--
我想这个块就是你的while循环。