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

时间:2017-11-22 10:22:52

标签: c string

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

#include <stdio.h>
#include <string.h>

#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;
}

This is the output

我是字符串的新手我已经搜索了一些示例,但似乎无法找到我的代码的错误,也不知道我将如何包含非字母部分。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

letters[]是未初始化的。 解决方案int letters[26]={0}

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

在这里,您希望使用0初始化元素,表示您还没有看过任何字符。 (自动存储时间)。

覆盖'\n'的更好方法是

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

答案 2 :(得分:0)

您应该使用所有0值初始化letters