当我将其作为数字输入时,我无法弄清楚为什么我的浮点变量会保持打印输出为0。
代码:
int num, month, day, year;
float price[10000];
printf("Enter item number: \n");
scanf("%d", &num);
printf("Enter unit price: \n");
scanf("%f", &price);
printf("Enter purchase date (mm/dd/yyyy): \n");
scanf("%d/%d/%d", &month, &day, &year);
printf("Item\t\tUnit\t\tPurchase\n");
printf(" \t\tPrice\t\tDate\n");
printf("%d ", num);
printf("$%.2f ", price);
printf(" %d/%d/%d\n", month, day, year);
return 0;
我为我的商品编号输入555,为我的价格输入13.5,为我的日期输入10/24/2010。 当我这样做时打印出我的价格是0.00美元。它为我输入的任何数字执行此操作。为什么呢?
答案 0 :(得分:4)
您不能像这样插入数组值 -
scanf("%f", &price);
使用for循环将值插入数组价格 -
for(i=0; i<sizeWhatYouWant; i++){
scanf("%f", &price[i]);
}
或者只是将声明float price[10000]
更改为 -
float price;
答案 1 :(得分:2)
只需改变一下:
float price[10000];
到此:
float price;
因为您将它用作单个变量而不是数组
答案 2 :(得分:2)
您已将price
声明为您需要这样做的数组
int num, month, day, year;
float price[10000];
printf("Enter item number: \n");
scanf("%d", &num);
printf("Enter unit price: \n");
scanf("%f", &price[0]); /* <---- it's not &price it's &price[0] */
printf("Enter purchase date (mm/dd/yyyy): \n");
scanf("%d/%d/%d", &month, &day, &year);
printf("Item\t\tUnit\t\tPurchase\n");
printf(" \t\tPrice\t\tDate\n");
printf("%d ", num);
printf("$%.2f ", price[0]); /* <---- it's not price it's price[0] */
printf(" %d/%d/%d\n", month, day, year);
return 0;
你必须将值存储在数组的第一个元素中,然后打印第一个元素,即price[0]
。
如果您只想读取单个值,则无需将price
声明为数组,因此这将是解决方案
int num, month, day, year;
float price/* [10000] it doesn't need to be an array */;
printf("Enter item number: \n");
scanf("%d", &num);
printf("Enter unit price: \n");
scanf("%f", &price);
printf("Enter purchase date (mm/dd/yyyy): \n");
scanf("%d/%d/%d", &month, &day, &year);
printf("Item\t\tUnit\t\tPurchase\n");
printf(" \t\tPrice\t\tDate\n");
printf("%d ", num);
printf("$%.2f ", price);
printf(" %d/%d/%d\n", month, day, year);
return 0;
您正在将地址打印到数组的第一个元素而不是该地址的值,并且它已转换为unsigned int
或unsigned long int
,因此当您使用{{1}时}说明符,它打印"%f"
。
在这两种情况下:
为防止出现此类错误,如果使用0
,则应启用编译器警告
gcc
会这样做。
而且,对于无效输入,您的程序将具有未定义的行为,您需要检查gcc -Wall -Wextra -Werror ${SOURCE_FILES} -o ${OUTPUT_FILE}
是否确实读取了您指示它读取的值,这是通过检查{{1的返回值来实现的在你的情况下,它等于匹配项的数量
scanf()
由于您要求scanf()
项,因此if (scanf("%d", num) != 1)
errorInputWasInvalid();
必须返回1
。
答案 3 :(得分:2)
有两件事需要注意。
将float price[10000];
更改为float price;
,因为您只使用一个float
变量,因此您不需要数组。
您需要检查scanf()
的返回值,以确保输入正确。
另外,作为注释,您可能希望初始化局部变量,因为它们不会自动初始化。