为什么gets函数不给我输入呢?

多米蒂尔 2007-11-09 11:41:14
函数如下:
main()
{
int i;
int a;
char b[10];
printf("input a:");
scanf("%d",&a);
printf("a=%d",a);
printf("\ninput b:");
gets(b);
printf("\nb=");
for(i=0;i<=strlen(b);i++)
printf("%c",b[i]);
printf("\n");
system("pause");
}

运行结果(TC2.0编译):
input a:12
a=12
input b:
b=
Press any key to continue...

老师上课跟我大概说了下,说是scanf函数调用时在键盘缓冲区留下了回车和换行符,而gets函数接受字符串是以换行符结束的,
gets把刚留下的换行符当成新输入字符串的结束了,所以输入的字符串就为空了。
我暂且这样理解了,但不知道如何解决这个问题,使字符串成功的输入呢?

...全文
345 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
多米蒂尔 2007-11-11
  • 打赏
  • 举报
回复
谢谢大家,现在知道怎么回事了!
_石头_ 2007-11-10
  • 打赏
  • 举报
回复


#include <stdio.h>
main()
{
int i;
int a;
char b[10];
printf( "input a: ");
scanf( "%d",&a);
printf( "a=%d ",a);
printf( "\ninput b: ");
fflush(stdin); //清空缓冲区!
gets(b);
printf( "\nb= ");
for(i=0;i <=strlen(b);i++)
printf( "%c ",b[i]);
printf( "\n ");
system( "pause ");
}



jixingzhong 2007-11-09
  • 打赏
  • 举报
回复
scanf("%d%*c", &a); //scanf 的 * 格式控制丢弃输入内容, 该方法可以丢弃最后的 回车, 以免滞留缓冲
jixingzhong 2007-11-09
  • 打赏
  • 举报
回复
理解完全正确
bargio_susie 2007-11-09
  • 打赏
  • 举报
回复
scanf( "%d",&a);
getchar(); ----->add
TNT_1988 2007-11-09
  • 打赏
  • 举报
回复
了解了!!~~~
老看书还是不性 的,
还是来这里看看理解的更好

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧