虽然循环在读取'\ n'后没有停止

时间:2018-04-28 19:18:26

标签: c file-io newline

int lire(int indice1) {
    int indice2 = 0;
    char c[1000];
    FILE *fptr;
    FILE *indice2r;
    indice1 = 0;
    fptr = fopen("Participant.txt", "r");
    if (fscanf(fptr, "%d", &indice1) == EOF) {
        return (indice1);
    } else {
        while (fscanf(fptr, "%d", &indice1) != EOF) {
            indice2r = fopen("indice2.txt", "w+");
            fscanf(indice2r, "%d", &indice2);
            for (indice2 = 0; c[indice2] != '\n'; indice2++) {
                fscanf(fptr, "%c", &c[indice2]);
            }
            fscanf(fptr, "%d", &indice1);
            indice1++;
            fprintf(indice2r, "%d", indice2);
        }
        fclose(indice2r);
        return indice1;
    }
}

我的问题是,只要我的程序进入了在读取'\n'之后应该停止的for函数,它就会继续运行并且不会离开循环。

2 个答案:

答案 0 :(得分:2)

indice2在比较之前递增,所以你不是在比较读数值而是在我相信之后的索引。

答案 1 :(得分:1)

请勿将fscanf()的返回值与EOF进行比较,而是与预期的转化次数进行比较。

此外,此代码存在严重混淆:

        fscanf(indice2r, "%d", &indice2)
        for (indice2 = 0; c[indice2] != '\n'; indice2++) {
            fscanf(fptr, "%c", &c[indice2]);
        }

您将整数读入indice2,然后使用相同的变量扫描行尾。您应该使用不同的方法跳到行尾:

        if (fscanf(indice2r, "%d", &indice2) != 1) {
            /* handle invalid input... */
        }
        /* consume the end of the line */
        int c;
        while ((c = getc(indice2_r)) != EOF && c != '\n')
            continue;