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