gets()的疑问,使用两个gets()后有一些不懂

ylj103037496 2009-01-23 03:21:49
#include <stdio.h>

int main()
{
char name[81];
gets(name);
puts(name);
puts("\n");
gets(name);
puts(name);
return 0;
}

为什么输入145[enter]后,显示:
145
145
[enter]
[enter]
[enter]
please pass any key to continue:(我用的是VC)
为什么没有允许我再次向name里写数据,因为看书的一些知识不太懂,就写这个来测试 一下。

...全文
1104 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
na2650945 2009-01-24
  • 打赏
  • 举报
回复
学习了。
很受益。
ylj103037496 2009-01-23
  • 打赏
  • 举报
回复
非常谢谢waizqfor,您多次帮我解题,谢谢。

谢谢lbh2001、xiaoyisnail。
waizqfor 2009-01-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 waizqfor 的回复:]
引用楼主 ylj103037496 的帖子:
#include <stdio.h>

int main()
{
char name[81];
gets(name);
puts(name);
puts("\n");
gets(name);
puts(name);
return 0;
}

为什么输入145[enter]后,显示:
145
145
[enter]
UP
因为你没有清除缓冲区

[enter]
[enter]
please pass any key to continue:(我用的是VC)
为什么没有允许我再次向name里写数据,因为看书的一些知识不太懂,就写这个…
[/Quote]
写错位置 呵呵
因为没有清空缓冲区 所以你的回车被当做字符串 被读取到下一个gets里
waizqfor 2009-01-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 ylj103037496 的帖子:]
#include <stdio.h>

int main()
{
char name[81];
gets(name);
puts(name);
puts("\n");
gets(name);
puts(name);
return 0;
}

为什么输入145[enter]后,显示:
145
145
[enter]
UP
因为你没有清除缓冲区

[enter]
[enter]
please pass any key to continue:(我用的是VC)
为什么没有允许我再次向name里写数据,因为看书的一些知识不太懂,就写这个来测试 一下。
[/Quote]
xiaoyisnail 2009-01-23
  • 打赏
  • 举报
回复
。。。你后面输入的那就个enter就是被后每年的gets读到了啊
lbh2001 2009-01-23
  • 打赏
  • 举报
回复

#include <stdio.h>

int main()
{
char name[81];
gets(name);
puts(name);
puts("\n");
fflush(stdin); //here清除缓存区的残留字符
gets(name);
puts(name);
return 0;
}

70,029

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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