【发布时间】:2021-11-01 08:57:33
【问题描述】:
我想要的示例输出:
chocolate bar $1.00
skittles $1.20
marshmellows $5.00
candy-cane $0.90
我得到的输出:
░"@ $1.00
░"@ $1.20
░"@ $5.00
░"@ $0.90
我制作的代码:
#include <stdio.h>
void ShowMenu();
int main()
{
int i, j;
float price[4][1]= {1,1.2,5,0.9};
char snack[4][20];
ShowMenu(price, i, j, snack);
return 0;
}
void ShowMenu(float price[4][1], int i, int j, char snack[4][20])
{
for (i=0;i<4;i++)
for (j=0;j<1;j++)
{
if(i==0)
snack[0][20]=="chocolate bar" ;
else if(i==1)
snack[1][20]=="skittles" ;
else if(i==2)
snack[2][20]=="marshmellows" ;
else if(i==3)
snack[3][20]=="candy-cane" ;
printf("%s RM%.2f\n", snack, price[i][j]);
}
}
【问题讨论】:
-
我看不出有一个一维只有
[1]的二维数组和一个只执行一次的循环。 -
你不能分配给
snack[0][20]...snack[0][20]不存在。snack[0]有 20 个元素:snack[0][0]、snack[0][1]、...、snack[0][19],每个元素都是一个字符。 (你想要snack[0][0] = 'c'; snack[0][1] = 'h', /*...*/ snack[0][14] = '\0';或strcpy(snack[0], "chocolate bar");) -
请打开完整的编译器警告并从那里开始。特别是,您不能用
=分配C 中的字符串(初始化除外)或将C 中的字符串与==进行比较,请使用strcmp()。这看起来是使用struct与一个成员price和另一个snack的好案例。 -
此外,显示的输入/输出与该代码不一致(RM vs $)。