鱼C论坛

 找回密码
 立即注册
查看: 1771|回复: 11

[已解决]有关do while的循环

[复制链接]
发表于 2020-3-7 22:10:19 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
int main()
{
        char c;
        c = getchar();
        do{
                putchar(c++);
        }while((c=getchar())!='#');
}

输入 abcde##<回车>
输出的是 abcde
不是先执行循环体再判断while,为什么不输出 abcde# 呢
最佳答案
2020-3-7 22:54:24
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         char c;
  5.         c = getchar();//1
  6.         do{
  7.                 putchar(c++);//2
  8.         }while((c=getchar())!='#');//3
  9. }
复制代码
标准输入流是abcde##回车
1.从标准输入流里读到一个字符赋给c(c = a)
2.将c输出。(不知道你的c++是为了干啥,但是在这个程序里没啥用)
3.1.循环从标准输入流里读入不为'#'的字符并输出(bcde)
3.2.读到#,结束循环。缓冲区里还有#和回车两个字符。输出出来的就是abcde。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-7 22:19:22 | 显示全部楼层
    putchar(c++); // #
        }while((c=getchar())!='#'); // #结束
有问题吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 22:20:36 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-7 22:22 编辑

        也许,这个代码才是楼主真正想要的效果!
  1. #include<stdio.h>
  2. #include<conio.h>

  3. int main()
  4. {
  5.         char c                         ;
  6.         while((c = getch())!= '#') {
  7.                 if(c == '\r') c = '\n' ;
  8.                 putch(c)               ;
  9.         }  
  10.         printf("\n")                   ;
  11. }
复制代码

        传说中的电传打字机。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 22:26:19 | 显示全部楼层
ba21 发表于 2020-3-7 22:19
putchar(c++); // #
        }while((c=getchar())!='#'); // #结束
有问题吗?

不是,while那里结束之前先执行循环体的话
不就输出一个#了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 22:31:01 | 显示全部楼层
jackz007 发表于 2020-3-7 22:20
也许,这个代码才是楼主真正想要的效果!

        传说中的电传打字机。

不是啊大佬、、我只是不明白do while先执行循环体的话为什么不输出一个#
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 22:40:33 | 显示全部楼层
chengk666 发表于 2020-3-7 22:26
不是,while那里结束之前先执行循环体的话
不就输出一个#了吗

123456789
数个数你都不会?
putchar(c++); // 1.获得#
        }while((c=getchar())!='#'); // 2 判断是否为# 如果==#结束
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 22:53:23 | 显示全部楼层
ba21 发表于 2020-3-7 22:40
123456789
数个数你都不会?
putchar(c++); // 1.获得#

那putchar准备输出#,然后判断while,条件不成立,putchar也不输出了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 22:54:24 | 显示全部楼层    本楼为最佳答案   
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         char c;
  5.         c = getchar();//1
  6.         do{
  7.                 putchar(c++);//2
  8.         }while((c=getchar())!='#');//3
  9. }
复制代码
标准输入流是abcde##回车
1.从标准输入流里读到一个字符赋给c(c = a)
2.将c输出。(不知道你的c++是为了干啥,但是在这个程序里没啥用)
3.1.循环从标准输入流里读入不为'#'的字符并输出(bcde)
3.2.读到#,结束循环。缓冲区里还有#和回车两个字符。输出出来的就是abcde。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 22:56:52 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-7 23:00 编辑
  1.         do {
  2.                 putchar(c++) ;
  3.         }while((c=getchar())!='#') ;
复制代码

        只有键盘输入的当前字符不是 '#' 时,才有机会进循环体内显示这个字符,否则,就会直接结束循环,那么,当前字符 '#' 及其后续字符当然也没有机会被显示了,难道这还有什么问题吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 23:09:34 | 显示全部楼层
Ranbo_ 发表于 2020-3-7 22:54
标准输入流是abcde##回车
1.从标准输入流里读到一个字符赋给c(c = a)
2.将c输出。(不知道你的c++是为了 ...

感谢,原来是在缓冲区里啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 23:13:06 | 显示全部楼层
jackz007 发表于 2020-3-7 22:56
只有键盘输入的当前字符不是 '#' 时,才有机会进循环体内显示这个字符,否则,就会直接结束循环 ...

额,我应该是不清楚putchar具体怎么实现输出的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 23:42:23 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-7 23:45 编辑
chengk666 发表于 2020-3-7 23:13
额,我应该是不清楚putchar具体怎么实现输出的


         怎么实现的,知道了putchar() 的实现,是不是还得知道 CPU 里的电子是怎么流动的,有必要吗???
         作为普通用户,只需要知道 putchar() 会在屏幕的当前位置显示一个字符就足够了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 19:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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