#include
#include
int main()
{
int data1,data2,sum;
char op;
printf("please enter the expression data1+data2\n");
scanf(" %d %c %d",&data1,&op,&data2);
printf("%d%c%d=%d",data1,op,data2,data1+data2);
return 0;
}
%2c就是纳入2个字符
空格%c,空格就是忽视空格
证明空格与转义字符(包括回车)都被当作有效字符读入
int main()
{
int a;
char b;
float c;
printf("enter:int:");
scanf("%d",&a);
printf("%d\n",a);
printf("enter:char:");
scanf("%c",&b);
printf("%c\n",b);
printf("enter:float");
scanf("%f",&c);
printf("%f\n",c);
return 0;
}
回车字符被scanf(%c)读走,并赋值给b
回车字符被认定为有效字符读入,并赋值给了b.
int main()
{
int a;
char b;
float c;
printf("enter:int:");
scanf("%d",&a);
printf("%d\n",a);
getchar();
printf("enter:char:");
scanf("%c",&b);
printf("%c\n",b);
printf("enter:float");
scanf("%f",&c);
printf("%f\n",c);
return 0;
}
缓冲区应该是:3回车aa回车
输出
3赋值给了a
回车字符被getchar读走,并回显到屏幕上(具体位置在哪里)
aa被%c读走一个
所以缓冲区就剩了一个a
这给直接被%f读走,打印出0.000
求教,谁懂?
将存入缓冲区中的回车符读入,避免在后面作为有效字符读入
int main()
{
int a;
char b;
float c;
printf("enter:int:");
scanf("%d",&a);
printf("%d\n",a);
printf("enter:char:");
scanf(" %c",&b);
//在*%c前面加一个空格,将存于缓冲区中的回车符读入
printf("%c\n",b);
printf("enter:float");
scanf("%f",&c);
printf("%f\n",c);
return 0;
}
scanf()函数的%c格式符存在问题的解决方法
1.用gerchar()将数据输入时存入缓冲区中的回车符读入,以避免被后面的字符型变量作为有效字符读入。
2.在%c前面加一个空格,忽略前面数据输入时缓冲区中的回车符,避免后面的字符型变量作为有效字符读入
方法2的可读性好