为什么显示随机数? C程序读取字母

所以我必须创建一个程序来读取用户输入,并显示每个字母出现在该字符串中的次数,以及有多少非字母,但我的字母代码显示随机数。

#include  #include  #define SIZE 100 void readInput (char string[]); void Calc(char string[], int letters[]); void readInput (char string[]) { printf ("Enter a String:\n"); fgets (string, SIZE, stdin); string[strlen (string) - 1] = '\0'; } void Calc(char string[], int letters[]) { int c = 0, x; while (string[c] != '\0') { if (string[c] >= 'a' && string[c] <= 'z') { x = string[c] - 'a'; letters[x]++; } c++; } for (c = 0; c < 26; c++) printf ("%c occurs %d times in the entered string.\n", c + 'a', letters[c]); } int main () { char string[SIZE]; int letters[26]; readInput (string); Calc(string, letters); return 0; } 

这是输出

我是新手中的字符串我用谷歌搜索过的例子,但似乎无法找到我的代码有什么问题,也不知道我将如何包含非字母部分。

letters的内容未初始化 。 正式地,您的程序的行为是不确定的

通过写入int letters[26] = {0};排序int letters[26] = {0}; 这样做会将所有元素设置为零,这就是你想要的。

letters[]是单面化的。 解决方案int letters[26]={0}

您正在读取未初始化的值,这是不确定的。 并且结果不符合您的预期。

在这里,您要初始化元素,表示您还没有看过任何charcaters。 (自动存储持续时间)。

覆盖'\n'更好方法是

 string[strcspn(string, "\n")] = 0; 

你应该初始化所有0值的letters