当使用scanf
函数接受用户输入时,如果用户输入的数据类型与指定的格式化字符串不匹配,或者输入的数据超出了变量的范围,scanf
函数会返回一个非零值,表示输入错误。此时,我们可以通过检查scanf
函数的返回值来处理错误输入。
例如,如果我们要接受用户输入一个整数,可以这样处理错误输入:
int num;
while(scanf("%d", &num) != 1) {
printf("输入错误,请重新输入一个整数:");
while(getchar() != '\n'); // 清空输入缓冲区
}
上面的代码中,当用户输入的不是一个整数时,scanf
函数会返回一个非零值,此时会执行while
循环,清空输入缓冲区并提示用户重新输入一个整数。
除了检查scanf
函数的返回值之外,我们还可以使用feof
和ferror
函数来判断输入是否出错。例如:
int num;
while(1) {
if(scanf("%d", &num) == 1) {
break; // 输入正确,退出循环
} else if(feof(stdin) || ferror(stdin)) {
printf("输入错误,请重新输入一个整数:");
clearerr(stdin); // 清除错误标志
while(getchar() != '\n'); // 清空输入缓冲区
} else {
printf("输入错误,请重新输入一个整数:");
while(getchar() != '\n'); // 清空输入缓冲区
}
}
在这个例子中,我们使用feof
和ferror
函数判断输入是否出错,如果出错则清空输入缓冲区并提示用户重新输入一个整数。