如何用C语言判断一个字母是否为元音?附我的代码实现
C语言判断字母是否为元音的问题修复
原代码及问题现象
用户编写的代码如下:
#include <stdio.h> #include <ctype.h> #include <stdbool.h> int main(){ char input; scanf("%c", &input); if(isupper(input)){ printf("这是大写字母。\n"); } else{ printf("这是小写字母。\n"); } int C = ((int)input); // 将字符转为ASCII码 int intarray[10] = {65, 69, 73, 79, 85, 97, 101, 105, 111, 117}; // 元音字母的ASCII数组 for(int i = 0; i < 10; i++){ if(C == intarray[i]){ // 判断是否为元音 printf("Yes\n"); // 是元音则输出 break; } else{ printf("No\n"); // 非元音则输出 break; } } return 0; }
输入输出示例
- 输入:
o - 输出:
这是小写字母。 No
问题分析
核心问题出在for循环逻辑:循环仅执行第一次迭代(i=0),就直接进入else分支输出No并break终止循环,完全没有检查数组中后续的元音ASCII值(比如o对应的111在数组的第9位)。
修复方案
调整循环逻辑,先遍历完所有元音元素再判断是否匹配,只有当所有元素都不匹配时才输出“不是元音”:
#include <stdio.h> #include <ctype.h> #include <stdbool.h> int main(){ char input; scanf("%c", &input); // 判断大小写并输出中文提示 if(isupper(input)){ printf("这是大写字母。\n"); } else{ printf("这是小写字母。\n"); } int c_ascii = (int)input; int vowels[10] = {65, 69, 73, 79, 85, 97, 101, 105, 111, 117}; bool is_vowel = false; // 遍历所有元音ASCII值 for(int i = 0; i < 10; i++){ if(c_ascii == vowels[i]){ is_vowel = true; break; // 找到匹配项后终止循环 } } // 根据判断结果输出 if(is_vowel){ printf("是元音\n"); } else { printf("不是元音\n"); } return 0; }
修复后测试
- 输入:
o - 输出:
这是小写字母。 是元音
更简洁的写法(可选)
不需要用数组,直接用逻辑判断更直观:
#include <stdio.h> #include <ctype.h> int main(){ char input; scanf("%c", &input); if(isupper(input)){ printf("这是大写字母。\n"); } else { printf("这是小写字母。\n"); } // 直接判断是否为元音字母 if(input == 'a' || input == 'e' || input == 'i' || input == 'o' || input == 'u' || input == 'A' || input == 'E' || input == 'I' || input == 'O' || input == 'U'){ printf("是元音\n"); } else { printf("不是元音\n"); } return 0; }
内容的提问来源于stack exchange,提问作者Rez
相关产品推荐
相关产品推荐

