c - 尽管尝试了一切,但无法在 C 中初始化我的数组计数器
问题描述
我一直在做这个创建餐厅菜单的学校作业,我有一个数组来存储一个人订购的所有东西。存储已订购订单的数组是数组 OrderedItems [30]。这个数组基本上是一个计数器。例如,当一个人订购 1 号订单时,OrderItems[1] 会增加 1。
我尝试使用 OrderedItems [30] = {0} 进行初始化,并使用 for 循环单独初始化每个点,但是,这不起作用。请帮我初始化这个数组。我也试过 memset(OrderedItems, 0, 30); 这也不起作用,所以我真的不知道该怎么做。
我还想补充一点,我已经尝试全局声明 OrderedItems 数组,因为我听说所有全局声明都会自动初始化为 0,但这也没有用。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
FILE *fPointer1; //for food//
FILE *fPointer2; //for invoice//
int count;
char name[50];
float price;
void FunctionToPrintFoodItems (void)
{
fPointer1 = fopen ("Food.txt", "a+");
float price;
printf("ITEMCODE\tDESCIPTION\tPRICE (RM)\n");
while (!feof (fPointer1))
{
fscanf(fPointer1, "%d %s %f", &count, name, &price);
printf("%d\t\t%s\t\t%.2f\n", count, name, price);
}
fclose (fPointer1);
}
void clrscr()
{
system("@cls||clear"); //might not need. Will delete it not needed//
}
void debug (void)
{
printf("THIS IS PRINTED");
}
#define clear clrscr ();
#define printfood FunctionToPrintFoodItems();
#define de debug();
int main ()
{
fPointer1 = fopen("Food.txt", "w");
fprintf(fPointer1, "1 BigM 10.40\n");
fprintf(fPointer1, "2 Cheeseburger 9.45");
fclose (fPointer1);
int i;
int MainMenuCode;
int additems = 0;
int orderitems;
int item;
int ordered;
int OrderedItems[30] = {0};
memset(OrderedItems, 0, 30);
for (i=0 ; i < 30 ; i++)
{
OrderedItems[i] = NULL;
printf("%d: %d\n", i, OrderedItems);
}
do
{
printf("WELCOME TO RESTOURANT MAC C - Main Menu\n\n");
printf("[1] Add new food items\n\n");
printf("[2] Take order\n\n");
printf("Enter ITEM CODE (0 to Quit) : ");
scanf("%d", &MainMenuCode);
if (MainMenuCode == 1)
{
clear;
additems = 1;
printf("WELCOME TO RESTAURANT MAC C - Add Menu\n\n");
printfood;
printf("\n");
while ( additems == 1 )
{
printf("Enter description (0 to Main Menu) : ");
scanf("%s", name);
if (strcmp (name, "0") == 0)
{
additems = 0;
clear;
break;
}
printf("Enter price (RM) : ");
scanf("%f", &price);
count ++;
fPointer1 = fopen ("Food.txt", "a");
printf("\n%d\t\t%s\t\t%.2f\n\n", count, name, price);
fprintf(fPointer1, "\n%d %s %.2f", count, name, price);
fclose (fPointer1);
}
}
else if (MainMenuCode == 2)
{
clear;
orderitems = 1;
printf("WELCOME TO RESTAURANT MAC C- Take Order\n\n");
printfood;
while (orderitems == 1)
{
fPointer1 = fopen ("Food.txt", "a+");
printf("Enter ITEM CODE (0 to Quit, 100 for Main Menu) : ");
scanf("%d", &item);
if (item == 100) break;
else if (item == 0) //final approach//
{
fPointer2 = fopen ("Invoice.txt", "a+");
de;
fclose (fPointer2);
return 0;
}
else if (item == 900)
{
for (i=0 ; i < 30 ; i++)
printf("%d: %d\n", i, OrderedItems);
}
else if (item > count || item < 1)
{
printf("\n\nITEM CODE not available. Try again\n\n");
}
else
{
OrderedItems[item]++;
printf("%d %d", item, OrderedItems);
}
fclose (fPointer1);
}
}
else printf("Please enter a valid Menu Code\n");
} while (MainMenuCode != 0);
return 0;
}
解决方案
- printf("%d: %d\n", i, OrderedItems);
+ printf("%d: %d\n", i, OrderedItems[i]);
OrderedItems
是数组第一个元素的地址。
OrderedItems[0]
是数组的第一个元素的值。
OrderedItems[i]
是数组的第 i 个元素的值。
推荐阅读
- arrays - 为什么 3[0] 和 3[1] 在 Ruby 中的结果为 1?
- memory-management - docker-desktop 使用 12 GB RAM 来运行一个具有 24 MB RAM 的容器?
- ios - 如何获取 SceneKit 场景中所有节点的当前位置
- c++ - 当将一个函数作为参数传递给另一个函数时,在它前面加上“[]”是什么意思?
- debugging - USB 重传 SET_CONFIGURATION 请求
- reactjs - 如何快照多个查询
- mysql - MySQL 临时表位置
- php - 需要来自不同路径的 php 包含
- javascript - 将 Django-React 应用程序部署到 Heroku 时出错
- linux - 我可以制作一个人类不可读的脚本代码吗