有关do while的循环
#include<stdio.h>int main()
{
char c;
c = getchar();
do{
putchar(c++);
}while((c=getchar())!='#');
}
输入 abcde##<回车>
输出的是 abcde
不是先执行循环体再判断while,为什么不输出 abcde# 呢
putchar(c++); // #
}while((c=getchar())!='#'); // #结束
有问题吗? 本帖最后由 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") ;
}
传说中的电传打字机。 ba21 发表于 2020-3-7 22:19
putchar(c++); // #
}while((c=getchar())!='#'); // #结束
有问题吗?
不是,while那里结束之前先执行循环体的话
不就输出一个#了吗 jackz007 发表于 2020-3-7 22:20
也许,这个代码才是楼主真正想要的效果!
传说中的电传打字机。
不是啊大佬、、我只是不明白do while先执行循环体的话为什么不输出一个# chengk666 发表于 2020-3-7 22:26
不是,while那里结束之前先执行循环体的话
不就输出一个#了吗
123456789
数个数你都不会?
putchar(c++); // 1.获得#
}while((c=getchar())!='#'); // 2 判断是否为# 如果==#结束
ba21 发表于 2020-3-7 22:40
123456789
数个数你都不会?
putchar(c++); // 1.获得#
那putchar准备输出#,然后判断while,条件不成立,putchar也不输出了? #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 23:00 编辑
do {
putchar(c++) ;
}while((c=getchar())!='#') ;
只有键盘输入的当前字符不是 '#' 时,才有机会进循环体内显示这个字符,否则,就会直接结束循环,那么,当前字符 '#' 及其后续字符当然也没有机会被显示了,难道这还有什么问题吗? Ranbo_ 发表于 2020-3-7 22:54
标准输入流是abcde##回车
1.从标准输入流里读到一个字符赋给c(c = a)
2.将c输出。(不知道你的c++是为了 ...
感谢,原来是在缓冲区里啊 jackz007 发表于 2020-3-7 22:56
只有键盘输入的当前字符不是 '#' 时,才有机会进循环体内显示这个字符,否则,就会直接结束循环 ...
额,我应该是不清楚putchar具体怎么实现输出的 本帖最后由 jackz007 于 2020-3-7 23:45 编辑
chengk666 发表于 2020-3-7 23:13
额,我应该是不清楚putchar具体怎么实现输出的
怎么实现的,知道了putchar() 的实现,是不是还得知道 CPU 里的电子是怎么流动的,有必要吗???
作为普通用户,只需要知道 putchar() 会在屏幕的当前位置显示一个字符就足够了!
页:
[1]