chengk666 发表于 2020-3-7 22:10:19

有关do while的循环

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

输入 abcde##<回车>
输出的是 abcde
不是先执行循环体再判断while,为什么不输出 abcde# 呢

ba21 发表于 2020-3-7 22:19:22

    putchar(c++); // #
      }while((c=getchar())!='#'); // #结束
有问题吗?

jackz007 发表于 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")                   ;
}
      传说中的电传打字机。

chengk666 发表于 2020-3-7 22:26:19

ba21 发表于 2020-3-7 22:19
putchar(c++); // #
      }while((c=getchar())!='#'); // #结束
有问题吗?

不是,while那里结束之前先执行循环体的话
不就输出一个#了吗

chengk666 发表于 2020-3-7 22:31:01

jackz007 发表于 2020-3-7 22:20
也许,这个代码才是楼主真正想要的效果!

      传说中的电传打字机。

不是啊大佬、、我只是不明白do while先执行循环体的话为什么不输出一个#

ba21 发表于 2020-3-7 22:40:33

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

123456789
数个数你都不会?
putchar(c++); // 1.获得#
      }while((c=getchar())!='#'); // 2 判断是否为# 如果==#结束

chengk666 发表于 2020-3-7 22:53:23

ba21 发表于 2020-3-7 22:40
123456789
数个数你都不会?
putchar(c++); // 1.获得#


那putchar准备输出#,然后判断while,条件不成立,putchar也不输出了?

Ranbo_ 发表于 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。

jackz007 发表于 2020-3-7 22:56:52

本帖最后由 jackz007 于 2020-3-7 23:00 编辑

      do {
                putchar(c++) ;
      }while((c=getchar())!='#') ;
      只有键盘输入的当前字符不是 '#' 时,才有机会进循环体内显示这个字符,否则,就会直接结束循环,那么,当前字符 '#' 及其后续字符当然也没有机会被显示了,难道这还有什么问题吗?

chengk666 发表于 2020-3-7 23:09:34

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

感谢,原来是在缓冲区里啊

chengk666 发表于 2020-3-7 23:13:06

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

额,我应该是不清楚putchar具体怎么实现输出的

jackz007 发表于 2020-3-7 23:42:23

本帖最后由 jackz007 于 2020-3-7 23:45 编辑

chengk666 发表于 2020-3-7 23:13
额,我应该是不清楚putchar具体怎么实现输出的

         怎么实现的,知道了putchar() 的实现,是不是还得知道 CPU 里的电子是怎么流动的,有必要吗???
         作为普通用户,只需要知道 putchar() 会在屏幕的当前位置显示一个字符就足够了!
页: [1]
查看完整版本: 有关do while的循环