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 Mn");
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: %fn", a);
printf("Geben sie Zahl 2 an:");
scanf(" %f", &b);
printf("Zahl 2: %fn", b);
c = a + b;
printf("Das Ergebnis ist: %fn", c);
}
if (Input == 'S')
{
printf("Geben sie Zahl 1 an:");
scanf(" %f", &a);
printf("Zahl 1: %fn", a);
printf("Geben sie Zahl 2 an:");
scanf(" %f", &b);
printf("Zahl 2: %fn", b);
c = a - b;
printf("Das Ergebnis ist: %fn", c);
}
if (Input == 'M')
{
printf("Geben sie Zahl 1 an:");
scanf(" %f", &a);
printf("Zahl 1: %fn", a);
printf("Geben sie Zahl 2 an:");
scanf(" %f", &b);
printf("Zahl 2: %fn", b);
c = a / b;
printf("Das Ergebnis ist: %fn", c);
}
if (Input == 'D')
{
printf("Geben sie Zahl 1 an:");
scanf(" %f", &a);
printf("Zahl 1: %fn", a);
printf("Geben sie Zahl 2 an:");
scanf(" %f", &b);
printf("Zahl 2: %fn", 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: %fn", a);
printf("Geben sie Zahl 2 an:");
scanf(" %f", &b);
printf("Zahl 2: %fn", 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"上的条件,并且仅当"D"或匹配之前的任何内容都没有时使用最后一个else

你需要学习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 Mn");
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: %fn", a);
printf("Geben sie Zahl 2 an:");
scanf(" %f", &b);
printf("Zahl 2: %fn", b);
printf("Das Ergebnis ist: %fn", c);
}
} while (Input != 'K');
printf("Programm Stop");
return 0;
}

最新更新