c - 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()
(已注释),我可以毫无问题地执行程序(只要输入输入时没有换行)。这里发生了什么?