无法扫描文件中的元素并直接将其放入数组中

时间:2013-11-28 18:50:02

标签: c arrays

为什么我无法使用以下编程扫描文件中的元素?我可以使用while循环扫描元素。但是,我想将元素放在二维数组中,这就是我尝试使用for循环的原因。不幸的是,我无法做到这一点。这有什么特别的原因,或者我做错了什么。 下面给出的错误的屏幕截图。

#include <stdio.h>
#define ROW 3
#define COLUMN 12
#define SIZE 40
int main ()
{
int i ,j;
float sale[ROW][COLUMN];
FILE *fp;
fp = fopen("store.txt", "r");
if(fp == NULL)
{
    printf("Error Opening File\n");
    return 0;
}
for(i=0; i<ROW; i++)
{
    for(j=0; j<COLUMN; j++)
    {
        fscanf(fp, "%.2f", &sale[i][j]);
        printf("%.2f  ", sale[i][j]);
    }
    printf("\n\n");
}

fclose(fp);
return 0;
}

元素

A 20000 15000 14000 14900 17800 12000 11500 11000 15700 18500 20400 31000
B 31900 17000 16700 17800 18800 22000 10500 11000 15890 17640 21750 32540

c 29000 17500 16600 14678 17970 12125 11576 12198 16700 19500 21400 31000

Scree Shot of the Error

2 个答案:

答案 0 :(得分:1)

您不能使用%Ld,它无效。您应%ld使用long int%Lf使用long double

请在此处查看显示有效组合的完整表格:http://www.cplusplus.com/reference/cstdio/scanf/

另外,请记住检查函数的返回值,特别是fscanf在没有您注意的情况下失败。

还要考虑初始化sale数组。您显示的输出是由于未初始化的内存。

答案 1 :(得分:0)

我认为问题在于这个陈述。

fscanf(fp, "%.2f", &sale[i][j]);

在fsanf格式中,%。2f无效。在printf中没问题。 另外,你需要读取第一个char元素,否则,无法读取成功。 你可以这样做。

char buf[ROW];//for A B C
for(i=0,fscanf(fp,"%c",&buf[i]); i<ROW; i++)
{
    for(j=0; j<COLUMN; j++)
    {
        fscanf(fp, "%f", &sale[i][j]);
        printf("%.2f", sale[i][j]);
    }
    printf("\n\n");
}