为什么显示随机数? 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