根据条件声明和更改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用于字符。