用户需要输入一个整数,然后输入enter。如果它被验证,那么它应该返回整数,如果没有验证,用户应该收到错误消息。
当我尝试通过getInt()
函数验证输入时,当我输入1个或更多字符时,我得到一个无限循环。当我输入abc
时,我得到一个无限循环的错误消息,而输入1a
会得到正确的验证(1个错误消息)。我按照这个流程图的说明进行了操作:
#include <stdio.h>
void clrKyb(void){
char input;
do {
scanf("%c",&input);
} while(input !='\n');
}
int getInt(void){
char NL= 'x' ;
int value ;
while(NL!='\n'){
scanf("%d%c",&value,&NL);
if(NL!='\n') {
void clrKyb(void);
printf("Invalid integer, please try again:");
}
}
return value ;
}
int main(void) {
int iVal;
printf("Enter an integer: ");
iVal = getInt();
printf("You entered: %d\n", iVal);
return 0;
}
答案 0 :(得分:2)
如评论中所述:
getInt
中,void clrKyb(void);
应为clrKyb();
,因为您想要使用已定义的clrKyb
。clrKyB()
(和getInt()
)中,您需要检查scanf()
的返回值。如果它返回EOF,那么任何重试等都不会停止无限循环。 (正如cxw所述,目前在getInt()
,您(重新)宣布clrKyB()
并且不会将其称为 - 这也是一个问题。)