我一直在尝试编写一个非常简单的字符计数器,它将接收一个字符串并返回每个字符的使用数量。
出于某种原因,无论什么时候计算字母“C”以及超出它的时间都会中断,我无法弄明白为什么。它读取A和B的罚款。
我知道我可能会以非常低效的方式执行此操作,但我尝试使用更多循环并且仍然存在相同的问题。所以我想我会尽可能简单地做到这一点,直到我发现它是什么造成的。
以下是代码:
#include <stdio.h>
int main() {
char str[255];
int chCount[25];
printf("Please enter a string (255 character max): ");
scanf("%[^\n]", str);
for(int x = 0; str[x] != '\0'; x++) {
if((str[x] >= 65 && str[x] <= 90) || (str[x] >= 97 && str[x] <= 122)) {
switch(str[x]) {
case 65:
case 97:
chCount[0]++;
break;
case 66:
case 98:
chCount[1]++;
break;
case 67:
case 99:
chCount[2]++;
break;
}
}
}
printf("A: %i B: %i C: %i D: %i", chCount[0], chCount[1], chCount[2], chCount[3]);
return 0;
}
显然它没有完成,我不想费心为字母表中的每一个字母写出案例,并在一天结束时遇到同样的问题。
例如,如果我输入“AaBbCc”,我将以“A:2 B:2:C:1244735232”(或其他大数字)返回。
编辑:我非常愚蠢,就像我没有初始化数组一样。将其更改为int chCount [25] = {0};修复了一切,我完成了程序而没有使用那个可爱的switch语句(在它之前有一个有效的if语句。是的,我在精神上受到挑战)。
答案 0 :(得分:5)
您的代码不完整,并且您正在尝试验证尚未输入代码的输出。
您正在尝试打印chCount[3]
本质上是一个未初始化的变量(该数组),因此它会调用undefined behavior。
那就是说,
'A'
,'Z'
等。if
声明是多余的,您已在<{1}}个案例标签中过滤。switch
案例来处理超出范围的值。