Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将文本文件中的两行存储为两个字符串_C - Fatal编程技术网

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”
会占用空白。感谢您的帮助,我在其他注释中尝试了它,并尝试了其他代码,效果很好,老实说,没有期望得到那么多帮助:D
fscanf(fp,“%s\n”,学生)无法读取带有空格的名称,如“Rohan Bari”。没有宽度限制。喜欢
“%s\n”
中的
“\n”
在这里没有任何好处,因为下一个
“%s”
会占用空白。感谢您的帮助,我在其他注释中尝试了它,并尝试了其他代码,效果很好,老实说,没有期望得到那么多帮助:D“并且我无法让它与第二行一起工作”->,可能是因为(未登录)代码从未读取第一行的
“\n”
“我无法使其与第二行一起工作”-->可能是因为(未登录)代码从未读取第一行的
“\n”