scanf 和gets吃回车问题

僵尸男孩 2014-03-08 09:53:23
int a ;
char str1[20],str2[20],str3[20];
scanf("%d",&a);
gets(str1);
printf("%s",str1);
gets(str3);
printf("%s",str3);
gets(str2);
printf("%s",str2);
这是一个例子,当scanf输入%d的时候,打一个回车那么这个回车会被第一个gets吃掉,那么就只能输入2个字符串。 但是当输入str3的时候也要打一个回车,这个回车str2却不会去吃。 这到底是什么机制? gets不互相吃回车? 支持上个另外一个形式的输入的?
...全文
1618 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶之香 2014-03-12
  • 打赏
  • 举报
回复
查看MSDN和调试吧
chendalang 2014-03-12
  • 打赏
  • 举报
回复
gets()会将回车一起读进字符数组里 scanf("%s")不会读回车 scanf("%c")会将空格和回车留在输入流里,下一次读取,读输入流里的下一个字符
Guy_Fwakes 2014-03-10
  • 打赏
  • 举报
回复
第一个输入读取一个整数,输入时你会输入(例如): 3 \n(回车),此时这两个输入会被放在输入缓冲区中,第一个3被 scanf("%d",&a) 获取,第二个回车 被 gets(str1)获取,当再一次输入时(例如):asdjfsdjf \n 会被 gets(str3)全部读取,因为gets()读取的是字符串以\n为结尾的,总结即为楼上所说。
missheaven2011 2014-03-08
  • 打赏
  • 举报
回复
gets函数会吃掉输入字符串的回车符 scanf %d 会将回车符留在输入字符串中

70,029

社区成员

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

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