[英]reading from file to array in C
嘗試以下一種形式保存文本文件中的數據時遇到一些問題:
12
1 1 1 1 1 1 0 0 0 0 0 0
3.4
4.0
2.5
3.4
1000
1500
1000
如您所見,第一行中的第一個數字始終是第二行中的元素數量。 到目前為止,我的丑陋代碼是這樣的:
parametros=fopen("lyapunov.params", "r");
if(parametros == NULL){
printf("\nSe toman valores por defecto.\n");
}else{ //Se asume que el fichero tiene las lineas correctas.
for(line=0; line<9; line++){
if(line == 0){
fscanf(parametros, "%d", seq_length);
}
if(line == 1){
fscanf(parametros, "%d", &seq[i++]);
}
if(line == 2){
fscanf(parametros, "%f", amin);
}
if(line == 3){
fscanf(parametros, "%f", amax);
}
if(line == 4){
fscanf(parametros, "%f", bmin);
}
if(line == 5){
fscanf(parametros, "%f", bmax);
}
if(line == 6){
fscanf(parametros, "%d", asize);
}
if(line == 7){
fscanf(parametros, "%d", bsize);
}
if(line == 8){
fscanf(parametros, "%d", nmax);
}
}
}
fclose(parametros);
我做錯了什么? 先感謝您。
工作完整示例:
主要變化在:
fscanf
使用&variable
碼:
#include <stdio.h>
#include <stdlib.h>
#define MAX_ELEMENT 100
int main(void) {
FILE* parametros;
int reading_error = 0;
int i;
int seq_length = 0, asize = 0, bsize = 0, nmax = 0;
float amin = 0, amax = 0, bmin = 0, bmax = 0;
int seq[MAX_ELEMENT];
parametros = fopen("E:\\test.txt", "r");
if (parametros == NULL) {
printf("\nSe toman valores por defecto.\n");
} else { // Se asume que el fichero tiene las lineas correctas.
reading_error += 1 != fscanf(parametros, "%d", &seq_length);
if (seq_length > MAX_ELEMENT) {
// handle error
}
for (i = 0; i < seq_length;) {
reading_error = 1 != fscanf(parametros, "%d", &seq[i++]);
}
reading_error += 1 != fscanf(parametros, "%f", &amin);
reading_error += 1 != fscanf(parametros, "%f", &amax);
reading_error += 1 != fscanf(parametros, "%f", &bmin);
reading_error += 1 != fscanf(parametros, "%f", &bmax);
reading_error += 1 != fscanf(parametros, "%d", &asize);
reading_error += 1 != fscanf(parametros, "%d", &bsize);
reading_error += 1 != fscanf(parametros, "%d", &nmax);
fclose(parametros);
}
if (!reading_error) {
printf("%d\n", seq_length);
for (i = 0; i < seq_length;) {
printf("%d ", seq[i++]);
}
printf("\n");
printf("%f\n", amin);
printf("%f\n", amax);
printf("%f\n", bmin);
printf("%f\n", bmax);
printf("%d\n", asize);
printf("%d\n", bsize);
printf("%d\n", nmax);
}
return 0;
}
假設您的意思是“如您所見,第一行中的第一個數字始終是NEXT行中的元素數量。”,那么您的數據將不反映這一點。
通過首先讀取n然后循環讀取n個元素來編寫一個讀取一組數據的函數。
重復調用此函數,直到遇到EOF。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.