簡體   English   中英

無法從C中的文本文件提取值

[英]Can't extract values from text file in C

我有一個大約2000行的文本文件,其格式如下:

1 1名稱1 LastN1 58 c 1600 1310.40 6 1 0.22 2164.80 1
2 1名稱2 LastN2 22 d 1700 1523.37 4 1 0.13 897.26 1
3 1名稱3 LastN3 34 c 1600 1195.84 2 1 0.26 836.16 1


2000 3 NameX LastNX 46 d 6000 6000.00 1 0 0.00 0.00 1

我想做的是從文本文件中讀取所有這些值,並將它們存儲到以下數組中:

int id          [2100];
char nombre [2100][30];
char apellido   [2100][30];
int edad        [2100];
int puesto      [2100];     char categoria  [2100];
int sueldoI     [2100];
float sueldoA   [2100];
int antiguedad  [2100];
int inscrito    [2100];
float aporte    [2100];
float ahorro    [2100]; 
int libre       [2100];

但是,當我嘗試閱讀它們時,控制台中會產生很多垃圾

這些是我嘗試讀取並將它們存儲到數組中的方法:

//Way number 1
char linea[70];
while(fgets(linea,70,datos) != NULL){   
    flushall();
    sscanf(linea,"%d %d %s %s %d %c %d %f %d %d %f %f %d\n",&id[i],&puesto[i],&nombre[i],&apellido[i],&edad[i],&categoria[i],&sueldoI[i],&sueldoA[i],&antiguedad[i],&inscrito[i],&aporte[i],&ahorro[i],&libre[i]);      
    i++;
}

// Way number 2 in here i get linea the way it's intended to be but i can't figure
// out a way to split the string into the multiple values i need to store in the arrays

while(fgets(linea,70,datos) != NULL){
    printf("%s",linea);
}

這是我以第一種方式獲得的輸出:

方式#1輸出

編輯:

我已經將數組的大小從2100修改為2000,程序的運行情況似乎更好

&nombre[i]&apellido[i]刪除地址運算符,它們是數組,您可以使用不帶地址的數組名稱獲取第一個元素的地址:

sscanf(/*....*/, nombre[i], apellido[i], /*....*/);

另外,對於字符串,應將期望的字符串長度指定為scanf(數組的大小-1):

sscanf(linea, "... %29s %29s ....", /*....*/, nombre[i], apellido[i], /*....*/);

你可能會濫用i

int main() {
  char linea[70];
  FILE *datos = fopen("datos", "r");
  int i= 0;
  while(fgets(linea,70,datos) != NULL){   
    sscanf(linea,"%d %d %29s %29s %d %c %d %f %d %d %f %f %d\n", &id[i], &puesto[i], 
        nombre[i], apellido[i],&edad[i],&categoria[i],&sueldoI[i],
        &sueldoA[i],&antiguedad[i],&inscrito[i],&aporte[i],&ahorro[i],   
        &libre[i]); 
    i++;
  } 

  i--;

  for (; i >= 0; i--) {
    printf("%d %s\n", id[i], nombre[i]);
  }

  return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM