[英]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);
}
這是我以第一種方式獲得的輸出:
編輯:
我已經將數組的大小從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.