Читайте по одной строке за раз из файла в C - PullRequest
2 голосов
/ 22 февраля 2010

Как прочитать входные данные по одной строке за раз, чтобы вызвать другую функцию на C. Я думал, что это будет работать, но мой вывод зависает:

#define BUFFMT "%255"
#define LINE_LEN 256
#define START_COUNT 1

// filename is declared in the main file elsewhere.  I know the file opens since I tried an //old method I use to read one line at time using fgets, but I didn't know how to do one //string at a time.  Thanks.
FILE *OpenFile(const char *fileName)
{
    FILE *fptr;
    if ((fptr = fopen(fileName, "r")) == NULL) {
        fprintf(stderr, "Error opening file %s, exiting...",  fileName);
        exit(EXIT_FAILURE);
    }
    return fptr;
}

LIST *CreateList(FILE *fp) 
{
    char buf[LINE_LEN];

    while (scanf(BUFFMT"s", buf) != EOF) {
        printf("%s: \n", buf);
    }
}

Ответы [ 3 ]

4 голосов
/ 22 февраля 2010

scanf() будет читать с терминала, поэтому он будет зависать, ожидая, пока вы введете данные. Вместо этого используйте fscanf(fp, BUFFMT"s", buf).

2 голосов
/ 22 февраля 2010

Попробуйте это вместо вашего scanf:

fgets (buf, sizeof (buf), fp)
0 голосов
/ 22 февраля 2010

Вы пробовали использовать fgets()

fgets ()

fgets () читает до символов размера 1 из потока и сохраняет их в буфере. fgets () хранит нулевой символ ('\ 0') после последнего прочитанного символа в буфер и возвращает «буфер» если все работает нормально, или NULL на ошибка или конец файла.

...