C的新手;使用数组。不良的输出

时间:2018-11-15 11:24:17

标签: c arrays

我是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]);
}

}

3 个答案:

答案 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的返回值的方法,这将告诉您可以成功读取多少个值。

还要看看使用二维数组项的方式。那里有问题。