鱼C论坛

 找回密码
 立即注册
查看: 2027|回复: 7

[已解决]字符输入输出问题

[复制链接]
发表于 2022-6-8 23:30:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
char c;
for(c=getchar();getchar()!='#';c=getchar()){
  putchar(c);
}
输入的字符为:12345#        
请问各路大神结果是多少,并且为什么会这样输出
最佳答案
2022-6-9 00:04:10
本帖最后由 临时号 于 2022-6-9 13:23 编辑

执行结果是13
首先,for循环进入初始化,c=getchar()读到了1,并将1赋值给了c
然后,for循环进入了条件’判断,getchar()!='#'又读到了2,因为不等于#,所以进了循环,输出了c,也就是1
然后,for循环执行了循环后需要执行的c=getchar()又读到了3,并将3赋值给了c
然后,for循环又进入了条件判断,getchar()!='#'又读到了4,因为不等yu#,所以进了循环,输出了c,也就是3
然后,for循环执行了循环后需要执行的c=getchar()又读到了5,并将5赋值给了c
最后,for循环进入了条件’判断,getchar()!='#'又读到了#,因为#等于#,条件不符合,所以退出了循环,程序结束

如果你想要输出12345的话,需将程序写成
char c;
for(c=getchar();c!='#';c=getchar()){
    putchar(c);
}
如果还没看懂可以回复我追问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-9 00:04:10 | 显示全部楼层    本楼为最佳答案   
本帖最后由 临时号 于 2022-6-9 13:23 编辑

执行结果是13
首先,for循环进入初始化,c=getchar()读到了1,并将1赋值给了c
然后,for循环进入了条件’判断,getchar()!='#'又读到了2,因为不等于#,所以进了循环,输出了c,也就是1
然后,for循环执行了循环后需要执行的c=getchar()又读到了3,并将3赋值给了c
然后,for循环又进入了条件判断,getchar()!='#'又读到了4,因为不等yu#,所以进了循环,输出了c,也就是3
然后,for循环执行了循环后需要执行的c=getchar()又读到了5,并将5赋值给了c
最后,for循环进入了条件’判断,getchar()!='#'又读到了#,因为#等于#,条件不符合,所以退出了循环,程序结束

如果你想要输出12345的话,需将程序写成
char c;
for(c=getchar();c!='#';c=getchar()){
    putchar(c);
}
如果还没看懂可以回复我追问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-6-9 08:14:20 | 显示全部楼层
执行结果是在屏幕上输出12345.
程序运行时候,首先一个getchar()读入了1,比较一下,不是#,于是进入循环,输出了一个1.
然后读入了2,比较一下,不是#,于是进入循环,输出了一个2.
继续循环读入3、4、5,不是#,于是输出。这时在屏幕上输出了12345.
第6圈循环,读入了#,比较是#,于是跳出循环,不输出#。

临时号大哥给出的执行结果13,我也不认同。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-9 11:40:04 | 显示全部楼层

char c;
for(c=getchar();getchar()!='#';c=getchar()){
  putchar(c);
}
输入的字符为:12345#  
c='1' getchar()=‘2’
输出1
c='3' getchar()=‘4’
输出3
c='5' getchar()=‘#’退出

char c;
for(c=getchar();c!='#';c=getchar()){
  putchar(c);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-9 13:21:50 | 显示全部楼层
顶级太阳 发表于 2022-6-9 08:14
执行结果是在屏幕上输出12345.
程序运行时候,首先一个getchar()读入了1,比较一下,不是#,于是进入循 ...

getchar()是读一个字符
而在初始化内,c=getchar(),这个时候读了一个字符
在条件判断内,getchar()!='#',这个时候又读了一个字符
为什么?因为程序很傻,你不能以人的思维去看待,getchar这个函数你调用了两次,那你接收到的返回值也是两次
所以,当你getchar()!='#'时,程序会重新给你读一个输入进来
你如果不想再重新读一个输入进来需把条件写成c=getchar()
你不信你去执行一下楼主的程序,我的每一次回答都会把楼主的程序执行一遍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-9 16:04:02 | 显示全部楼层
临时号 发表于 2022-6-9 13:21
getchar()是读一个字符
而在初始化内,c=getchar(),这个时候读了一个字符
在条件判断内,getchar()!='#', ...

明白了,谢谢。看起来我对于for的循环理解还是有误解的。你这一句程序很傻,提醒了我。谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-13 09:06:15 | 显示全部楼层
临时号 发表于 2022-6-9 00:04
执行结果是13
首先,for循环进入初始化,c=getchar()读到了1,并将1赋值给了c
然后,for循环进入了条件’判断 ...

谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-13 09:08:02 | 显示全部楼层
顶级太阳 发表于 2022-6-9 08:14
执行结果是在屏幕上输出12345.
程序运行时候,首先一个getchar()读入了1,比较一下,不是#,于是进入循 ...

答案确实是13,我刚开始也和你想的一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 12:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表