c的scanf("%c")的问题

aszxqw 2011-08-23 10:12:32
main
{
char a;
scanf(" %c",&a);
printf("%c",a);
}
然后在黑框里面输入
回车
回车
a

输出也是a。
为什么输出不是回车?

scanf(" %c");在%前面加一个空格就可以跳过所有空格和回车?
为什么?
...全文
253 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsc_ericluo 2011-08-25
  • 打赏
  • 举报
回复
没注意,学习!
大白菜123654 2011-08-25
  • 打赏
  • 举报
回复
空格的问题哦。
ljhhh0123 2011-08-24
  • 打赏
  • 举报
回复
这是C标准的规定。没什么可解释的。
ouen333 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 njfylong 的回复:]
引用 14 楼 lvjing_csdn 的回复:

scanf中格式控制字符串中的空格是有很大用处的,不是随便加的。如果在scanf的格式控制中出现空白字符(回车、空格、制表符),那么scanf认为“后面还有数据要输入”,当前的空白符用来匹配输入的任何空白符。所以你输入的回车被那个空格匹配掉了。如果把那个空格去掉就可以输入回车了。楼主可是试试更有趣的
scanf("%c ",&amp……
[/Quote]
同上+1
njfylong 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lvjing_csdn 的回复:]

scanf中格式控制字符串中的空格是有很大用处的,不是随便加的。如果在scanf的格式控制中出现空白字符(回车、空格、制表符),那么scanf认为“后面还有数据要输入”,当前的空白符用来匹配输入的任何空白符。所以你输入的回车被那个空格匹配掉了。如果把那个空格去掉就可以输入回车了。楼主可是试试更有趣的
scanf("%c ",&a);。有时用scanf输入字符时在前面加个空格是有好处的,……
[/Quote]
应该就是这么理解
AnYidan 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 luciferisnotsatan 的回复:]
这里空格可以匹配各种空白符:空格,回车,制表符
[/Quote]
++
赵4老师 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lvjing_csdn 的回复:]
scanf中格式控制字符串中的空格是有很大用处的,不是随便加的。如果在scanf的格式控制中出现空白字符(回车、空格、制表符),那么scanf认为“后面还有数据要输入”,当前的空白符用来匹配输入的任何空白符。所以你输入的回车被那个空格匹配掉了。如果把那个空格去掉就可以输入回车了。楼主可是试试更有趣的
scanf("%c ",&a);。有时用scanf输入字符时在前面加个空格是有好处的,如……
[/Quote]
正解
lvjing_CSDN 2011-08-24
  • 打赏
  • 举报
回复
scanf中格式控制字符串中的空格是有很大用处的,不是随便加的。如果在scanf的格式控制中出现空白字符(回车、空格、制表符),那么scanf认为“后面还有数据要输入”,当前的空白符用来匹配输入的任何空白符。所以你输入的回车被那个空格匹配掉了。如果把那个空格去掉就可以输入回车了。楼主可是试试更有趣的
scanf("%c ",&a);。有时用scanf输入字符时在前面加个空格是有好处的,如果前面还有其他输入的话,可以用来清除缓冲区中的换行符。
hackbuteer1 2011-08-24
  • 打赏
  • 举报
回复
真的像楼主所说的那样啊,scanf(" %c",&a); 这里的空格可以匹配各种空白符:空格,回车,制表符
shenyan008 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lvjing_csdn 的回复:]
scanf中格式控制字符串中的空格是有很大用处的,不是随便加的。如果在scanf的格式控制中出现空白字符(回车、空格、制表符),那么scanf认为“后面还有数据要输入”,当前的空白符用来匹配输入的任何空白符。所以你输入的回车被那个空格匹配掉了。如果把那个空格去掉就可以输入回车了。楼主可是试试更有趣的
scanf("%c ",&a);。有时用scanf输入字符时在前面加个空格是有好处的,如……
[/Quote]
学习了,mark。
tony2278 2011-08-24
  • 打赏
  • 举报
回复
学习了
zhang_xm001 2011-08-24
  • 打赏
  • 举报
回复
其实scanf这个函数还有很多用法,只是我们不常用到而已,你这个用法只是其中之一,要想知道原因,去看以下它的具体用法不就行了吗?
coko_fly 2011-08-24
  • 打赏
  • 举报
回复
scanf()函数就是这样的,空格,tab键和回车键都是它的空白符。他要求什么格式,你就必须以什么格式输入。比如:scanf("%c , %c ",&a,&b);————因为逗号前后都有空格,所以我们输入的时候也要输入空格,例如:
a , b(回车)。 scanf()函数是不接收回车键的,我们输入的时候,有一个缓冲区,在以下三种情况下,缓冲区的内容会被刷新①缓冲区满的时候②遇到回车的时候③遇到输入请求的时候。而且,有一点很重要,但我们用scanf()函数输入数据时,当我们按下回车键,回车键之前的所有数据会显示在我们的显示器上,但是回车键却留在了缓冲区。这一点和getchar()函数有所不同。getchar()把空格,tab键和回车都作为合法的字符。如果,你想让回车键也被接收并且显示的话,你可以尝试用getchar()循环输入。例如:

while((ch = getchar()) != EOF) //EOF 是我们键盘的ctrl + z 键,它的值为 -1
{
putchar(ch); //输出字符
}

**注意:putchar 和getchar函数都ctype.h 文件中,所以一定要有这句话 #include “ctype.h”

w346581442 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 saishow 的回复:]
理解 流 就知道了.
[/Quote]流是C++中得概念哦
Sunny_Liu0808 2011-08-24
  • 打赏
  • 举报
回复
恩,学习了。
programmer2 2011-08-23
  • 打赏
  • 举报
回复
上面的错了,不能编辑,我再发一次好了!
真的是这样的,如果是
#include <stdio.h>
int main()
{
char a;
scanf(" %c",&a);
printf("%c",a);
return 0;
}

有空格的话如果输入空格就会要求再次输入,如果是
#include <stdio.h>
int main()
{
char a;
scanf("%c",&a);
printf("%c",a);
return 0;
}

没有空格,输入回车的话就会返回回车

求高手,求解!!!
programmer2 2011-08-23
  • 打赏
  • 举报
回复
真的是这样的,如果是
#include <stdio.h>
int main()
{
char a;
scanf(" %c",&a);
printf("%c",a);
return 0;
}
有空格的话如果输入空格就会要求再次输入,如果是
#include <stdio.h>
int main()
{
char a;
scanf("%c",&a);
printf("%c",a);
return 0;
}

没有空格,输入回车的话就会返回回车

求高手,求解!!!
modicum_ck 2011-08-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 luciferisnotsatan 的回复:]
这里空格可以匹配各种空白符:空格,回车,制表符
[/Quote]

++
尘缘udbwcso 2011-08-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 c3250710 的回复:]
谭浩强的书里有规定,遇空格,回车,tab键都是直接结束的,你直接输入回车,相当于默认直接结束,因此不会输出回车。
至于怎么输出回车,我也还没想到呢。
[/Quote]

printf("%c", 10);
这个可以输出回车
汇编里换行输出'13, 10, '$'
一个是回车,一个是换行
那年的月光 2011-08-23
  • 打赏
  • 举报
回复
输出'\13'输出回车吧?
加载更多回复(7)

69,371

社区成员

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

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