C 如何将文本文件中的两行存储为两个字符串
我试图读取一个包含两行的文本文件,如下所示:C 如何将文本文件中的两行存储为两个字符串,c,C,我试图读取一个包含两行的文本文件,如下所示: 18,3,4,c;19,3,5,D 19100,18,18;19102,3,2 我想将第一行存储在一个名为Students的字符串中,第二行存储在另一个名为Courses的字符串中 我已经写了这段代码,但它只存储一行,我无法让它与第二行一起工作 FILE *fptr; if ((fptr = fopen("program.txt", "r")) == NULL) { printf("Error! opening file");
18,3,4,c;19,3,5,D
19100,18,18;19102,3,2
我想将第一行存储在一个名为Students的字符串中,第二行存储在另一个名为Courses的字符串中
我已经写了这段代码,但它只存储一行,我无法让它与第二行一起工作
FILE *fptr;
if ((fptr = fopen("program.txt", "r")) == NULL) {
printf("Error! opening file");
exit(1);
}
fscanf(fptr, "%[^\n]", Students);
fclose(fptr);
有人能帮我吗?我是c的新手,我不知道怎么做,提前谢谢你
FILE *fptr;
char buffer[255] = {'\0'};
if ((fptr = fopen("program.txt", "r")) == NULL) {
printf("Error! opening file");
exit(1);
}
fgets(Students, sizeof(Students), fptr);
fgets(Courses, sizeof(Courses), fptr);
fclose(fptr);
该行fgets(学生、学生人数、fptr)
将从文件开始读取,并将第一行存储到学生
字符数组&然后fgets(Courses,sizeof(Courses),fptr)
将读取第二行并将其存储到Courses
char数组中
确保学生和课程的规模足够大,可以容纳每一行学生和课程
该行fgets(学生、学生人数、fptr)
将从文件开始读取,并将第一行存储到学生
字符数组&然后fgets(Courses,sizeof(Courses),fptr)
将读取第二行并将其存储到Courses
char数组中
确保学生和课程的大小足够容纳每一行。您可以尝试fscanf()
解决此问题:
#include <stdio.h>
int main(void) {
char Students[100], Courses[100];
FILE *fp = fopen("program.txt", "r");
if (!fp) {
printf("File wasn't opened.\n");
return -1;
}
fscanf(fp, "%s \n", Students);
fscanf(fp, "%s", Courses);
printf("%s\n", Students);
printf("%s\n", Courses);
fclose(fp);
return 0;
}
样本输出
您可以尝试fscanf()
解决此问题:
#include <stdio.h>
int main(void) {
char Students[100], Courses[100];
FILE *fp = fopen("program.txt", "r");
if (!fp) {
printf("File wasn't opened.\n");
return -1;
}
fscanf(fp, "%s \n", Students);
fscanf(fp, "%s", Courses);
printf("%s\n", Students);
printf("%s\n", Courses);
fclose(fp);
return 0;
}
样本输出
使用类似于:
fscanf(fptr, "%[^\n]\n%[^\n]]\n", Students,Courses);
fscanf(fptr,“%[^\n]\n%[^\n]]\n”,学生,课程);
告诉scanf()读取新行,读取并丢弃新行,然后再次执行该操作。使用类似于:
fscanf(fptr, "%[^\n]\n%[^\n]]\n", Students,Courses);
fscanf(fptr,“%[^\n]\n%[^\n]]\n”,学生,课程);
告诉scanf()读取新行,读取并丢弃新行,然后再次执行。如果第一行是“\n”
,则无法将任何内容读入学生
。没有宽度限制是很糟糕的。它不读取第二个\n
,因为它与您的示例中的scanf()保持无关。对于读取行,我倾向于使用directfgets()来处理比读取到的字符数组长的行。基本上,我创建了一个myfgets()类型的函数,它可以为任何调用方进行安全读取。如果第一行是“\n”
,则无法将任何内容读取到学生中。没有宽度限制是很糟糕的。它不读取第二个\n
,因为它与您的示例中的scanf()保持无关。对于读取行,我倾向于使用directfgets()来处理比读取到的字符数组长的行。基本上,我创建了一个myfgets()类型的函数,可以为任何调用方进行安全读取。fscanf(fp,“%s\n”,Students)代码>无法读取带有空格的名称,如“Rohan Bari”。没有宽度限制。喜欢“%s\n”
中的“\n”
在这里没有任何好处,因为下一个“%s”
会占用空白。感谢您的帮助,我在其他注释中尝试了它,并尝试了其他代码,效果很好,老实说,没有期望得到那么多帮助:Dfscanf(fp,“%s\n”,学生)代码>无法读取带有空格的名称,如“Rohan Bari”。没有宽度限制。喜欢“%s\n”
中的“\n”
在这里没有任何好处,因为下一个“%s”
会占用空白。感谢您的帮助,我在其他注释中尝试了它,并尝试了其他代码,效果很好,老实说,没有期望得到那么多帮助:D“并且我无法让它与第二行一起工作”->,可能是因为(未登录)代码从未读取第一行的“\n”
“我无法使其与第二行一起工作”-->可能是因为(未登录)代码从未读取第一行的“\n”
。