将文件的字母数存储到数组中

时间:2014-04-08 18:50:08

标签: c

关于我的任务的问题是我必须存储数组中所有字母的计数,小写和大写的处理方式相同。我使用的策略是将所有字母转换为大写,然后计算它们。但是,当我尝试打印输出时,它没有给我正确的输出。

例如,我有一个文件:

  

ADDADD

但是对于输出,它给了我一些疯狂的数字。

这是我的代码(有点乱):

void loadText(char story[])
{
    FILE *input;
    int letter = 0;
    int other = 0;
    int totalcharacter;
    char words;

    input = fopen(story, "r");

    while(fscanf(input, "%c", &words) != EOF)
    {
        if ((words >= 'A') && (words <= 'z'))
        {
            letter++;
        }
        else
        {
            other++;
        }
    }

    totalcharacter = letter + other;

    printf("Letters: %d\n", letter);
    printf("Characters: %d\n", totalcharacter);

    int typeofletter[26];               
    int i = 0;

    while(fscanf(input, "%c", &words) != EOF)
    {
        if ((words >= 'a') && (words <= 'z'))
        {
            words = toupper(words);
        }

        if((words >= 'A') && (words<='Z'))
        {
            typeofletter[words - 'A']++;
        }
    }

    for(i = 0; i < 26; i++)
    {
        if(typeofletter[i] != 0)
        {
            printf("%c occurs %d times \n", i + 'A', typeofletter[i]);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

尝试将typeofletter数组初始化为0. int typeofletter[26] = {0} - GoldRoger

其次,你认为fscanf在你的第二个循环中继续阅读? 如果你通过文件fscanf直到你达到EOF,你认为下次你打电话给EOF时会发生什么?您需要重新开始在您想要从一开始就重新开始的文件中读取的位置。 - Asthor