我正在编写一个程序来使用数组存储项目名称和价格。 但是这里无法从数组中检索项目名称。程序崩溃了。
#include <stdio.h>
#include <stdlib.h>
void main()
{
char itemName[100];
int n=0, i,j, total=0, itemPrice[1];
printf("Enter number of items: \n");
scanf("%d", &n);
//fflush(stdin);
for (i = 0; i < n; i++)
{
printf("Item name: \n");
scanf("%s", &itemName[i]);
for (j = i ; j<=i; j++ )
{
printf("Enter the price\n");
scanf("%d", &itemPrice[j]);
total += itemPrice[j];
}
}
for (i = 0; i < n; i++)
printf(" %s", itemName[i]);
for (j = i ; j<=i; j++)
printf("\t\t%s\n", itemPrice[j]);
}
答案 0 :(得分:0)
您必须分配足够的空间来存储字符串和整数。
此外,您必须为printf()
使用正确的格式说明符,或者您可以调用未定义的行为。
循环for (j = i ; j<=i; j++)
无害,但几乎毫无意义且令人困惑。
另请注意,您只是为了打印名称而不进行迭代而不是在程序的后半部分打印价格。
可能的解决方法:
#include <stdio.h>
#define ITEM_MAX 100
int main(void)
{
char itemName[ITEM_MAX][1000];
int n=0, i, total=0, itemPrice[ITEM_MAX];
printf("Enter number of items: \n");
if (scanf("%d", &n) != 1)
{
fputs("read error\n", stderr);
return 1;
}
for (i = 0; i < n; i++)
{
printf("Item name: \n");
/* Specify the length to read in order to avoid buffer overrun. */
/* Don't forget to reserve space for terminating null-character. */
if (scanf("%999s", itemName[i]) != 1)
{
fputs("read error\n", stderr);
return 1;
}
printf("Enter the price\n");
if (scanf("%d", &itemPrice[i]) != 1)
{
fputs("read error\n", stderr);
return 1;
}
total += itemPrice[i];
}
for (i = 0; i < n; i++)
{
printf(" %s", itemName[i]);
printf("\t\t%d\n", itemPrice[i]);
}
return 0;
}
答案 1 :(得分:0)
可能是:
#include <stdio.h>
#include <stdlib.h>
void main()
{
char itemName[100][100];
int n=0, i,j, total=0, itemPrice[100];
printf("Enter number of items: \n");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
printf("Item name: \n");
scanf("%s", &itemName[i]);
printf("Enter the price\n");
scanf("%d", &itemPrice[i]);
total += itemPrice[i];
}
for (i = 0; i < n; i++)
printf(" %s", itemName[i]);
for (j = 0 ; j<n; j++)
printf("\t\t%s\n", itemPrice[j]);
}
答案 2 :(得分:0)
itemPrice[1];
上面的语句告诉你,你将只在itemprice [0]中存储一个数据....如果你在itemprice [2]中保存了一些东西(或者大于0就是错误)
我可以看到很多错误,最好一步一步走