当使用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
函数判断输入是否出错,如果出错则清空输入缓冲区并提示用户重新输入一个整数。