【发布时间】:2014-06-10 09:25:57
【问题描述】:
我有一个任务,我需要从文件中获取 RLC 电路的值并计算谐振频率,但是我的问题是当我使用 fscanf 函数时,它只读取文件的第一行,其余的输出为零.
#include <stdio.h>
data
int h;
typedef struct cct
{
int code[50];
float R[50];
float L[50];
float C[50];
} CCT;
int read(CCT cct[], int n_p, FILE* fp){
char temp;
if(fp==NULL){
printf("Error\n");
return -1;
}
fscanf(fp,"%d,%f,%e,%e\n", cct[n_p].code, cct[n_p].R,cct[n_p].L, &cct[n_p].C);
}
int main()
{
FILE* fp = fopen("U://datafile.txt", "rt");
int i = 0;
CCT cct[50];
int size;
while (!feof(fp)) {
read(cct, i, fp);
i++;
}
size = i;
for (i = 0; i < size; ++i)
printf("%d,%0.2f,%0.2f,%0.2f\n", cct[i].code[i], cct[i].R[i],
cct[i].L[i], cct[i].C[i]);
scanf("%d",&h);
fclose(fp);
}
这是数据文件
1,4.36,2.23e-2,4.65e-8
2,4.57,2.01e-2,5.00e-8
3,3.99,2.46e-2,4.82e-8
4,4.09,2.60e-2,4.70e-8
如果有人能指出为什么它只得到第一行,我将不胜感激。谢谢
【问题讨论】:
-
我会在字符串缓冲区中使用
fgets(),然后在字符串上使用 sscanf() 而不是fscanf()它往往会更可靠地工作。 -
约翰你介意向我解释一下,因为我是编程新手,谢谢。
-
你想要
CCT cct[50];吗?或CCT cct; -
不清楚您要做什么。
fscanf将只读取 struct cct 的每个数组字段的第一个元素。如果您在 50 个ccts 中的每个code、R、L、C中都有 50 个,那么您有某种矩形值表,并且您正在阅读的只是第一列。然后你打印cct[i].code[i]这是 diagonal 元素。这不可能是对的。 -
@n.m.我试图单独获取每组值,以便我可以使用它们进行计算,所以最后我得到了一种代码和频率表。