[求助]不明白这个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);
}
** 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]]
----------------解决方案--------------------------------------------------------
猜想正确……
----------------解决方案--------------------------------------------------------
程序代码:
/********************************************
加行代码即可。
********************************************/
#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;
}
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;
}
** 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) 呢
----------------解决方案--------------------------------------------------------