C新手;使用数组.输出不理想



我是C(一般编程(的新手。我做了一段时间,我的学校作业。我得到了许多随机数的输出(例如1xxxxxxxxx(,而不是输入的打印显示。

这是有问题的代码:

#include<stdio.h>
int main()
{
char item[5][20];
double ppu[5], total, price[5], quantity[5];
int i;
for(i = 0; i < 5; i++)
{
printf("Enter item, price and quantity: ");
scanf("%s %f %f", &item[i], &ppu[i], &quantity[i]);
price[i] = ppu[i]*quantity[i];
total += price[i];
}
printf("ITEMttPRICE PER UNITttQUANTITYttPRICEn");
for(i=0; i < 5; i++)
{
printf("%stt%.2ftt%.0ftt%.2fn", item[i], ppu[i], quantity[i], price[i]);
}
}

将格式说明符更改为%lf。不要忘记为total指定一个初始值。

total尚未分配(或初始化(相关值。

此外,在scanf的上下文中,item[i](指向20个字符的指针(被转换为指向字符(scanf期望的(的指针。&的错误

scanf("%s %f %f", &item[i], &ppu[i], &quantity[i]);
// wrong  ^^ ^^   ^
scanf("%s %lf %lf", item[i], &ppu[i], &quantity[i]); // thanks to Bpaul

更好的是确保scanf做了正确的事情:

if (scanf("%s%lf%lf", item[i], &ppu[i], &quantity[i]) != 3) /* error */;

这些变量和数组成员均未初始化。

char item[5][20];
double ppu[5], total, price[5], quantity[5];
int i;

这意味着它们将包含随机垃圾值。现在,您使用scanf或赋值运算符分配给的值将包含(可能(有用的数据,但您也错过了检查scanf的返回值,它将告诉您可以成功读取多少值。

另请查看使用二维数组项的方式。那里出了问题。

最新更新