[英]Value from .txt file wont be read into array in C program
我有一個問題,我想將每一行讀入結構數組,但它不會將例如“Alvedon”下的“20 30”讀入數組中的 0 和 1,而是將整個“20 30”讀入數組. 如何將 20 和 30 放置在結構數組中的不同地址中?
代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXANTAL 10000
#define MAXORD 20
#define PAKETSTORLEKAR 10
#define FILNAMNSTORLEK 20
struct lakemedel
{
char namn[MAXORD];
int antalForpackningar[PAKETSTORLEKAR];
int saldo[PAKETSTORLEKAR];
};
typedef struct lakemedel Lakemedel;
void lasFil(Lakemedel lasLakemedelRegister[], int *pAntalLakemedel, char lasFilnamn[]);
int main()
{
Lakemedel lakemedelRegister[MAXANTAL];
char filnamn[FILNAMNSTORLEK];
int antalLakemedel = 0;
lasFil(lakemedelRegister, &antalLakemedel, filnamn);
int val;
printf("\n\n");
printf("%s\n", lakemedelRegister[0].namn);
printf("%s\n", lakemedelRegister[1].namn);
printf("%s\n", lakemedelRegister[0].antalForpackningar[1]);
return 0;
}
void lasFil(Lakemedel lasLakemedelRegister[], int *pAntalLakemedel, char lasFilnamn[])
{
printf("Skriv in fil du vill anvanda: ");
scanf(" %s", lasFilnamn);
int i,f,s = 0;
FILE *fp;
fp=fopen(lasFilnamn, "r");
if(fp!=NULL)
{
while(fscanf(fp,"%[^\n]\n", lasLakemedelRegister[i].namn)==1)
{
for(f=0; f<PAKETSTORLEKAR;f++)
{
fscanf(fp, "%[^\n]", lasLakemedelRegister[i].antalForpackningar[f]);
}
printf("\n");
fscanf(fp, "%[^\n]\n", lasLakemedelRegister[i].saldo);
(*pAntalLakemedel)++;
i++;
}
fclose(fp);
}
}
文本文件:
Alvedon
20 31
100 32
Ipren
10 41
30 42
在lasFil()
中,您永遠不會初始化變量i
,因此當您將其用作數組lasLakemedelRegister
中的索引時,您最終會出現未定義的行為。
表達式int i,f,s=0;
只會初始化s=0
。
如果您打開了編譯器警告,大多數理智的編譯器都會警告您這一點。 請始終使用-Wall
進行編譯
您還使用了錯誤的格式說明符來讀取整數(使用%d
),並且fscanf()
在這種情況下需要一個指針。 -Wall
也應該警告過你。
內部讀取循環看起來很亂。 要解決此問題,您必須提供有關如何解釋數據文件的更多信息。
您閱讀的所有內容都是字符串格式,因此由您決定如何將其轉換為 int 或任何您想要的。 在這種情況下,您需要使用 function strtok 將字符串“20 31”拆分為兩個字符串“20”和“31”,然后使用 function atoi 將字符串轉換為 int 20 和 31。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.