回复 9楼 xiyao0206
昨天是我错了3楼正解。然后还有一个问题scanf(" %c",&x);就是在%c之前加一个空格,这样也可以。用 getchar();可以吸收enter带入的字符,为什么用空格也可以,这个理解不了啊。
使用格式化scanf函数输入数据时,必须注意以下几个问题,否则会发生意想不到的状况。
(1)、输入地址列表问题;
scanf函数中的地址表应当是变量的地址,而不是变量名。
(2)、用%c输入字符的问题;
在用%c输入字符时,空格符、转义字符都会作为有效输入。
(3)、标准输入流使用多个scanf输入数据时,会发生数据残留问题;
解决此问题的办法由两种:
一、在第二个scanf的格式控制字符串前加一个空格,以抵消上一行输入的回车。
二、使用函数fflush(stdin)来消除输入缓冲区的内容。
这样无论上一行输入什么内容都对下一个scanf语句没有影响。
针对楼主遇到的问题有两种解决方案(当然3楼的做法也行),分别如下:
第一种:
#include<stdio.h>
void main()
{
char x = 'q';
while (x != 'n' ) {
printf("请输入x的值\n");
scanf(" %c", &x); //在scanf的格式控制字符串前加一个
//空格,以抵消上一行输入的回车.
printf ( "X的值是:%c\n", x );
}
}
第二种:
#include<stdio.h>
void main()
{
char x = 'q';
while (x != 'n' ) {
printf("请输入x的值\n");
scanf("%c", &x);
fflush(stdin); //使用函数fflush(stdin)来消除输入缓冲区的内容
printf ( "X的值是:%c\n", x );
}
}