关于scanf输入char型数据问题

wcl1986_1 2007-08-14 04:27:53
char a,b,c;
scanf("%c,%c,c",a,b,c);
printf("a=%c,b=%c,c=%c",a,b,c);
为什么输入:空格a,空格b,空格c回车
输出:a=空格,b=?,c=﹃(类似于7这么个东西)
...全文
3013 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcl1986_1 2007-08-18
  • 打赏
  • 举报
回复
thangk you for all
Robert_xy 2007-08-18
  • 打赏
  • 举报
回复
Robert_xy()
我还是想不明白“scanf()在接受a=" "后由于空格后的a使得b,c无法取得正确的值”这句话
==================================================================================

当你输入的是“空格a,空格b,空格c 回车”时,scanf()在接受a=" "后,接下来本应该是分隔符',',但是'空格'后是字符'a',输入格式错误,因此结果无法预料,也就是说是乱码。
gqhonesty 2007-08-18
  • 打赏
  • 举报
回复
都说完了,JF!
wcl1986_1 2007-08-18
  • 打赏
  • 举报
回复
Robert_xy()
我还是想不明白“scanf()在接受a=" "后由于空格后的a使得b,c无法取得正确的值”这句话
waitwinter 2007-08-16
  • 打赏
  • 举报
回复
输入形式根本就没弄对scanf("%c,%c,%c",a,b,c);必须对应输入x,x,x必须用逗号连接,空格和回车都不行,修改成scanf("%c %c %c",a,b,c);就是你想要的了。。。
Robert_xy 2007-08-16
  • 打赏
  • 举报
回复
楼主可能误解了我的意思:
当你输入的是“空格a,空格b,空格c 回车”时,scanf()在接受a=" "后由于空格后的a使得b,c无法取得正确的值,因此形成乱码,若你试试“空格,空格b,空格c 回车”,则输出的就是“a=空格,b=空格,c为乱码”,这样解释楼主再想想。
wcl1986_1 2007-08-16
  • 打赏
  • 举报
回复
楼上说的很好。
楼主在输入"空格a,空格b,空格c"时是不对的,因为在c语言中’空格‘也是一个字符,这样输入的结果是“a=空格,b,c均为乱码”,你再试试输入“空格,b,空格 回车”则输出的结果分别是“a= ,b=b,c= ”和“a=32,b=98,c=32”。
=================
Robert_xy() 说“a=空格,b,c均为乱码“,是为什么(结果正如你说的)?我认为scanf()在接受a=" "后应寻找",",在逗号后接受下一个字符啊。。。
Robert_xy 2007-08-15
  • 打赏
  • 举报
回复
在字符的输入,执行"scanf("%c",c)"时,字符从键盘读取时,遇到空格或回车键为止,同时系统会自动在接受带的字符后面加一个'\0',即输入时字符不能包含空格字符.你试试"回车"就明白了,例如'回车,b,c'.
--------------------------------
这个在输入字符串的时候更为明显,但是在这不一样。a,b,c确实是得到了一个空格,空格的ASICC码
是32,所以当输出printf ("%d %d %d\n", a, b, c)都为32时就说明a b c为空格。
=============================================================================
楼上说的很好。
楼主在输入"空格a,空格b,空格c"时是不对的,因为在c语言中’空格‘也是一个字符,这样输入的结果是“a=空格,b,c均为乱码”,你再试试输入“空格,b,空格 回车”则输出的结果分别是“a= ,b=b,c= ”和“a=32,b=98,c=32”。
dagdyai 2007-08-15
  • 打赏
  • 举报
回复
写得很不错,值得学习
comman_ndsc 2007-08-15
  • 打赏
  • 举报
回复
在字符的输入,执行"scanf("%c",c)"时,字符从键盘读取时,遇到空格或回车键为止,同时系统会自动在接受带的字符后面加一个'\0',即输入时字符不能包含空格字符.你试试"回车"就明白了,例如'回车,b,c'.
--------------------------------
这个在输入字符串的时候更为明显,但是在这不一样。a,b,c确实是得到了一个空格,空格的ASICC码
是32,所以当输出printf ("%d %d %d\n", a, b, c)都为32时就说明a b c为空格。
scribbler 2007-08-15
  • 打赏
  • 举报
回复
Robert_xy() 说得很清楚
comman_ndsc 2007-08-14
  • 打赏
  • 举报
回复
输入: , ,
输出:a= ,b= ,c= a=32,b=32,c=32
wcl1986_1 2007-08-14
  • 打赏
  • 举报
回复
确定 你们可以试试我在8楼重发的程序
input 和 output 我截不下来-_-呵呵不会截
Robert_xy 2007-08-14
  • 打赏
  • 举报
回复
在字符的输入,执行"scanf("%c",c)"时,字符从键盘读取时,遇到空格或回车键为止,同时系统会自动在接受带的字符后面加一个'\0',即输入时字符不能包含空格字符.你试试"回车"就明白了,例如'回车,b,c'.
yangqi227 2007-08-14
  • 打赏
  • 举报
回复
正确输入为
a,b,c加回车
lockhall 2007-08-14
  • 打赏
  • 举报
回复
空格a,空格b,空格c回车
其实没有解决
当第一个输入字符是空格时,a接受空格,这个明白。当b c接受时,为什么不接受逗号后的空格,除非scanf函数不以逗号为结束一个 字符的标志。

你确定你的b c没有接受空格么?

你贴个你的input: output:
wcl1986_1 2007-08-14
  • 打赏
  • 举报
回复
空格a,空格b,空格c回车
其实没有解决
当第一个输入字符是空格时,a接受空格,这个明白。当b c接受时,为什么不接受逗号后的空格,除非scanf函数不以逗号为结束一个 字符的标志。
comman_ndsc 2007-08-14
  • 打赏
  • 举报
回复
问题解决了,楼主不要忘了揭贴
tiedingyan 2007-08-14
  • 打赏
  • 举报
回复
scanf("%c,%c,%c",a,b,c);不对吧,应该改成:scanf(“%c,%c,%c”,&a,&b,&c);
comman_ndsc 2007-08-14
  • 打赏
  • 举报
回复
输入一次空格还要输入一个逗号啊(除了第三次输入),你看你的scanf 语句是怎么定义的scanf("%c,%c,%c",&a,&b,&c);

如果你不想麻烦,那就这样改scanf("%c %c %c",&a,&b,&c);这就是你想要的。
加载更多回复(9)

70,021

社区成员

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

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