【发布时间】:2020-09-28 15:07:54
【问题描述】:
我想逐行读取一个 txt 文件,并且每一行存储在一个不同的变量中: 这是我要阅读的txt文件
Jenny
Woodbridge Ave
Amber
Exeter street
Michael
Main Street
David
Plainfield ave
我确实喜欢
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
typedef struct info
{
char name[20];
char add[50];
}INFO;
int main(void){
const char *fileName = "test.txt";
FILE *file = fopen(fileName, "r");
INFO* list = (INFO*)malloc(20*sizeof(INFO));
readFromFile(file,list);
fclose(file);
free(list);
return 0;
}
void readFromFile(FILE *file,INFO* list){
int i = 0;
while(!feof(file)){
fscanf(file,"%s %s\n ",(list+i)->name,(list+i)->adds);
i++;
}
}
但我得到了
Name: Jenny
Addr: Woodbridge
------------------------------
Name: Ave
Addr: Amber
------------------------------
Name: Exeter
Addr: street
------------------------------
Name: Michael
Addr: Main
------------------------------
Name: Street
Addr: David
------------------------------
Name: Plainfield
Addr: ave
我只是编辑了一点 所以我需要使用 fgets 来逐行读取而不是 fscanf() 对吗?
【问题讨论】:
-
你可以告诉计算机做你想让它做的事情。现在你告诉它做一些不同的事情,它正在做你告诉它做的事情。
-
请发帖minimal reproducible example。特别是我们不知道您如何称呼
read。另外你不应该使用名称read,因为已经有一个同名的标准函数,将来可能会导致其他问题。 -
哦,
%s %d %s与参数不匹配。你可能想要%s %s -
首先,您对
while(!feof(file))的使用是wrong,您必须在使用“读取”之前检查读取是否成功。其次,您的文件似乎没有通过%d读取的内容。第三,undefined behavior 被调用,因为有 3 个输入指令,而只给出了 2 个指针。 -
如果你想读行,你不应该使用scanf。你应该使用
fgets。如果你使用scanf,你不能使用"%s"。