Пока цикл не останавливается после прочтения '\ n' - PullRequest
0 голосов
/ 28 апреля 2018
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;
    }
}

Моя проблема в том, что всякий раз, когда моя программа переходит в функцию for, которая должна останавливаться после чтения '\n', она продолжает работать и не выходит из цикла.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

indice2 увеличивается до того, как его сравнивают, поэтому вы сравниваете не со значением чтения, а с индексом после этого, как я полагаю.

0 голосов
/ 28 апреля 2018

Не сравнивайте возвращаемое значение от 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;
...