【问题标题】:Array containing string包含字符串的数组
【发布时间】:2025-12-28 20:20:19
【问题描述】:

嘿,我正在尝试创建一个发票程序,该程序应该接受商品名称、商品价格和数量,并将它们存储在列表或数组中。但是,当我运行该程序时,会出现错误。有人可以帮忙吗?我是 c 的菜鸟,看不出我是怎么出错的,这个概念很简单..

这是程序:

#include <string.h>
#include <conio.h>

int main()
  {
   char item_name[255];
   float item_price=0;
   float quantity;
   int choice;
   int k;

   for (k=0;choice != 2;k++)
    {
       printf ("Enter item name: ");
       scanf ("%s", item_name[k]);
       printf ("\n");
       printf ("Enter item price: ");
       scanf ("%f", &item_price[k]);
       printf ("\n");
       printf ("Enter item quantity: ");
       scanf ("%f", &quantity[k]);
       printf ("\n\n");
       printf ("Enter another item? Enter '1' for yes and '2' for no: ");
       scanf ("%d", &choice);
    }

  }

这些是错误:

sample.c:在函数“main”中: sample.c:15:8:警告:格式“%s”需要“char *”类型的参数,但参数 2 的类型为“int”[-Wformat=] scanf ("%s", item_name[k]); ^ sample.c:18:32:错误:下标值既不是数组也不是指针也不是向量 scanf ("%f", &item_price[k]); ^ sample.c:21:30:错误:下标值既不是数组也不是指针也不是向量 scanf ("%f", &quantity[k]); ^ sample.c:25:5: 错误:在 '}' 标记之前需要';' } ^ sample.c:8:10:警告:变量“数量”已设置但未使用 [-Wunused-but-set-variable] 浮动数量; ^ sample.c:7:10:警告:变量“item_price”已设置但未使用 [-Wunused-but-set-variable] 浮动项目价格=0; ^

【问题讨论】:

  • 请将您遇到的完整错误添加到问题帖子中(而不是 cmets)。
  • ...嗯——很明显,我们只为 一个 项目名称、价格和数量分配空间,然后尝试存储其中几个(在内存中不存在)。
  • quantityitem_price 不是数组,因此您不能在它们上使用 []。
  • ...所以,对于 OP:你能控制有多少项目吗?如果是这样,您可以为所有这些分配足够大的数组;如果没有,您将需要动态分配内存,方法是分配新的链表条目(任何一年级的 C 计算机科学课程都会向您展示如何做),或者使用 realloc() 或 kin 来调整数组。
  • 你能评论一下上面程序的更正吗?

标签: c arrays string


【解决方案1】:
char item_name[255];

是单个字符串 - 不是字符串数组。

item_name[k]

是一个字符 - 不是一个字符*

所以你需要让 item_name 成为一个二维字符串数组

char item_name[100][255];

然后使用

scanf ("%s", item_name[k]);

下一个问题是 item_price。它还需要是一个数组:

float item_price[100];

与浮动数量相同的故事

float quantity[100];

然后你缺少一个“;”在最后一次扫描结束时f

最后你需要添加

if (choice == 2) break;

跳出循环。

建议的代码允许 100 个项目,所以你们都应该添加:

if (k > 99) break;

作为for循环的第一行

【讨论】: