统计字符串元音字母数量时出现编译错误,请求排查问题
统计字符串元音字母数量的C代码编译错误排查
你编写的用于统计字符串元音数量的C代码如下:
// 统计字符串中的元音字母数量 #include <stdio.h> #include <string.h> void printstring(); int main() { char sai[8]; // 允许8个字符 char a,e,j,o,u; // 因为已经用i做循环变量,所以用j代替i(此处为逻辑错误) fgets(sai, 8, stdin); // 输入名字 char *ptr = sai; // 给字符串设置指针 int i,t = 0; for(i = 0;i <= 7; i++){ if(*(ptr+i) == a) || (*(ptr+i) == e) || (*(ptr+i) == j) || (*(ptr + i) == o) || (*(ptr + i) == u){ t = t+1; } else { t = t; } } printf("%d", t); }
编译时出现的错误信息:
jill.c: In function 'main': jill.c:12:23: error: expected expression before '||' token if(*(ptr+i) == a) || (*(ptr+i) == e) || (*(ptr+i) == j) || (*(ptr + i) == o) || (*(ptr + i) == u){ ^~
错误原因及修正方案
语法错误:if条件括号使用不当
||是逻辑或运算符,必须包含在if的一对括号内部。你错误地将条件拆分成多个括号,导致语法解析失败。正确写法是把所有判断条件放在同一个if()括号中。逻辑错误:用未初始化变量代替字符常量
你定义的a,e,j,o,u是未赋值的字符变量,存储的是随机垃圾值,根本不是要比较的元音字母。直接使用单引号包裹的字符常量'a'、'e'、'i'、'o'、'u'才是正确做法。逻辑错误:元音字母'i'被误写为'j'
你注释中提到用j代替i,但元音字母是i而非j,这会导致无法统计字母i,直接改成'i'即可。逻辑错误:循环条件不合理
for(i = 0;i <=7; i++)会强制遍历数组所有8个元素,但fgets读取的字符串以'\0'结尾,若输入字符串长度不足7,后续元素为未定义值。正确做法是遍历到字符串结束符'\0'为止:for(i = 0; ptr[i] != '\0'; i++)冗余代码:else分支无意义
else { t = t; }对程序逻辑没有任何贡献,直接删除即可。
修正后的完整代码
// 统计字符串中的元音字母数量 #include <stdio.h> #include <string.h> int main() { char sai[8]; fgets(sai, 8, stdin); char *ptr = sai; int t = 0; while(*ptr != '\0') { // 同时支持大小写元音统计 if(*ptr == 'a' || *ptr == 'e' || *ptr == 'i' || *ptr == 'o' || *ptr == 'u' || *ptr == 'A' || *ptr == 'E' || *ptr == 'I' || *ptr == 'O' || *ptr == 'U') { t++; } ptr++; } printf("%d\n", t); return 0; }
内容的提问来源于stack exchange,提问作者POTHU SAI KRISHNA
相关产品推荐
相关产品推荐

