首页 > 解决方案 > scanf("%d/%d%c%d/%d", &num1, &denom1, &sign, &num2, &denom2); 继续在控制台扫描用户输入

问题描述

scanf("%d/%d%c%d/%d", &num1, &denom1, &sign, &num2, &denom2);无论我输入多少整数或字符,都会继续扫描控制台上的用户输入。该程序不会进一步进行。这里发生了什么?

顺便说一下我的代码如下

#include<stdio.h>
//------------------------START OF MAIN()--------------------------------------
int main(void)
{
    printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
    
    int num1, denom1, num2, denom2, result_num, result_denom,flag=1;
    char sign;

    printf("Enter fraction1 operator fraction2(operators + - * /): ");
    scanf("%d/%d%c%d/%d", &num1, &denom1, &sign, &num2, &denom2);  //doesn't work. Won't stop taking inputs
         //three scanfs --for fraction1, operator, fraction2--also takes unlimited inputs.
         //A scanf to read fraction1, getchar to read operator and another scanf to read fraction2 works fine.
    //scanf("%d/%d", &num1, &denom1);
    //sign=getchar();
    //scanf("%d/%d",&num2, &denom2);
    
    switch(sign)
    {
        case '+':
            result_num = num1 * denom2 + num2 * denom1;
            result_denom = denom1 * denom2;
            break;
        case '-':
            result_num = num1 * denom2 - num2 * denom1;
            result_denom = denom1 * denom2;
            break;
        case '*':
            result_num = num1 * num2;
            result_denom = denom1 * denom2;
            break;
        case '/':
            result_num = num1 * denom2;
            result_denom = denom1 * num2;
            break;
        default:
            flag=0;
            printf("Invalid Operator.");
    }
    if(flag)
        printf("The result is %d/%d", result_num, result_denom);
    
    printf("\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
    return 0;
}
//-------------------------END OF MAIN()---------------------------------------

我尝试输入的输入是31/8+7/4. 我按下回车键,但程序不会继续进行。如果我使用以下三个语句,即 , scanf(),getchar()代替printf()(已注释),我可以毫无问题地执行程序(只要输入输入时没有换行)。这里发生了什么?

标签: cscanf

解决方案


推荐阅读