C语言 用户在逐个字符扫描的字符串中的无限输入



我正在尝试创建一个程序来计算字符的频率并将其与字符一起打印。

但是,对于给定的字符串,我的程序正在无限输入最后一个字符。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct value
{
long long as;
long long k;
};
int main()
{
long long count[128] = {0};
char c;
struct value max;
max.k = 0; max.as = -1;
// Upto Here was only initialization.
while(1)
{
scanf("%c",&c);
printf("%c",c);
if(c!='n')
{
count[c]++;
if(max.as<count[c])
{
max.as = count[c];
max.k = c;
}
if(max.as==count[c]&&max.k<c)
{
max.k = c;
}
}
else break; // Apparently this is never executed.
}
printf("n%c %lld",(char)(max.k),max.as);
}

就像输入"masaka"一样,这里的输出为"masakaa

为什么会在这里发生这种情况?

如果输入中没有换行符,程序将循环,因为它不检查 EOF。

如果在解析任何输入之前到达文件末尾,scanf()将返回EOF

while(1)
{
int result = scanf("%c",&c);
if (result == EOF || result == 0) {
break;
}
printf("%c",c);
if(c!='n')
{
count[c]++;
if(max.as<count[c])
{
max.as = count[c];
max.k = c;
}
if(max.as==count[c]&&max.k<c)
{
max.k = c;
}
}
else break; // Apparently this is never executed.
}

最新更新