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

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日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度