C语言编程:向float数组录入输入时如何在收到非数值时跳出for循环
C程序非数值输入校验实现方案
核心实现逻辑是利用scanf()函数的返回值判断输入有效性:scanf()返回值等于成功匹配并赋值的变量个数,当输入内容不符合%f格式要求(非数值)时,返回值会小于1,此时直接输出提示终止流程即可。
原有代码问题
- 开头定义的
float i属于冗余变量,和后续循环中定义的int i重名,会触发编译警告 - 没有校验
scanf()的返回值,非数值输入时会导致后续数组元素读取到脏值,程序继续错误执行 - 用
%.2lf打印float类型写法不规范,float类型在printf中自动提升为double,用%f匹配更严谨
修改后完整代码
#include <stdio.h> int main(){ float sum = 0; const int ARRAYSIZE = 5; float array1[ARRAYSIZE]; int valid_input_count = 0; // 记录有效输入个数 printf("Input a number (a total of %d numbers is needed):\n", ARRAYSIZE); fflush(stdout); for(int i = 0; i < ARRAYSIZE; i++){ // 接收scanf返回值判断是否输入成功 int ret = scanf("%f", &array1[i]); if(ret < 1){ printf("not a number\n"); return 1; // 直接终止程序 } valid_input_count++; } // 打印输入的数组元素 for(int i = 0; i < valid_input_count; i++){ printf("You typed in: %.2f\n", array1[i]); } // 打印累加结果 for(int i = 0; i < valid_input_count; i++){ sum += array1[i]; printf("The accumulated value of the input is: %.2f\n", sum); } return 0; }
内容的提问来源于stack exchange,提问作者deafninja
相关产品推荐
相关产品推荐

