可以成功创建一个函数,该函数输入可以选择的5个项目的二维数组,打印这些项目,然后询问您想要的项目,然后将您选择的项目放入一个收据中。是我在main中全局定义的另一个2d数组。这是一个MCVE:
char receipt[20][200];
static int arrnum=0;
void choose(char arr[5][200]){
int i;
for(i=0;i<=4;i++){
printf("%s\n",arr[i]);
}
printf("Enter in your choice");
int choice;
scanf("%d",&choice);
strcpy(receipt[arrnum],arr[choice-1]);
printf("receipt[0]:%s\n",receipt[0]);
arrnum++;
}
void printreceipt(){
int qnum=0;
printf("Receipt:\n");
int itmnum=0;
while(qnum<arrnum){
printf("Item %d:\n%s",itmnum,receipt[qnum]);
itmnum++;
qnum++;
}
}
int main(){
char strings[5][200]= {"string1","string2","string3","string4","string5"};
choose(strings);
printreceipt();
return 0;
}
在我较大的程序中,它处于循环状态,这样我可以多次执行此过程,并在收据中选择不同的选择。在main内部,我可以调用receive [x],它可以正常工作。我使用静态全局变量arrnum来跟踪收据中有多少项目以及放置下一个项目的位置。每次调用select()时,Arrnum都会递增。但是在我创建的出于某种原因打印收据的函数中,arrnum重置为0。
最佳答案
我把你的程序整理好了。该版本无需将变量设为静态即可使用。它基本上将索引号从主行传递到选择功能,然后传递到打印收据功能。
我还添加了一些基本的错误检查,以确保该数字在范围内。
您将需要使用代码来使其满足您的需求。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char receipt[20][200];
int choose(char arr[5][200],int arrnum){
int i;
for(i=0;i<=4;i++){
printf("%s\n",arr[i]);
}
int choice=0;
while (choice < 1 || choice > 4){
printf("Enter in your choice ");
scanf("%d",&choice);
}
strcpy(receipt[arrnum],arr[choice-1]);
printf("receipt[%d]:%s\n",arrnum,receipt[arrnum]);
arrnum++;
return arrnum;
}
void printreceipt(int arrnum){
printf("Receipt:\n");
int itmnum=0;
while(itmnum<arrnum){
printf("Item %d: %s\n",itmnum+1,receipt[itmnum]);
itmnum++;
}
}
int main(){
int items=0;
char strings[5][200]= {"string1","string2","string3","string4","string5"};
items=choose(strings,items);
// items=choose(strings,items); <--add more of these lines if you want more items on the receipt.
printreceipt(items);
return 0;
}