scanf() 在这里用有点不恰当,scanf()在接受时,是不接受 回车 和 空格 的.
如果你用它在循环时 第二次不会接受 回车 或 空格,这点要注意.
但是getchar()就不是了,只要是你按键盘就会被接受,但是是先存在缓冲区里.
你循环一次就在缓冲区里拿一个.
所以要有清缓冲区的语句fflush(stdin);
scanf() 在这里用有点不恰当,scanf()在接受时,是不接受 回车 和 空格 的.
如果你用它在循环时 第二次不会接受 回车 或 空格,这点要注意.
但是getchar()就不是了,只要是你按键盘就会被接受,但是是先存在缓冲区里.
你循环一次就在缓冲区里拿一个.
所以要有清缓冲区的语句fflush(stdin);
原因是你那个scanf("%c",&i)必须在输入后,还得按回车键,就在程序第二次循环中默认你又输入了回车,显然不等于'y',所以就退出来了.
怎么不懂啊
你能讲详细的吗
我还要说一下
#include<stdio.h>
int main()
{
char i;
do{
printf(" hello the word\n");
fflush(stdin);// 这一定要有这句,清掉 键盘
i=getchar();
}while(i == 'y');
}
//不要有return在主函数 里
///这样写是没有任何意义的因为这样写 只有你每次都要输入'y'才会循环
///像这样yyyyyyyyyyyyyyy回车
怎么不懂啊
你能讲详细的吗
就是你在输入的时候,输入字母后回车,这个回车仍被记录下来当成你第二次输入的字母。
解决的方法用getche来是最简单的了,一输入它就读进去;
10楼的方法让我又学了点新东西,在次说声感谢喽!
真是晕呀 怎么都这样写 呀??????????
要是我写就这样:::
#include<stdio.h>
void main()
{
char i;
do{
printf(" hello the word\n");
fflush(stdin);// 这一定要有这句,清掉 键盘
i=getchar();
}while(i != 'n'||i != 'N');
}
楼上的几位能不能说明白了,因为输入字符被缓冲,只有按回车才发送给计算机,i只接受了字符,回车还在缓冲中呆着呢,你要把缓冲中的回车清除掉就可以了
#include <stdio.h>
#include <conio.h>
int main()
{
char i;
do
{
fflush(stdin);
printf("hello the word\n");
scanf("%c", &i);
}while(i == 'y');
getch();
return 0;
}
[此贴子已经被作者于2006-5-1 17:30:50编辑过]
用%C不行,似乎用%S可以,我以前遇到着个问题过!
不要误导呀,您的话应为
用格式串"%c"不行,似乎用格式串"%s"可以,我以前遇到着个问题过!
以上c和s均必须是小写!!!