鱼C论坛

 找回密码
 立即注册
查看: 1488|回复: 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
#include<stdio.h>
int main()
{
        char c;
        c = getchar();//1
        do{
                putchar(c++);//2
        }while((c=getchar())!='#');//3
}
标准输入流是abcde##回车
1.从标准输入流里读到一个字符赋给c(c = a)
2.将c输出。(不知道你的c++是为了干啥,但是在这个程序里没啥用)
3.1.循环从标准输入流里读入不为'#'的字符并输出(bcde)
3.2.读到#,结束循环。缓冲区里还有#和回车两个字符。输出出来的就是abcde。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

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

int main()
{
        char c                         ;
        while((c = getch())!= '#') {
                if(c == '\r') c = '\n' ;
                putch(c)               ;
        }  
        printf("\n")                   ;
}
        传说中的电传打字机。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不是,while那里结束之前先执行循环体的话
不就输出一个#了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

        传说中的电传打字机。

不是啊大佬、、我只是不明白do while先执行循环体的话为什么不输出一个#
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

123456789
数个数你都不会?
putchar(c++); // 1.获得#
        }while((c=getchar())!='#'); // 2 判断是否为# 如果==#结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

那putchar准备输出#,然后判断while,条件不成立,putchar也不输出了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2020-3-7 22:56:52 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-7 23:00 编辑
        do {
                putchar(c++) ;
        }while((c=getchar())!='#') ;
        只有键盘输入的当前字符不是 '#' 时,才有机会进循环体内显示这个字符,否则,就会直接结束循环,那么,当前字符 '#' 及其后续字符当然也没有机会被显示了,难道这还有什么问题吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢,原来是在缓冲区里啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

额,我应该是不清楚putchar具体怎么实现输出的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 23:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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