无法从文件中读取行
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 小号
答案 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