首页 > 其他分享 >C语言 while (putchar(getchar()) != '!') 解释

C语言 while (putchar(getchar()) != '!') 解释

时间:2024-05-16 13:52:31浏览次数:22  
标签:字符 putchar -- while 缓冲区 输入 getchar

​ 代码运行到第4行,getchar()需要输入的数据,但是输入的缓冲区没有数据,所以就需要再命令行窗口(黑窗口)输入新的数据

image

​ 这时候getchar()只需要输入1个字符的数据,但是你可以输入多个数据,打回车的时候之前输入的一行数据都会被发送到缓冲区,回车之前都还可以删除刚才输入的数据修改修改,因为数据还没发送到缓冲区

imageimage

输入了china!然后按了回车,然后 china!\n 总共七个字符就发送到了缓冲区

然后getchar()就获取了第一个字符'c',因为getchar()的返回值是获取的字符,所以它会在它的位置留下这个字符,getchar()就变成了'c'
然后putchar(getchar())就变成了putchar('c')putchar()输出这个字符到命令行窗口里(黑窗口)
image

因为putchar()的返回值是打印出去的字符,所以它会在它的位置留下这个字符,

putchar(getchar()) != '!'就变成了'c' != '!',条件判断结果是 True,满足条件,进入循环

然后循环里啥都没有,进入下一次循环,回到第四行,继续运行

image
image

这时候getchar()还要获取一个字符,这时候缓冲区里原本存的数据是chian\n'c'被第一次循环处理掉了,剩下了hina\n缓冲区里还有数据,getchar()就获取了第一个字符'h'

之后就重复上面的过程

putchar(getchar()) != '!' --> putchar('h') != '!' --> 'h' != '!' --> 1

再次进入循环
image
image
image
image
image

最后一次循环,缓冲区里只剩!\n两个字符了,getchar()获取第一个字符'!'

putchar(getchar()) != '!' --> putchar('!') != '!' --> '!' != '!' --> 0

image

条件判断为False,未能成功进入循环,循环结束

标签:字符,putchar,--,while,缓冲区,输入,getchar
From: https://www.cnblogs.com/l25428455/p/18195828

相关文章

  • while(cin >> x)的说明
    while循环中的cin在学习C++的过程中,C++PreimerPlus中经常出现while(cin>>x),为什么可以这么写?cin是一个输入流对象,cin>>x单独使用时,返回结果也是一个cin对象(修改过的)。>>是运算符的重载,其函数原型istream&operator>>(istream&is,typenamee);,其中typename可以是char*,i......
  • openfeign接口Springboot启动Bean报错未找到Singleton bean creation not allowed whi
    检查步骤检查springboot启动类是否标注@EnableFeignClients注解,未标注该注解会导致无法注入bean检查远程调用模块是否标注注解@FeignClient检查@FeignClient注解中是否写了正确的微服务名称(区分大小写)检查@FeignClient注解中标识的微服务是否启动​​原因:此处接......
  • JavaScript 流程控制语句详解:if语句、switch语句、while循环、for循环等
    JavaScript,作为一种广泛使用的编程语言,它的流程控制语句是构建逻辑和实现功能的基础。流程控制语句包括条件语句、循环语句和转向语句,它们是编程中不可或缺的部分。接下来,我们将一一解析这些语句,带你走进JavaScript的世界。一、什么是流程控制语句流程控制语句是用来控制程序中......
  • SystemVerilog -- 3.1 SystemVerilog while and do-while loop
    SystemVerilogwhileanddo-whileloop两者都是循环构造,只要给定条件为真,就会执行给定的语句集。whiledowhile循环首先检查条件是否为true,如果条件为true,则执行语句。如果条件被证明是假的,则循环就在哪里结束。while循环首先执行一次语句,然后检查条件是否为true。如果条件为......
  • ORA-04063: Package Body “SYS.DBMS_CUBE_EXP” While Expdp
    1.场景数据库版本:11.2.0.4当执行@?/rdbms/admin/awrextr.sql进行awr性能分析数据导出时,报错:ORA-20115:datapumpexportencounterederror:ORA-39127:unexpectederrorfromcalltoexport_string:=SYS.DBMS_CUBE_EXP.INSTANCE_EXTENDED_INFO_EXP('AW$EXPRESS','SYS',......
  • 探讨两种循环表示方法的区别,while循环与for循环的小总结
    基于前天建立的顺序表(sequeue)的其中一个功能函数,引出两个循环的表示方法的区别和比较。算法需求:在一个顺序队列中,合并相同的元素。总体思路:利用两层循环的框架,利用外层循环选中顺序表中第一个数(L->data[i]),再用内循环中进行对比(L->data[j]),如果相同就进行删除操作。首先采用......
  • 实验5 循环结构程序设计(while、do-while语句的应用)
    c语言程序设计——实验报告五实验项目名称:实验项目类型:验证性实验日期:一、实验目的二、实验硬、软件环境Windows计算机、Devc6.0三、实验内容及步骤实验内容:编写程序:(1)用while语句计算自然数列1,2,3……,n的和,n的值在程序执行时输入。(2)用do-while语句计算n的阶乘(3)......
  • error while loading shared libraries: libgsl.so.27: cannot open shared object
     001、问题(base)[root@pc1src]#treemixtreemix:errorwhileloadingsharedlibraries:libgsl.so.27:cannotopensharedobjectfile:Nosuchfileordirectory 002、查找该共享库(base)[root@pc1src]#find/-name"libgsl.so.27"##说明已经安......
  • shell脚本while循环、read读取控制台输入与函数
    while循环while循环结构while[条件判断]do程序done脚本示例:点击查看代码#!/bin/bashwhile[$a-le$1]do sum=$[$sum+$a]doneecho$sum简易写法:点击查看代码#!/bin/basha=1while[$a-le$1]do letsum+=a leta++doneecho$sumread读取......
  • 用Scanner交互 和 while 循环 制作简易计算器
    publicstaticvoidmain(String[]args){System.out.println("欢迎来到简易计算器!");Scannerscanner=newScanner(System.in);System.out.println("请输入要计算的第一个数字:");doublei=scanner.nextDouble();System.out.println("请选择操作:1:加2:减3:乘4:除&qu......