关于字符数组的一点疑惑.

Engine_Start 2011-04-22 04:01:46
#include "stdio.h"
void main()
{
char str1[80];//语句1
scanf("%s",str1); //语句2
printf("!%s@\n",str1);//语句3
scanf("%s",str1); //语句4
printf("%s#",str1);//语句5
}


上面是我的代码,我输入“op po”(一次输入,包括空格),然后回车后屏幕输出结果是:
!op@
po#
这样的话我觉得语句执行的顺序就是语句12435了,这是怎么回事啊?
...全文
141 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈思有 2011-04-23
  • 打赏
  • 举报
回复
当你用scanf输入字符串时,空格是各个字符串输入结束的标志,所以op属于第一个scanf,po属于第二个scanf。所以说,输入字符串一般使用gets比较保险。
shexinwei 2011-04-23
  • 打赏
  • 举报
回复
执行的顺序是12345啊。你输入到控制台的语句将会存储在缓冲区,scanf一次,从控制台缓冲区取出一个数据。所以结果很正常。
alang512 2011-04-23
  • 打赏
  • 举报
回复
使用 scanf函数来输入 一个字符串,那么这个字符串就不能含有 空格,空白字符,换行字符,否则读取的这些字符都被编译器 认为:字符串输入结束。于是就丢弃了后面的字符了哦。

但是可以使用 gets函数,就可以解决的这个问题了, 这就是scanf函数与 gets函数的区别

http://www.95wangming.com
一只牛_007 2011-04-23
  • 打赏
  • 举报
回复
大家都给出答案了,我就看看。scanf和gets
tlg233418 2011-04-23
  • 打赏
  • 举报
回复
大家说的挺对的,我想说 的是在你不知道输入的字符串的长度时,最好不要用scanf()
AnYidan 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wang_mengyu 的回复:]
scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
   a. 遇空格、“回车”、“跳格”键。
   b. 遇宽度结束。
   c. 遇非法输入。
[/Quote]

scanf () returns when format is exhausted,

当程序调用 scanf() 时,将控制权交给了 os, 当 os 认为输入结束时,将控制权交给程序
wang_mengyu 2011-04-22
  • 打赏
  • 举报
回复
scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
   a. 遇空格、“回车”、“跳格”键。
   b. 遇宽度结束。
   c. 遇非法输入。

qq120848369 2011-04-22
  • 打赏
  • 举报
回复
输入op,然后打印!op@。
输入po,然后打印po#

没有问题啊、
李亚超 2011-04-22
  • 打赏
  • 举报
回复
C语言把空格作为多个输入的分隔符,输入“op po”。相当于两次输入,一次op,另一次po。因为键盘有缓冲,所以第二次也输入了。
结果就是上面的.........

69,373

社区成员

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

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