C 中的简单计算器 跳过scanf()的输入流



我尝试编写我的第一个计算器,并在网上找到了一些示例,然后我对其进行了更改,以使它们在流程方面更容易。但是,当我从这里更改流程时:

#include <stdio.h>
main()
{
    char operator;
    float num1,num2;
    printf("Enter an operator (+, -, *, /): ");
    scanf("%c" ,&operator);
    printf("Enter first operand: ");
    scanf("%f" ,&num1);
    printf("Enter second operand: ");
    scanf("%f" ,&num2); 
    switch(operator)
    {
        case '+':
            printf("num1+num2=%.2fn" ,num1+num2);
            break;
        case '-':
            printf("num1-num2=%.2fn" ,num1-num2);
            break;
        case '*':
            printf("num1*num2=%.2fn" ,num1*num2);
            break;
        case '/':
            printf("num1/num2=%.2fn" ,num1/num2);
            break;
        default: //of operator is other than +, -, *, /, erros message shown
        printf("Error! Invalid operator, this is basic math only.n");
    }       
    return 0;
}

对此:

#include <stdio.h>
main()
{
    char operator;
    float num1,num2;

    printf("Enter first operand: ");
    scanf("%f" ,&num1);
    printf("Enter an operator (+, -, *, /): ");
    scanf("%c" ,&operator);
    printf("Enter second operand: ");
    scanf("%f" ,&num2); 
    switch(operator)
    {
        case '+':
            printf("num1+num2=%.2fn" ,num1+num2);
            break;
        case '-':
            printf("num1-num2=%.2fn" ,num1-num2);
            break;
        case '*':
            printf("num1*num2=%.2fn" ,num1*num2);
            break;
        case '/':
            printf("num1/num2=%.2fn" ,num1/num2);
            break;
        default: //of operator is other than +, -, *, /, erros message shown
        printf("Error! Invalid operator, this is basic math only.n");
    }       
    return 0;
}

基本上将流程从:输入运算符,然后输入第一个数字,然后输入第二个数字。收件人:输入第一个数字,然后输入运算符,然后输入第二个数字。我的问题是当我这样做时,我看到 Enter 运算符,但程序跳过输入运算符的选项并要求:输入第一个数字,然后输入第二个数字。响应是默认开关。

这是因为当你输入第一个scanf的输入时,换行符会留在缓冲区中,所以下面的scanf接收它作为输入,只需在每次scanf()后放置一个getchar()即可解决它

输入缓冲区中左换行符。

当使用scanf("%f",...时,%f使用前导空格,但在数字之后没有尾随空格 - 通常是n

使用 scanf("%c",... 时,%c 消耗前导空格,也不消耗char后的尾随空格。

要消耗剩余的空格(例如前scanf()n),简单在%c前面加上空格。

// scanf("%c" ,&operator);
scanf(" %c" ,&operator);  // add space.
您在

第一个运算符中读取scanf后输入的换行符正在被第二个scanf调用占用。有关更详细的解释,请参阅此问题。

简而言之,编写这样的函数,并在每次scanf调用后调用它。

void clear_stdin(void)
{
    while(getchar() != 'n');
}

相关内容

  • 没有找到相关文章

最新更新