while循环在这里不起作用。没有编译错误,print语句也在beggining中执行。代码在没有while循环的情况下工作正常。代码是打印字符串中最重复的字母和它重复的次数
#include <stdio.h>
#include <string.h>
int main(void)
{
int t;
int tempC;
scanf("%d",&t);
while ( (tempC = getchar()) != '\n' && tempC != EOF );
while(t--)
{
char c[100];
char r='z';
int i,j=0,count,a,k,amx;
gets(c);
k=strlen(c);
for(i=0,amx=1;i<k;i++)
{
if(c[i]!=0)
{
for(j=0,count=1;j<k;j++)
{
if(c[i]==c[j])
{
if(i!=j)
{
count++;
c[j]=0;
}
a=count;
if(a>amx||(a==amx&&(c[i]<r)))
{
amx=a;
r=c[i];
}
}
}
}
}
printf("%d %c\n",amx,r);
}
}
答案 0 :(得分:0)
执行以下行后,
scanf("%d",&t);
换行符仍留在输入流中。下一次调用gets
最终只会读取换行符。
在读取t
后,您需要添加代码以忽略其余部分。
scanf("%d",&t);
// Ignore the rest of the line from the input stream.
char c;
while ( (c = getchar()) != '\n' && c != EOF);
另外,请勿使用gets
。
进一步阅读:Why is the gets function so dangerous that it should not be used?。
改为使用fgets
。
答案 1 :(得分:0)
根据你提到的,while循环工作正常,只需使用scanf()代替gets()(不要使用gets())然后printf()也将在循环后执行。
答案 2 :(得分:0)
您也可以直接询问gcc compiler
:
gcc test.c -o test.x -std=c99 -Wall -Wextra
请务必尝试其他选项:-std=gnu99
,-std=gnu89
,-std=c89
,以及我的首选:
gcc test.c -o test.x -Wall -Wextra -ansi -pedantic-errors -O0