关于我的任务的问题是我必须存储数组中所有字母的计数,小写和大写的处理方式相同。我使用的策略是将所有字母转换为大写,然后计算它们。但是,当我尝试打印输出时,它没有给我正确的输出。
例如,我有一个文件:
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]);
}
}
}
答案 0 :(得分:1)
尝试将typeofletter
数组初始化为0. int typeofletter[26] = {0}
- GoldRoger
其次,你认为fscanf在你的第二个循环中继续阅读? 如果你通过文件fscanf直到你达到EOF,你认为下次你打电话给EOF时会发生什么?您需要重新开始在您想要从一开始就重新开始的文件中读取的位置。 - Asthor