鱼C论坛

 找回密码
 立即注册
查看: 1956|回复: 4

[已解决]关于getchar的问题

[复制链接]
发表于 2022-8-8 09:10:27 | 显示全部楼层 |阅读模式

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

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

x
为什么这段程序,在键盘上输入12345#,输出的是13,而不是12345呢?
#include <stdio.h>
int main(void)
{
  char c;
  for (c = getchar(); getchar() != '#'; c = getchar())
  {
    putchar(c);
  }
  return 0;
}
最佳答案
2022-8-8 10:19:30
本帖最后由 jackz007 于 2022-8-8 10:23 编辑

      问题出在你使用了 3 个 getchar(),每一个都会消减一个键盘输入字符,其中,用于判断的那一个更是没有被保存,直接被丢弃,所以,最后,只有部分输入内容被显示出来。
       要解决问题很简单,把键盘输入和判断统一到同一个 getchar() 上。
        for(; (c = getchar) != '#' ;)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-8 10:19:30 From FishC Mobile | 显示全部楼层    本楼为最佳答案   

回帖奖励 +10 鱼币

本帖最后由 jackz007 于 2022-8-8 10:23 编辑

      问题出在你使用了 3 个 getchar(),每一个都会消减一个键盘输入字符,其中,用于判断的那一个更是没有被保存,直接被丢弃,所以,最后,只有部分输入内容被显示出来。
       要解决问题很简单,把键盘输入和判断统一到同一个 getchar() 上。
        for(; (c = getchar) != '#' ;)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-8 10:22:04 | 显示全部楼层

回帖奖励 +10 鱼币

本帖最后由 iMarkWu 于 2022-8-8 10:26 编辑

for (c = getchar(); getchar() != '#'; c = getchar())
因为你的判断条件也是getchar(),也读入了一个字符。

所以输入12345#运行情况:
c = getchar()     // 读入1,c=1
getchar() != '#'    // 读入2, c=1, '2' != '#'符合条件,输出c
c = getchar()    // 读入3, c=3
getchar() != '#'    // 读入4,c=3, '4' != '#'符合条件,输出c
......

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

使用道具 举报

发表于 2022-8-8 10:27:33 | 显示全部楼层
执行结果是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);
}

评分

参与人数 1鱼币 +5 收起 理由
1613551 + 5

查看全部评分

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

使用道具 举报

发表于 2022-8-8 22:21:38 | 显示全部楼层
3次调用getchar函数,每个getchar都会从stdin中读走1个字符,所以c变量前后只被赋值为1和3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 10:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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