我试图编写一个代码,从1 .txt文件读取数据,进行某种数据操作,并在新的。txt文件中写入新数据。在这样做的同时,我试图测试数据是否正确地被读取和写入,所以我试图用基本的。txt文件来做,但是每当我运行程序时,如果最后一个字符串由2个单词组成,它会中断并进入一个新的行。
typedef struct sport {
char ime_sporta[MAXSIZE];
int godina;
char osvojena_medalja[MAXSIZE];
char drzava[MAXSIZE];
} Sport;
typedef struct node {
Sport sport;
struct node* next;
}Node;
Node* Ucitavanje() {
FILE* sport_medals = fopen("sport_medals.txt", "r");
if (!sport_medals) {
printf("DAT_GRESKA");
exit(0);
}
Node* head = NULL, * tail = head, * tmp;
Sport s;
while (fscanf(sport_medals," %[^|]| %d %s %sn", s.ime_sporta, &s.godina, s.osvojena_medalja, s.drzava) == 4) {
tmp = malloc(sizeof(*tmp));
if(tmp == NULL){
printf("MEM_GRESKA");
exit(0);
}
tmp->sport = s;
tmp->next = NULL;
if (!head) head = tmp;
else tail->next = tmp;
tail = tmp;
}
fclose(sport_medals);
return head;
}
int ispis(Node* head) {
Node* t;
FILE* f = fopen("winners.txt", "w");
if (!f) {
printf("G3");
exit(0);
}
while (head) {
fprintf(f, "%s|%d %s %sn", head->sport.ime_sporta, head->sport.godina, head->sport.osvojena_medalja, head->sport.drzava);
t = head;
head = head->next;
free(t);
}
fclose(f);
}
int main() {
Node* head;
char trazeni_sport[MAXSIZE];
scanf("%s",trazeni_sport);
head = Ucitavanje();
ispis(head);
return 0;
}
前4行输入
Weightlifting|2008 Gold North Korea
Swimming|2008 Gold United States
Swimming|2008 Silver United States
Football|2012 Bronze South Korea
前4行的输出
Weightlifting|2008 Gold North
Korea
Swimming|2008 Gold United
States
Swimming|2008 Silver United
States
Football|2012 Bronze South
Korea
与您的输入:
Weightlifting|2008 Gold North Korea
Swimming|2008 Gold United States
循环的第一次迭代将读取:
ime_sporta: Weightlifting
godina: 2008
osvojena_medalja: Gold
drzava: North
只有一个单词将被读入drzava
,因为%s
只读到第一个空白。这将在Korea
之前留下读指针。在下一次迭代中,%[^|]|
将读取到第一个|
,因此它将读取Korea
,新行和Swimming
:
ime_sporta: Korea
Swimming
godina: 2008
osvojena_medalja: Gold
drzava: United
同样,只有一个单词将被读入drzava
。
等等,一切如预期,这里没有什么奇怪的。
之后,在打印时,在drzava
后面加上new-line,因此在打印第一个元素之后,您将得到:
... North↲
,当打印下一个元素时,你要加上:
Korea↲
Swimming ...
如果您想读入drzava
直到行尾的所有内容,则将最后一个%s
替换为%[^n]
。