从文件中读取并在c中存储多个数组

时间:2016-05-16 15:11:05

标签: c arrays file

无法从文件中读取行

 int status,i=0;
 FILE *fp;
 fp=fopen("Accounts.txt","r+");
 do 
 {
    fscanf(fp,"%d",&ids[i]);
    status=fscanf(fp,"%lf",&balances[i]);
    fscanf(fp,"%ld",&phones[i]);
    fscanf(fp,"%c",&types[i]);
    i++;
 }
 while(status != -1 );

会发生的是计数器(i)增加3次,这很奇怪......所以想到将数组读取为不同的列,但是如何做到这一点? 编辑:这是来自文件的输入数据 1150393 123412 12341 小号

2 个答案:

答案 0 :(得分:2)

循环结构存在缺陷,无法实现您的目标。

假设输入文件只有一行数据。

1001 1234.99 12345678 C

fscanf的所有调用都在循环的第一次迭代中成功 i递增。所以它的价值现在是1

fscanf的第一次调用无法在循环的第二次迭代中读取数据。对fscanf的其他调用也无法读取数据 无论i的调用是否成功,您都会递增fscanf。现在,它的值为2

因此,即使只有一行数据,当您离开循环时,i的值仍为2

您需要使用以下内容:

// Read all the data corresponding to an index.
// If there is an error in reading all of them, break out of the loop.
while ( fscanf(fp, "%d %lf %ld %c", &ids[i], &balances[i], &phones[i], &types[i]) == 4)
{
   i++;
}

答案 1 :(得分:1)

/ *首先输入文件对我来说不太清楚它包含什么。但我仍然觉得你需要这样的答案: 你可以使用一个fscanf()调用,而不是像这样四个: - * /

select C1, C2 
from yourtable 
Group by C1, C2
Having count(case when C3 = 'ADD' then 1 end) > 0
   AND count(case when C3 = 'UPDATE' then 1 end) > 0