c语言第二次judge调用为啥被跳过了一样

#include<stdio.h>

int error = 0;

void judge(char flag, double *x, double *y, double *result)
{
    if(flag=='+')
            *result = *x+ *y;    
    else if(flag=='-')
            *result = 1;
    else if(flag=='*')
            *result = (*x) * (*y);
    else if(flag=='/')
        {
            if(*y==0)
            {
                printf("输入格式有误\n"); 
                error = 1;
            }
            else
                *result = *x / *y;    
        }        
}

int main()
{
    double x=0.0, y=0.0, result=0, result1=0;
    int n = 1, sun=0;
    char flag;
    double z = 0.0;
    double result2 = 0;
    char flag1;
    
    while(1)
    {
        int ling = 0;
        error = 0;
        printf("请输入算式\n");
        scanf("%lf %c %lf", &x, &flag, &y);
        judge(flag, &x, &y, &result);
            
        if(error==1)
        {
            ling=0;
        
        }
        else
        {
            printf("%.3lf", result);
            ling=1;
        }
        result1 = result;
        
        
        scanf("%c%lf", &flag, &z);
        judge(flag, &result1, &z, &result2);    
        if(error==1)
        {
            ling=0;
        
        }
        else
        {
            printf("%.3lf%c", result2, flag);
            ling=1;
        }            
    }
    return 0;
}
            
     
 

应该是第二个scanf()获取第二个式子的运算符号,使用%c的前没加空格,导致获取了输入中的其他符号,而让获取的式子错误了;

可以在第二个scanf()里的%c的前加一个空格,然后再调整下获取输入的逻辑应该就可以了。

修改如下:

参考链接:


scanf(计算机语言函数)_百度百科 scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include &lt;stdio.h&gt;。(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。 https://baike.baidu.com/item/scanf/10773316



#include<stdio.h>

int error = 0;

void judge(char flag, double *x, double *y, double *result)
{
    if(flag=='+')
            *result = *x+ *y;    
    else if(flag=='-')
            *result = *x-*y;
    else if(flag=='*')
            *result = (*x) * (*y);
    else if(flag=='/')
        {
            if(*y==0)
            {
                printf("输入格式有误\n"); 
                error=1;
                return ;
            }
            else{
                *result = *x / *y;    
            }
                
        }  
        error=0;     
}

int main()
{
    double x=0.0, y=0.0, result=0, result1=0;
    int n = 1, sun=0;
    char flag;
    double z = 0.0;
    double result2 = 0;
    char flag1;
    
    while(1)
    {
        int ling = 0;
        error = 0;
        printf("请输入算式\n");
        scanf("%lf %c %lf", &x, &flag, &y);
       // printf("x=%lf, flag=%c ,y=%lf\n",x,flag,y);
        judge(flag, &x, &y, &result);
            
           // https://baike.baidu.com/item/%E8%A2%AB%E9%99%A4%E6%95%B0 
        while(error==1) // 如果输入的算式是除法运算式子,并且 除数为0 ,则重新获取式子 
        {
            printf("请输入算式\n");
            scanf("%lf %c %lf", &x, &flag, &y);
           // printf("x=%lf, flag=%c ,y=%lf\n",x,flag,y);
            judge(flag, &x, &y, &result);
        
        }
        
        if(error!=1)  // 如果式子正确,则输出对应的结果 
        {
            printf("%.3lf", result);
            ling=1;
        }
        result1 = result;
        
        
        scanf(" %c %lf", &flag, &z);  // 获取第二个式子的 运算符号和 第三个值 
      //  printf("flag=%c,z=%lf\n",flag,z);
        judge(flag, &result1, &z, &result2);    
        while(error==1)  // 同上,如果是除法运算,并且 除数为0,则重新获取第二个式子的运算符号和第三个值 
        {
            printf("请输入算式\n");
            // https://baike.baidu.com/item/scanf/10773316 
            scanf(" %c %lf", &flag, &z);
           // printf("flag=%c,z=%lf\n",flag,z);
            judge(flag, &result1, &z, &result2);    
        
        }
        
           if(error!=1)  // 如果式子正确,则打印第二个式子的结果 
        {
            printf("=%.3lf\n", result2, flag);
            ling=1;
        }            
    }
    return 0;
}

img