用scanf()函数的%c格式符输入字符型数据时 要注意什么问题?
一、出现的问题
先看代码:
#include <stdio.h>
int main()
{
int a;
char b;
float c;
printf("Please input an integer:");
scanf("%d", &a);
printf("integer:%d\n", a);
printf("Please input a character:");
scanf("%c", &b);
printf("character:%c\n", b);
printf("Please input a float number:");
scanf("%f", &c);
printf("float:%f\n", c);
}
我们依次输入12 ,a, 3.5,希望的到的结果是这样的:
但实际得到的结果是这样的:
这是因为在输入12之后我们又键入了一个回车,用%c格式读入字符时, 空格和回车等空白字符 都会被当作有效字符读入。
二、解决方法
- 一、用getchar()函数吃掉多余的空格
#include <stdio.h>
int main()
{
int a;
char b;
float c;
printf("Please input an integer:");
scanf("%d", &a);
printf("integer:%d\n", a);
printf("Please input a character:");
getchar();
scanf("%c", &b);
printf("character:%c\n", b);
printf("Please input a float number:");
scanf("%f", &c);
printf("float:%f\n", c);
}
将缓冲区中的回车符读入,避免 被后面的变量作为有效字符读入。程序修正后的结果:
- 二、在%c前加一个空格
它的作用是:忽略缓冲区的空白字符(即空格,回车之类)。
当然,这个神奇的空格作用范围仅在你要输入的字符前后。举例:
#include <stdio.h>
main()
{
int data1, data2, sum;
char op;
printf("Please enter the expression data1 + data2\n");
scanf("%d %c%d",&data1, &op, &data2); //%c前面加了空格
printf("%d%c%d = %d\n",data1, op, data2, data1+data2);
}
三种输入方式得出的结果一样,这个神奇的空格会自动忽略缓冲区中的空白字符,以保证你的输入正确。当然在最后的结尾处“3”后面的回车是不会忽略的,因为输入了中间的“+”字符后,又输入了一个整数“3”,神奇的空格已经发挥不了作用了。