C/C++用户输入统计问题修复:编程语言偏好计数始终为0
修复编程语言偏好计数程序的统计问题
问题根源
- 整数与字符常量比较错误:变量
lang是int类型,你输入的是整数1-4,但判断条件里用了lang == '1'这类字符常量。字符'1'的ASCII值是49,和整数1完全不相等,导致所有计数分支都不会执行,最终输出全为0。 - 首次输入未被统计:程序开头第一次获取的
lang值没有经过计数处理就直接进入循环判断,这部分用户选择的数据被遗漏了。 - 计数变量类型冗余:用
float存储整数计数没必要,改用int类型更合理高效。
修复后的代码
#include <stdio.h> int main() { char ye; int lang; int clan = 0, java = 0, pyth = 0, mat = 0; // 处理首次输入并计数 printf("Favorite programming language C(1), Java(2), Python(3), Matlab(4): "); scanf("%d", &lang); if (lang == 1) { clan++; } else if (lang == 2) { java++; } else if (lang == 3) { pyth++; } else if (lang == 4) { mat++; } printf("Continue (y/n): "); scanf(" %c", &ye); while (ye == 'y') { printf("Favorite programming language C(1), Java(2), Python(3), Matlab(4): "); scanf("%d", &lang); // 修正为整数常量比较 if (lang == 1) { clan++; } else if (lang == 2) { java++; } else if (lang == 3) { pyth++; } else if (lang == 4) { mat++; } printf("Continue (y/n): "); scanf(" %c", &ye); } // 用%d输出整数计数更准确 printf("C: %d\n", clan); printf("Java: %d\n", java); printf("Python: %d\n", pyth); printf("Matlab: %d\n", mat); return 0; }
关键修改说明
- 将所有
lang == '1'这类判断改为lang == 1,匹配int类型变量的比较逻辑。 - 给首次输入的
lang添加计数逻辑,避免用户第一次选择的数据丢失。 - 把计数变量从
float改为int,输出时用%d格式符,符合计数的整数属性。 - 用
clan++替代clan=clan+1,写法更简洁规范。
内容的提问来源于stack exchange,提问作者Jase
相关产品推荐
相关产品推荐

