鱼C论坛

 找回密码
 立即注册
查看: 1656|回复: 6

[已解决]求助putchar()用法,具体题目:带你学C带你飞 S1E13 动动手 第1题

[复制链接]
发表于 2017-7-12 06:47:17 | 显示全部楼层 |阅读模式

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

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

x
求助putchar()用法,具体题目:带你学C带你飞 S1E13 动动手 第1题 。原题如下:

写一个程序,要求用户输入一句英文句子,将其大小写字母转换。

代码如下。执行该代码,用户先输一段英文,按回车后输出一段大小写转换的英文。
我的问题是,putchar(ch)不是在while循环中的么?所以它不是在每次while循环中执行(即每次输入中执行),而是在最后退出while循环后才会执行呢。

  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int ch;

  5.         printf("请输入一行英文句子:");

  6.         while ((ch = getchar()) != '\n')
  7.         {
  8.                 if (ch >= 'A' && ch <= 'Z')
  9.                 {
  10.                         ch = ch - 'A' + 'a';
  11.                 }
  12.                 else if (ch >= 'a' && ch <= 'z')
  13.                 {
  14.                         ch = ch - 'a' + 'A';
  15.                 }

  16.                 putchar(ch);
  17.         }

  18.         putchar('\n');

  19.         return 0;
  20. }
复制代码
最佳答案
2017-7-12 13:42:31
huiwenwu 发表于 2017-7-12 13:09
我理解这个循环的流程图,只是不太理解putchar()这个函数(可能也是视频里没讲到吧,还学的不够阿。。)
...

你先输入字符串 如:"I love FishC" 回车 也就是字符串 = "I love FishC\n"
getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-12 07:16:51 From FishC Mobile | 显示全部楼层
ch应该定义为整形或字符数组,你这样每次输入新字符就会覆盖前面的字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-12 09:23:22 | 显示全部楼层
2017-07-12_092208.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-12 13:03:37 | 显示全部楼层
知表不言 发表于 2017-7-12 07:16
ch应该定义为整形或字符数组,你这样每次输入新字符就会覆盖前面的字符

不是的,这个是小甲鱼的标准答案,运行没问题。。。

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

使用道具 举报

 楼主| 发表于 2017-7-12 13:09:34 | 显示全部楼层

我理解这个循环的流程图,只是不太理解putchar()这个函数(可能也是视频里没讲到吧,还学的不够阿。。)

因为putchar(ch)要是每次循环都执行一次,运行结果应该是没次输入一个字符,就会相应的输出一个字符(大小写转换),但实际上这个代码运行的结果是,只有当你输入完一段完整句子,敲下回车键后,最后才会输出一句大小写转换的字符串。
这是为什么呢?!putchar(ch)不是在while循环里的吗?不是每次循环就要执行的吗?为什么他会等到最后才输出呢????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-12 13:42:31 | 显示全部楼层    本楼为最佳答案   
huiwenwu 发表于 2017-7-12 13:09
我理解这个循环的流程图,只是不太理解putchar()这个函数(可能也是视频里没讲到吧,还学的不够阿。。)
...

你先输入字符串 如:"I love FishC" 回车 也就是字符串 = "I love FishC\n"
getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-12 13:49:30 | 显示全部楼层
ba21 发表于 2017-7-12 13:42
你先输入字符串 如:"I love FishC" 回车 也就是字符串 = "I love FishC\n"
getchar有一个int型的返回 ...

谢谢! mo mo hu hu 有点明白,还需再自己体会一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 19:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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