[英]Reading string and integer from file into struct - C
我希望這個問題與發布的另一個問題不太相似。 在這一點上,我仍在學習如何閱讀其他人的代碼,更不用說編寫自己的代碼了。 我對如何從文件中的一行讀取字符串和 int 並將其存儲在名為 People 的結構中感到困惑。 我一直在研究 fgets、fscanf 甚至 fread,但我不知道該使用什么以及在哪里使用它。 我從一個最多包含 10 個條目的文件中獲取這些數據,如下所示:
Joshua 50
Dwayne 90
Jennifer 45
Goldilocks 85
這是我的代碼:
typedef struct
{
char *name[20];
int change_amount;
int fifties;
int twenties;
int tens;
int fives;
}People;
int get_file()
{
const int MAXPEOPLE = 10;
People persons[MAXPEOPLE];
int i = 0;
FILE *fpointer;
char line[12];
fopen("file.txt", "r");
if (fpointer == NULL)
{
perror("Error opening file");
return (0);
}
while (fgets(line, 8, fpointer) != NULL)
{
//Max number of letters for name under assumption is 8
char name[8];
int amount = 0;
scanf(line, "%s %d", name, amount);
printf("%s", name);
memset(line, 0, 8);
for (int i = 0; i < MAXPEOPLE; ++i)
{
return(0);
}
}
}
任何幫助表示贊賞。 Go 對我來說很容易:)
我認為正確掃描的主要問題是您閱讀與fgets()
一致(明智之舉),然后嘗試從那里進行掃描。
scanf(line, "%s %d", name, amount);
但使用錯誤的 function 這樣做。 使用sscanf()
。
https://en.cppreference.com/w/c/io/fscanf
為了完整起見,讓我添加來自 Martin James 和 Jonathan Leffler 評論的貢獻:
你只能活兩次,但你只能返回一次:你的循環毫無意義
即,一旦你的for
循環的任何迭代都有一個return
,並且所有這些迭代都有,你的while
循環就完成了。
您調用 fopen() 但不分配(或檢查)返回值。 然后測試仍未初始化的 fpointer。 不是幸福的秘訣!
即這個
fopen("file.txt", "r");
if (fpointer == NULL)
應該
fpointer = fopen("file.txt", "r");
if (fpointer == NULL)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.