[英]C scanf in a loop with invalid input
我必須執行if語句,否則,如果設置了一些無效的輸入(例如“ 17d”),它將陷入無限循環。 為什么呢 我認為有緩沖區但scanf從stdin讀取而不是從流讀取?
int age;
while (age != 0) {
printf("How old are you? ");
if(scanf("%d", &age) > 0) {
printf("You are %d years old!\n", age);
} else {
break;
}
}
當scanf
不成功時,它將輸入scanf
在流中。 您需要忽略該行的其余部分,並要求用戶再次提供輸入。 您可以添加以下功能:
void ignoreRestOfLine(FILE* fp)
{
int c;
while ( (c = fgetc(fp)) != EOF && c != '\n');
}
並從main
調用它:
if(scanf("%d", &age) > 0) {
printf("You are %d years old!\n", age);
} else {
// Ignore rest of the line and continue with the loop.
ignoreRestOfLine(stdin);
}
另一個選擇是一次讀取一行中的數據,然后使用sscanf
從該行中提取數字。
char line[100]; // Make it large enough
while (age != 0)
{
printf("How old are you? ");
if ( fgets(line, sizeof(line), stdin) == NULL )
{
// Problem reading a line of text.
// Deal with it.
break;
}
else
{
if(sscanf(line, "%d", &age) > 0)
{
printf("You are %d years old!\n", age);
}
}
// Try to read again
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.