gpt4 book ai didi

C INPUT 开关盒

转载 作者:太空宇宙 更新时间:2023-11-04 00:17:46 25 4
gpt4 key购买 nike

如何在Switch命令中输入String并使用?这是代码,但我得到的开关数量不是整数错误。

#include <stdio.h>

int main(void) {
float usd2 = 0.9117;
float yen2 = 0.0073;
float pound2 = 1.4137;
float eingabe;
char whr[] = "";

printf("Bitte Summe in EURO eingeben: ");
scanf("%f", &eingabe);
printf("Die Währungnummer eingeben USD, YEN, POUND: ");
scanf("%s", &whr);

switch(whr) {
case "usd": printf("%.4f EURO es sind dann %.4f USD.", eingabe, (eingabe/usd2));
break;
case "yen": printf("%.4f EURO es sind dann %.4f YEN.", eingabe, (eingabe/yen2));
break;
case "pound": printf("%.4f EURO es sind dann %.4f POUND.", eingabe, (eingabe/pound2));
break;
default: printf("Falsche eingabe.");
break;
}


return 0;
}

最佳答案

C 无法在 switch 语句的条件或标签常量表达式中使用“字符串”(在您的情况下是字符数组),因为它们无法转换为整数值。 C 要求条件和常量表达式为整型(参见,例如 this online c++ standard draft ):

6.8.4.2 The switch statement

1 The controlling expression of a switch statement shall have integer type.

...

3 The expression of each case label shall be an integer constant expression ...

为了克服这个问题,您可以使用级联 if (strcmp(whr,"USD")==0) else if (strcmp(whr, "YEN")==0)... 或者您可以引入一个代表货币的枚举并将用户输入映射到此类枚举。由于 if-else 级联很简单,我只展示第二种方法。使用枚举的优点是您可以在整个程序中轻松使用它们,而无需在代码的不同位置重复 if-else - 级联:

typedef enum  {
UNDEFINED, USD, YEN, POUND
} CurrencyEnum;

struct currencyLabel {
CurrencyEnum currencyEnum;
const char *currencyString;
} currencyLabels[] = {
{ USD, "USD" },
{ YEN, "YEN" },
{ POUND, "POUND" }
};

CurrencyEnum getCurrencyByLabel(const char* label) {

for (int i=0; i< (sizeof(currencyLabels) / sizeof(struct currencyLabel)); i++) {
if (strcmp(label, currencyLabels[i].currencyString) == 0)
return currencyLabels[i].currencyEnum; // could use strcasecmp or stricmp, if available, too.
}
return UNDEFINED;
}

int main(void) {
float usd2 = 0.9117;
float yen2 = 0.0073;
float pound2 = 1.4137;
float eingabe;
char whr[10] = "";

printf("Bitte Summe in EURO eingeben: ");
scanf("%f", &eingabe);
printf("Die Währungnummer eingeben USD, YEN, POUND: ");
scanf("%s", whr);
CurrencyEnum currency = getCurrencyByLabel(whr);

switch(currency) {
case USD: printf("%.4f EURO es sind dann %.4f USD.", eingabe, (eingabe/usd2));
break;
case YEN: printf("%.4f EURO es sind dann %.4f YEN.", eingabe, (eingabe/yen2));
break;
case POUND: printf("%.4f EURO es sind dann %.4f POUND.", eingabe, (eingabe/pound2));
break;
default: printf("Falsche eingabe.");
break;
}
return 0;
}

顺便说一句:请注意,将 whr 定义为 char whr[] = "" 实际上会保留一个大小为 1 的字符串,并在 scanf 中使用它> 产生溢出(和未定义的行为)。您可以将其定义为 char whr[10] 或类似的东西。

关于C INPUT 开关盒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45577956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com