如何使用scanf仅接收指定类型值并在输入不合法时输出错误提示
实现方法
scanf() 函数的返回值代表成功匹配并赋值给变量的输入项数量,读取十六进制时如果输入非法值(比如"ZZ"),%x匹配失败,返回值会是0,你可以基于这个返回值做错误判断,同时需要清空输入缓冲区残留的非法字符,避免后续读取操作异常。
示例代码如下:
#include <stdio.h> int main() { unsigned int hexa_decimal_num; // 接收scanf的返回值 int read_result = scanf("%x", &hexa_decimal_num); if (read_result != 1) { printf("Error!\n"); // 清空输入缓冲区残留的非法字符 while(getchar() != '\n'); // 可根据业务需求调整后续逻辑,比如终止程序或者提示重新输入 return 1; } // 输入合法后的业务逻辑,示例:输出读取到的十六进制值 printf("读取成功,数值为%#x\n", hexa_decimal_num); return 0; }
补充说明:
- 如果需要支持用户重复输入直到输入合法,可将读取和判断逻辑封装在循环内
- 输入流到达末尾时
scanf()会返回EOF,也属于异常场景,可和匹配失败的逻辑合并处理
内容的提问来源于stack exchange,提问作者Nadav Banay
相关产品推荐
相关产品推荐

