咕咕咕咕7 2022-11-12 21:09 采纳率: 100%
浏览 24
已结题

c语言,关于getchar,与scanf读取同一串字符,原理是怎样

c primer plus中有这样一道程序,输入一个字符与两个数字,打印成阵

img

假设输入的是C 1 2

对于getchar与scanf的读取情况,我的理解是:
一行字符输入,回车。
ch=getchar 读取了C,进入while循环。
scanf读取 1 2 。
内循环getchar读取\n 。
结束。

对于这样的读取我理解为,输入一串字符,每读取一次就会把,读取的东西从原字符串删去,这样就方便开始下一次读取。但是,下一道程序让我有了疑惑,

img

这是验证输入的是否为数字的自定义函数,假设输入的是
apple 1
那么我的理解是 :
scanf读取apple,进入循环。
getchar读取 1 ,输出 1 is not a integer 。

但实际上,输出的是 apple 1 is not a integer 。

这就与我先前的理解出现了矛盾。
在scanf读取 apple 后,
内循环gerchar重新把scanf读取过的再读取了一次,
而不是我想象中的仅仅把scanf没读取掉的进行读取。

我后来又打了几个程序进行思考,但都是符合我的原来的想法的,所以这个程序到底为什么让getchar读取到scanf读取过的数据呢?不知是不是我悟性太差,我脑子就此打结了,所以在此寻求各位帮助,感谢

  • 写回答

1条回答 默认 最新

  • 谢玄. 2022-11-14 14:46
    关注

    你去看
    scanf("%ld",&input) 他要读取的是什么,是一个数字.
    但是你输入的是 apple 1 显然一开始读取是读取不到数字的,于是就不会读取,并且 scanf 的返回值会变成 false 。
    于是就进入循环里面了。循环里面的 getchar 就是从 a 开始读取了,因为 scanf 并没有读取任何内容

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月26日
  • 已采纳回答 11月18日
  • 创建了问题 11月12日

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。