当前位置: 代码迷 >> C语言 >> scanf 和fgets,gets 连用的有关问题
  详细解决方案

scanf 和fgets,gets 连用的有关问题

热度:10559   发布时间:2013-02-26 00:00:00.0
scanf 和fgets,gets 连用的问题
   先读入n 表示后面读入n行字符串,
第一种代码
#include <stdio.h>
#include <string.h>
char s[10010]={'\0'};
int n,len;
int main()
{
    int i;
    while(scanf("%d\n",&n)==1)
    {
       for(i=0;i<n;i++)
       {
          gets(s);

          if(!strcmp(s,"1")||!strcmp(s,"4")||!strcmp(s,"78"))
            printf("+");
          else
          {
            len=strlen(s);
            if(s[len-2]=='3'&&s[len-1]=='5')
                printf("-");
            else if(s[0]=='9'&&s[len-1]=='4')
                printf("*");
            else if(s[0]=='1'&&s[1]=='9'&&s[2]=='0')
                printf("?");
          }
          printf("\n");
       }
    }
    return 0;

第二种
#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    char str[1000];
    scanf("%d",&n);
    getchar();
    while(n--)
    {
        fgets(str,1000,stdin);

        str[strlen(str)-1]='\0';
         if(strcmp(str,"1")==0||strcmp(str,"4")==0||strcmp(str,"78")==0)
         printf("+\n");
        else if(str[strlen(str)-1]=='5'&&str[strlen(str)-2]=='3')
         printf("-\n");
         else if(str[strlen(str)-1]=='4'&&str[0]=='9')
         printf("*\n");
         else if(str[0]=='1'&&str[1]=='9'&&str[2]=='0')
         printf("?\n");
    }
    return 0;
}
  为什么第一种不需要在读入n后再读一个回车呢?而第二种需要?

------解决方案--------------------------------------------------------
因为第一个scanf的格式里你写了'\n',scanf会自动跳过10后面的换行。
  相关解决方案