我尝试编写一个小计算器。用户必须决定是要加、减、乘还是除两个数字。 这可能是一个菜鸟错误,因为这是我学习编程的第二天,但我们来了 这是代码:
#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;
}