编译时显示警告:找不到条目符号Rrors;默认为0000000000400590

时间:2015-07-01 17:28:08

标签: c c99

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);
   }

}

3 个答案:

答案 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