输入字母时While循环终止,需实现非法输入(负数、字母)持续循环
问题:输入字母或负数时保持循环执行
现有代码中,当输入字母时循环会终止,希望实现输入字母或负数时循环持续执行,现有代码如下:
float monthpay; printf("Please enter your monthly wage: "); scanf("%f", &monthpay); while (monthpay <= 0) { printf("\nThat was invalid"); printf("\n Please try again: "); scanf("%f", &monthpay); } printf("%.2f", monthpay);
问题分析
原代码仅判断了monthpay <= 0的情况,但输入字母时,scanf("%f")会读取失败,此时monthpay的值不会更新,且输入缓冲区里的非数字字符会残留,导致后续scanf持续读取失败,循环异常终止。
解决方法
需要处理两个核心问题:判断输入是否成功、清空输入缓冲区的残留字符。修改后的代码如下:
#include <stdio.h> float monthpay; int input_status; printf("Please enter your monthly wage: "); input_status = scanf("%f", &monthpay); // 循环条件:读取失败 或 输入数值<=0 while (input_status != 1 || monthpay <= 0) { printf("\nThat was invalid"); printf("\nPlease try again: "); // 清空输入缓冲区的所有残留字符 while (getchar() != '\n'); // 重新读取输入并获取状态 input_status = scanf("%f", &monthpay); } printf("%.2f", monthpay);
代码说明
input_status接收scanf的返回值:成功读取浮点数时返回1,输入非数字等情况返回0- 循环条件
input_status != 1 || monthpay <= 0覆盖两种错误场景:输入非数字(读取失败)、输入负数或0 while (getchar() != '\n');逐个读取输入缓冲区字符直到换行符,确保后续scanf能正确读取新输入
内容的提问来源于stack exchange,提问作者tyna 007
相关产品推荐
相关产品推荐

