关于printf和char的问题

FelixKYD 2016-12-29 11:23:54
代码如下:

#include <stdio.h>
int main ( void )
{
char i ;
i = '0' ;
while(1)
{
while ( i != '1' )
{
scanf( "%c", & i );
printf( "%c", i );
}
break;
}
return 0 ;
}


写这段代码本来是想看一下,如果用scanf给一个char变量赋一个字符串的值,char变量中是字符串中的第一个字符,还是最后一个字符。比如输入“asdfghjkl”,是输出“a“还是”l”。但是我输入“asdfghjkl”后,输出的就是“asdfghjkl”。
scanf语句执行后,变量i中不只是有一个值么?为什么printf打印出了这么多字符?
谢谢指导!
...全文
598 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yes-hyh 2016-12-29
  • 打赏
  • 举报
回复
引用 1 楼 heyuhang112 的回复:
因为你是个循环,,循环读入,然后输出每一个字符,当然你看到的就是一个字符串
scanf是要你按了回车后才开始一个一个的读的
yes-hyh 2016-12-29
  • 打赏
  • 举报
回复
因为你是个循环,,循环读入,然后输出每一个字符,当然你看到的就是一个字符串
yes-hyh 2016-12-29
  • 打赏
  • 举报
回复
引用 3 楼 FelixKYD 的回复:
[quote=引用 2 楼 heyuhang112 的回复:] [quote=引用 1 楼 heyuhang112 的回复:] 因为你是个循环,,循环读入,然后输出每一个字符,当然你看到的就是一个字符串
scanf是要你按了回车后才开始一个一个的读的[/quote] 就是说,我输入字符串的时候,这些字符串都存在缓存里了,我按回车后,scanf从缓存中每次只读一个字符,赋值给i,然后马上打印,指导发现字符串中有“1”才停下,对吧? [/quote] 对,就是这样!
小灸舞 版主 2016-12-29
  • 打赏
  • 举报
回复
单步一下就清楚了。
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
paschen 2016-12-29
  • 打赏
  • 举报
回复
你的变量 i 会依次接收到 'a' ,输出'a', 接收到's', 输出's'............ 最后i 中存的只是最后那个字符,但中间会依次接收到各个字符,并输出这个字符
FelixKYD 2016-12-29
  • 打赏
  • 举报
回复
引用 2 楼 heyuhang112 的回复:
[quote=引用 1 楼 heyuhang112 的回复:] 因为你是个循环,,循环读入,然后输出每一个字符,当然你看到的就是一个字符串
scanf是要你按了回车后才开始一个一个的读的[/quote] 就是说,我输入字符串的时候,这些字符串都存在缓存里了,我按回车后,scanf从缓存中每次只读一个字符,赋值给i,然后马上打印,指导发现字符串中有“1”才停下,对吧?

69,371

社区成员

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

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