如何创建一个程序,从c语言中的txt文件中打印出字母的直方图

如何创建一个程序,从c语言中的txt文件中打印出字母的直方图,c,file-io,char,histogram,counting,C,File Io,Char,Histogram,Counting,因此,程序应该接收一个只有小写字母且没有空格的txt文件。例如“aabbhello”。然后,程序将向命令行打印直方图: a: 2 b: 2 h: 1 e: 1 l: 2 o: 1 我目前拥有的东西应该可以工作,但总是给我奇怪的输出: void file_histogram(char *filename) { FILE *fptr; int fsize; fptr = fopen(filename, "r"); if(fptr == NULL) {

因此,程序应该接收一个只有小写字母且没有空格的txt文件。例如“aabbhello”。然后,程序将向命令行打印直方图:

a: 2 
b: 2
h: 1
e: 1
l: 2
o: 1
我目前拥有的东西应该可以工作,但总是给我奇怪的输出:

void file_histogram(char *filename)
{
    FILE *fptr;
    int fsize;
    fptr = fopen(filename, "r");
    if(fptr == NULL) {
        printf("File did not open \n");
    }
    fseek(fptr, 0, SEEK_END);
    fsize = ftell(fptr);
    char content[fsize];
    rewind(fptr);
    char c;
    int count1 = 0;
    while(fscanf(fptr, "%c", &c) == 1) {
        content[count1] = c;
        count1++;
    }
    char name[fsize];
    int count[26];
    int i;
    for (i = 0; i < fsize; i++) {
        //printf("%d", i);
        name[i] = content[i];
    }
    int length = strlen(name);
    for(i = 0; i < length; i++) {
        count[i] = 0;
    }
    for(i = 0; i < length; i++) {
        count[content[i] - 'a']++;
    }
    for(i = 0; i < 26; i++) {
        if(count[i] != 0) {
            printf("%c : %d \n", i + 'a', count[i]);
        }
    }
    fclose(fptr);
}

这就是我的txt文件以“william”作为内容时得到的结果。我真的不知道怎么了。这可能和记忆有关吗?任何帮助都将不胜感激

您是否尝试过以任何方式调试您的程序?即使用调试器和/或调试打印语句来跟踪程序的执行情况?请与我们共享您找到的调试数据。对于初始化计数的循环:
For(i=0;i
For(i=0;ii对print语句进行了一些调试,即,我打印了内容,输出为:william。我还打印了for循环的第一次迭代次数,即7次。因此数组内容和名称中应该只有7个元素。每个数组都应该有字符“w”“i”“l”“i”“a”“m”。但是输出中的频率put仍然完全关闭。有时名称中甚至没有出现字母。您是否尝试过修复我在第二条评论中提到的for循环?效果很好!谢谢。我意识到for循环的范围是错误的。当您在c中创建数组时,值似乎都不是0。您是否尝试在中调试程序任何方法?即使用调试器和/或debug print语句跟踪程序的执行?请与我们共享您找到的调试数据。对于inits
count
For(i=0;i
For(i=0;ii对print语句进行了一些调试,即,我打印了内容,输出为:william。我还打印了for循环的第一次迭代次数,即7次。因此数组内容和名称中应该只有7个元素。每个数组都应该有字符“w”“i”“l”“i”“a”“m”。但是输出中的频率put仍然完全关闭。有时名称中甚至没有出现字母。您是否尝试按照我在第二条评论中提到的修复for循环?效果很好!谢谢。我意识到for循环的范围是错误的。当您在c中创建数组时,值似乎都不为0。
a : 1
i : 1781796
l : 2
m : 1390299937
n : 32767
w : 1