我正在尝试创建一个程序,该程序将计算字符的频率并将其与字符一起打印。
但是对于给定的字符串,我的程序正在无限输入最后一个字符。
#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”,在此处将输出显示为“ masakaaaaaaaaaaaaaaaaaaaaaaaa”,直到达到输出限制为止,均会打印a。
为什么在这里发生这种情况?
答案 0 :(得分:1)
如果输入中没有换行符,则程序将循环,因为它不会检查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.
}