if-else 在 do-while 中

if-else in do-while in c

我尝试编写一个小型计算器。用户必须决定是否要对两个数字进行加、减、乘或除。 这可能是一个菜鸟错误,因为这是我学习编程的第二天,但我们开始吧 这是代码:

#include <stdio.h>
#include <stdbool.h>



int main()
{
    float a;
    float b;
    float c;
    char Input;


    printf("Herzlich Wilkommen, ");


    do
    {
        printf(" \nWas moechten sie tun?\n Fuer Addition A \n Fuer Subtraktion S \n Fuer Division D \n Fuer Multiplikation M\n");
        printf(" Zum Beenden 0 druecken!\n");
        printf(" Eingabe:");
        scanf(" %c", &Input);

        if (Input == 'A')
        {
            printf("Geben sie Zahl 1 an:");
            scanf(" %f", &a);
            printf("Zahl 1: %f\n", a);
            printf("Geben sie Zahl 2 an:");
            scanf(" %f", &b);
            printf("Zahl 2: %f\n", b);
            c = a + b;
            printf("Das Ergebnis ist: %f\n", c);
        }
        if (Input == 'S')
        {
            printf("Geben sie Zahl 1 an:");
            scanf(" %f", &a);
            printf("Zahl 1: %f\n", a);
            printf("Geben sie Zahl 2 an:");
            scanf(" %f", &b);
            printf("Zahl 2: %f\n", b);
            c = a - b;
            printf("Das Ergebnis ist: %f\n", c);
        }
        if (Input == 'M')
        {
            printf("Geben sie Zahl 1 an:");
            scanf(" %f", &a);
            printf("Zahl 1: %f\n", a);
            printf("Geben sie Zahl 2 an:");
            scanf(" %f", &b);
            printf("Zahl 2: %f\n", b);
            c = a / b;
            printf("Das Ergebnis ist: %f\n", c);
        }
        if (Input == 'D')
        {
            printf("Geben sie Zahl 1 an:");
            scanf(" %f", &a);
            printf("Zahl 1: %f\n", a);
            printf("Geben sie Zahl 2 an:");
            scanf(" %f", &b);
            printf("Zahl 2: %f\n", b);
            c = a * b;
            printf("Das Ergebnis ist: %f", c);
        }
        else
            printf("%c ist ein falscher Input!", Input);
        
    } while (Input != 'K');

    printf("Programm Stop");
    return 0;
}

问题是在成功完成计算后还会打印 else 函数。 这是输出:

Herzlich Wilkommen,
Was moechten sie tun?
 Fuer Addition A
 Fuer Subtraktion S
 Fuer Division D
 Fuer Multiplikation M
 Zum Beenden K druecken!
 Eingabe:A
Geben sie Zahl 1 an:12
Zahl 1: 12.000000
Geben sie Zahl 2 an:12
Zahl 2: 12.000000
Das Ergebnis ist: 24.000000

A ist ein falscher Input!

Was moechten sie tun?
 Fuer Addition A
 Fuer Subtraktion S
 Fuer Division D
 Fuer Multiplikation M
 Zum Beenden K druecken!
 Eingabe:

我指的是“A ist ein falscher Input”这一行。 为什么要把那条线放出来?程序似乎认为 A 仍在输入中,这对我来说是合乎逻辑的。但是为什么它不推出以 'A' 作为条件的函数呢? 我希望你能理解我的问题是什么,因为英语不是我的母语! 谢谢

您有 3 个单独的 if 语句:

    if (Input == 'A')
    {
       ...
    }
    if (Input == 'S')
    {
       ...
    }
    if (Input == 'M')
    {
       ...
    }

后跟 if/else:

    if (Input == 'D')
    {
       ...
    }
    else
        printf("%c ist ein falscher Input!", Input);

如果 Input 不是“D”,那么这里的 else 部分将 运行。

您想将单独的 if 语句链接到 if/else:

    if (Input == 'A')
    {
       ...
    }
    else if (Input == 'S')
    {
       ...
    }
    else if (Input == 'M')
    {
       ...
    }
    else if (Input == 'D')
    {
       ...
    }
    else
        printf("%c ist ein falscher Input!", Input);

这样只有一个条件会运行。

        if (Input == 'D')  //Only this 'if' match next 'else'.
        {
            printf("Geben sie Zahl 1 an:");
            scanf(" %f", &a);
            printf("Zahl 1: %f\n", a);
            printf("Geben sie Zahl 2 an:");
            scanf(" %f", &b);
            printf("Zahl 2: %f\n", b);
            c = a * b;
            printf("Das Ergebnis ist: %f", c);
        }
        else
            printf("%c ist ein falscher Input!", Input);

将这些逻辑替换为switch/case

使用此代码

if (Input == 'D')
{
    /* */
}
else
    printf("%c ist ein falscher Input!", Input);

您将收到任何不是 'D' 的消息。
正如已经提到的评论,你需要有一个链

if(){}
else if(){}
else if(){}
else
{}

这样 'D' 上的条件仅在所有其他条件都已失败时才被检查,最后一个 else 仅在 'D' 和之前的任何内容都不匹配时才被使用。

你需要学习switch ... case更适合这个。

int main(void)
{
    float a;
    float b;
    float c;
    char Input;
    int valid = 0;

    printf("Herzlich Wilkommen, ");

    do
    {
        printf(" \nWas moechten sie tun?\n Fuer Addition A \n Fuer Subtraktion S \n Fuer Division D \n Fuer Multiplikation M\n");
        printf(" Zum Beenden 0 druecken!\n");
        printf(" Eingabe:");
        scanf(" %c", &Input);

        valid = 1;

        switch(Input)
        {
            case 'A':
                c = a + b;
                break;
            case 'S':
                c = a - b;
                break;
            case 'M':
                c = a / b;
                break;
            case 'D':
                c = a * b;
                break;
            default: 
                valid = 0;
                printf("%c ist ein falscher Input!", Input);
                break;
        }

        if(valid)
        {
            printf("Geben sie Zahl 1 an:");
            scanf(" %f", &a);
            printf("Zahl 1: %f\n", a);
            printf("Geben sie Zahl 2 an:");
            scanf(" %f", &b);
            printf("Zahl 2: %f\n", b);
            printf("Das Ergebnis ist: %f\n", c);

        }
   } while (Input != 'K');

    printf("Programm Stop");
    return 0;
}