一个C问题 请高手答疑

来源:百度知道 编辑:UC知道 时间:2024/06/03 17:50:32
#include<stdio.h>
void main()
char ch;
do{ printf("continue?");
scanf("%c",&ch);
if(ch=='N')ch='n';
}while(ch!='n');
}
结果 我输入字符继续的时候总是会有两个输出
continue?continue?
~~然后我把
scanf("%c",&ch);改成 scanf("%s",&ch);输入字符串就好了·~
我想请假大虾。这是为什么吖~~~
请你试试吧~~。你有没看懂我想说的是什么 你有没有先去试试再来说~。。。
continue?continue? 是两个~~中间没空隙的。。。~~
那还要回车键输入干嘛.....那%C 不是没用了么~~

你是do while循环么
它先执行do里的内容 打印了一个continue
然后输入的内容不是N
执行while(ch!='n')条件成立
又执行do里内容了 所以有打印了一个continue

%s 字符串
%c 单个字符

scanf("%c",&ch)函数会将你在屏幕中输入的字符逐个读入,包括空白符,像回车之类的,所以在输入一个字符并按下回车之后,实际上是将两个字符装入的缓冲区,一个字母,一个回车符,第二次循环的时候程序会直接读取回车,因此会有两个continue?
我在vc下试了试,若输入bbb在按下回车,会是4个continue?,验证了上面的说法,至于改为%s,我想是因为scanf一次将所有字符全部读入了吧,下次再读的时候缓冲区已经空了,
不知道这么理解对不对

回车表示向系统提交数据,同时也将回车符写入了缓冲区,下次scanf读字符数据的时候,因为缓冲区中有可读字符数据,因此不用等待输入,而是直接读出

主要是因为你没有理解回车也是一个字符,当你想继续的时候,你可能会按'y'接着又按了回车,结果输进两个字符,都不是n所以会有两个continue,而且之间不会换行,而字符串系统会加一个'\0',所以不会出现那种情况.

#include<stdio.h>
void main(){
char ch;
do{ printf("continue?");
scanf("%c",&ch);
getchar();
if(ch=='N')ch='n';
}while(ch!='n');
}
这样就好了,回车也是一个字符,可以用getchar()吃掉