-3
Okive按钮设法创建一个函数,输入5个项目的二维数组,您可以从中进行选择,打印项目然后询问您需要的项目,然后把你选择的那个项目放到一个reciept中,这是我在main中全局定义的另一个二维数组。这里是一个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;
}
在我的大计划的一个循环,这样我可以经由过程多次,有我拿起收据内不同的选择。主内部我可以调用receipt [x]并且它可以正常工作。我使用一个静态全局变量arrnum来跟踪收据内的物品数量以及放置下一个物品的位置。每次调用choose()时都会增加阿拉姆数量。但在我创建打印收据的功能中,arrnum重置为0.
在这段代码中,你永远不会改变'arrnum',所以它始于'0'并永远保持在'0'。 'printreceipt'中的循环永远不会进入循环体,因为'0 <0'为false –
您的全局变量会重置,因为您正试图自行重置它。尝试访问它并通过代码中的其他赋值语句更改其值,并查看它如何处理所需的任务。也请在主函数中写入东西,这会自动限制程序的全局和本地访问功能.... –
请参阅此-'strcpy(收据[arrnum],arr [choice-1]);''choice''是由用户输入的,但是如果'choice'是'0'呢?然后在'strcpy'中它会是'arr [-1]'。所以,这也会造成一个问题。而且你不验证输入。 – ameyCU