当前位置: 代码迷 >> C语言 >> [求助]不明白这个gets()函数
  详细解决方案

[求助]不明白这个gets()函数

热度:316   发布时间:2008-05-05 23:00:36.0
[求助]不明白这个gets()函数
有这样的一个小程序:

/********************************************************
** By Brahmos  *
*********************************************************/
#include "stdio.h"
void main()
{
int n;
char s[50];
printf("Input a number:");
scanf("%d",&n);
gets(s);
puts(s);
printf("The number is:%d\n",n);
}



运行发现,当我输入“15”并按回车键后,就运行到printf("")这一句了。程序中的gets(s)好像不起作用了。
我猜想是受scanf()影响,因为scanf()后面要按回车键,这个回车键中的换行符被gets()捕捉到了,就立即结束了,并非是不运行。。
不知有哪位朋友知道为什么?希望能探讨一下。。 谢谢!

[[it] 本帖最后由 布拉莫斯 于 2008-5-6 17:38 编辑 [/it]]
搜索更多相关的解决方案: gets  函数  Brahmos  

----------------解决方案--------------------------------------------------------
猜想正确……
----------------解决方案--------------------------------------------------------
程序代码:

/********************************************
        加行代码即可。
********************************************/
#include "stdio.h"
void main()
{
int n;
char s[50],c;
printf("Input a number:");
scanf("%d",&n);
while(c=getchar()!='\n'&&c!=EOF);
gets(s);
puts(s);
printf("The number is:%d\n",n);

getch();
}

----------------解决方案--------------------------------------------------------
习惯问题

我习惯在格式控制符前后加空格

程序代码:
#include<stdio.h>
int main()
{
    int n;
    char s[50];
    printf("Input a number:");
    scanf(" %d ",&n);
    gets(s);
    puts(s);
    printf("The number is:%d\n",n);
    return 0;
}

----------------解决方案--------------------------------------------------------
谢谢楼上的两三位朋友做答。........
----------------解决方案--------------------------------------------------------
其实,我解决的方法是再加一个gets()在原来的gets()函数后面
就这样
/********************************************************
** Highlight software by yzfy(雨中飞燕) http://yzfy.org *
*********************************************************/
#include<stdio.h>
int main()
{
    int n;
    char s[50];
    printf("Input a number:");
    scanf(" %d",&n);
    gets(s);
    gets(s);
    puts(s);
    printf("The number is:%d\n",n);
    return 0;
}


[[it] 本帖最后由 布拉莫斯 于 2008-5-6 17:40 编辑 [/it]]
----------------解决方案--------------------------------------------------------
广陵,想问问你,为什么你要检查EOF呢?
----------------解决方案--------------------------------------------------------
我一般是这样的:

#define CLEAR { char c ; while( (c=getchar()) != '/n' && c!=EOF );}

然后在要清空缓冲的地方写上CLEAR

EOF通常表示输入结束``所以还是要检查一下这个吧
----------------解决方案--------------------------------------------------------
问题是,都EOF了,剩下的程序还有必要执行么?直接return就够了吧……
----------------解决方案--------------------------------------------------------
菜鸟问句你这程序是要求输入什么输出什么 为什么输入 n又要gets(s) 呢
----------------解决方案--------------------------------------------------------
  相关解决方案