我正在C上编写一个程序,它应该访问文本文件以获取原型函数以进行进一步的计算。以下是存储在此类文件中的简单数据示例:
slc 0.5 0.5;
rdf 1.04 1.5 3.4 0.4;
raq 0 0.2 0.44;
jqw 7.23 6.2 0.23 1.56 1.345 1.0;
首先是行的唯一ID,即“slc”或“jqw”,它将定义数组的内容。这是这个字符的唯一目的。
糟糕的是所有数组都有不同的长度(例如从2个元素到60个)。我想只输入行的ID(即“slc”)并将此行中的所有数字都放入数组中。
我想问你解决这个问题的可能策略。不是真的需要代码,只有有效的策略。对我来说,替代解决方案是为每个ID使用已知的偏移量和数组长度,尽管这不是最佳解决方案,因为它使txt文件的版本复杂化(即插入新行)。
谢谢!
答案 0 :(得分:0)
创建一个60的数组(如你所说)。填写并记下该桶装满了多少。如果您担心内存,请将其复制到适当的大小(malloc
)。否则,只需将60个浮点数/双精度数与该特定行的数组中的数字一起存储。
答案 1 :(得分:0)
通常,您可以使用scanf
版本来玩这些类型的内容。特别是,在这些类型的示例中,我们必须考虑很多,我们必须有效地使用sscanf
,fscanf
,fprintf
,sprintf
等...
特别是,我对这个问题感兴趣,并编写了我自己的程序。
我在这里给你参考。 刚开始玩I / O功能,以达到目标......
#include<stdio.h>
int main(){
FILE* fp = fopen("D:\\LangFiles\\CFiles\\Stackoverflow answers try\\numread.txt","r");
char a[] = "jqw";
char digits[50],str[5];
if(!fp)
printf("Reporting error");
while(!feof(fp)){
fscanf(fp,"%s %[^;] %*c",str,digits); //reading the jqw in str and rest in digits and ignoring the ; at the last
if(strcmp(str,a) == 0){
while(1){
float float_num;
sscanf(digits,"%f",&float_num); //reading a single digit
printf("%f\t",float_num);
/*Store or use float_num*/
if(strchr(digits,' ')) //moving the digits ptr to next space strcpy(digits , strchr(digits,' ')+1 ); //making digits ptr to point the next char of space
else
break; //exiting once the digits is empty
}
break; //moving out after our requirement is satisfied
}
}
getchar();
}
一切顺利.....
答案 2 :(得分:0)