c语言scanf gets问题

C\u8bed\u8a00\u4e2dscanf\u540e\u63a5gets\u7684\u95ee\u9898\u3002

scanf()\u51fd\u6570\u63a5\u53d7\u8f93\u5165\u4ee5\u540e\uff0c\u56de\u8f66\u88ab\u4fdd\u5b58\u5728\u8f93\u5165\u6d41\u4e2d\u4e86\uff0c\u4f60\u5728scanf()\u540e\u9762\u52a0\u4e00\u4e2agetchar()\u5c31\u597d\u4e86\u3002 \u8fd9\u6837\u4f1a\u5403\u6389\u591a\u4f59\u7684\u56de\u8f66\u7b26\uff0c\u540e\u9762\u7684gets()\u5c31\u53ef\u4ee5\u63a5\u53d7\u8f93\u5165\u4e86\u3002

char s[1024];// \u5047\u8bbe\u8f93\u5165123 abc 123gets(s); // \u53ef\u4ee5\u8bfb\u53d6\u4e00\u884cscanf("%s",s); // \u53ea\u80fd\u8bfb\u53d6123\uff0c\u7a7a\u683c\u540e\u7684abc 123\u90fd\u4e0d\u4f1a\u88ab\u8bfb\u8fdb\u6765

scanf的%s格式接收字符串时,以空格或回车作为终止符。
而gets只以回车作为终止符。
你这里s1==aaa s2==bbb s3=ccc ddd所以输出会这样
puts输完最后输出'\n',就是换行

scanf函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到回车为止。
scanf gets
多个 单个
地址连续 地址可能不连续
\n结尾 \n结尾
输入3个字符需4字节 输入3个字符需≥6字节
特殊代码 %s 特殊代码 %s
对于输入字符串或整数不够精密 对于输入字符或整数不够精密

gets是以'\n'作为结束符的,并且是以行位单位接收。并且puts输出时会自动在末尾加入'\n'。
在输入完aaa bbb后回车,分别存到s1、s2中,这时s3接收的是这个回车,s4接收的就是ccc ddd,所以输出应该是
aaa
bbb

ccc ddd

scanf遇空格确实停止了,所以输入才能分别保存在s1,和s2。

扩展阅读:scratch免费编程网站 ... cost of goods sold ... scanf gets getchar ... putchar ... printf scanf ... balance sheet ... sp工具及打法介绍带图 ... operating profit ... sst ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网