根据条件声明和更改C字符串中的数据?

根据条件声明和更改C字符串中的数据?,c,C,有三种食品订单:鱼、薯条、饮料。系统会提示用户要订购什么,问题模板如下: Do you order ___ (Y/N)? - ___ choice (food options): What size (L-Large, M-Medium, S-Small): How many orders do you want? (>=0): You ordered ___ SIZE: order number: subtital: $x.xx 因此,根据用户的

有三种食品订单:鱼、薯条、饮料。系统会提示用户要订购什么,问题模板如下:

Do you order ___ (Y/N)? -  
___ choice (food options):   
What size (L-Large, M-Medium, S-Small):   
How many orders do you want? (>=0):  
You ordered ___  SIZE:     order number:    subtital: $x.xx  
因此,根据用户的输入,将是鱼、薯条或饮料。程序首先询问他们是否想要先吃鱼,所以我这样做的方式(它是有效的)如下:

main() {
    question("fish");
}
问题功能(我有什么问题):

在我的问题函数中起作用的是开关选择f、c或d的部分,这很好。我不明白的是,当它选择f时,它应该将foodchoice设置为“fish”,并根据食物将foodOptions设置为其正确的选项,这样,我就可以节省时间和精力,并使用变量来填充,而不只是在开关中按每种情况手动填充巨大的printf,但是我无法让它工作:P然后我必须使用指针,稍后我将处理这些指针来处理用户输入


谢谢

缺少内存分配,并且没有正确复制选项字符串:

char foodChoice[1024]; // or dynamically:
char *foodOptions = malloc(1024);

switch (choice[0]) {
case 'f':
    strcpy(foodChoice, "food");
    strcpy(foodOptions, "(K - Haddock, T - Halibut)");
    break; /* ... */

如果您正计划以这种方式调用question(字符串文字作为参数),则不必分配任何内存,只需使用char*作为foodChoice。作业和只有作业会以这种方式工作。如果需要连接字符串,请使用strncpy或memcpy。为此,您需要静态或动态分配缓冲区

还要注意,你不能这样做

char array[];
array = "string";
,因为编译器必须在编译时知道数组的确切大小。你唯一能做的就是

char *string;
string = "string";

,因为后者实际上是

char array[7] = "string";
char array[7] = { 's', 't', 'r', 'i', 'n', 'g', '\0'};
,事实上

char array[7] = "string";
char array[7] = { 's', 't', 'r', 'i', 'n', 'g', '\0'};

有关数组与指针的更多信息,请查看。

,不要忘记将%s用于“字符串”,仅将%c用于字符。