scanf("%c")格式符输入字符型数据时存在的问题

#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;

}

scanf(
%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(回车字符被scanf(%c)读走,并赋值给b
回车字符被认定为有效字符读入,并赋值给了b.
scanf(

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;
}

scanf(缓冲区应该是: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的可读性好

你可能感兴趣的:(scanf("%c")格式符输入字符型数据时存在的问题)