gpt4 book ai didi

c - 为什么每当输入非整数类型时我都会不断得到一个无限循环?

转载 作者:太空宇宙 更新时间:2023-11-04 08:20:46 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>
/*
* GETOP -- get an integer operand; we do operation-specific checks later
*
* parameters: opno the number of the operand (as in 1st, 2nd, etc.)
* returns: int the integer value of the operand just read
* exceptions: none */

int getop(int opno)

{
int val;
int rv; /* value returned from scanf */
/* a
* loop until you get an integer or EOF
*
* prompt and read a value */
do{
/* prompt and read a value */
printf("\toperand %d: ", opno);
rv = scanf("%d", &val);
/* oops */
if (rv == 0)
{
printf("\toperand must be an integer\n");
/* loop until a valid value */
}
while (rv == 0);
/*
* if it's EOF, say so and quit
*/
if (rv == EOF)
{
exit(EXIT_SUCCESS);
}

/*
* otherwise, say what you read
*/
return(val);


}

/* 当我写 rv == 0 时,它一直给我一个无限循环。我是不是写错了什么,或者是否有另一种方法可以在程序不进入无限循环的情况下检查非整数? */

最佳答案

因为当 scanf 看到与其格式不匹配的输入时,它会停止读取,并将无效输入留在缓冲区中。因此,下次您尝试读取时,您将尝试一次又一次地读取完全相同的无效输入,然后...

一个简单的解决方案是使用fgets 读取一行,然后使用sscanf 获取数据。

关于c - 为什么每当输入非整数类型时我都会不断得到一个无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33513605/

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