我是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("ITEM\t\tPRICE PER UNIT\t\tQUANTITY\t\tPRICE\n");
for(i=0; i < 5; i++)
{
printf("%s\t\t%.2f\t\t%.0f\t\t%.2f\n", item[i], ppu[i], quantity[i], price[i]);
}
}
答案 0 :(得分:2)
将格式说明符更改为%lf
。不要忘记为total
赋一个初始值。
答案 1 :(得分:1)
total
尚未分配(或初始化)相关值。
此外,在item[i]
的上下文中,scanf
(指向20个字符的指针)被转换为指向char的指针(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 */;
答案 2 :(得分:0)
这些变量和数组成员均未初始化。
char item[5][20];
double ppu[5], total, price[5], quantity[5];
int i;
这意味着它们将包含随机垃圾值。 现在,您用scanf或赋值运算符分配的那些将包含(可能)有用的数据,但是您也错过了检查scanf的返回值的方法,这将告诉您可以成功读取多少个值。>
还要看看使用二维数组项的方式。那里有问题。