Я пытаюсь написать простую программу на языке C, которая загружает текстовый файл, печатает первую строку на экране, ждет, когда пользователь нажмет кнопку ввода, а затем распечатает следующую строку, и так далее.C - Печать строк из файла с getline()
Как только аргумент принимает текстовый файл, который загружается как «база данных» потока. Я использую функцию getline()
для этого, в соответствии с примером this. Он компилируется отлично, успешно загружает текстовый файл, но программа никогда не входит в while-loop
, а затем выходит.
#include <stdio.h>
#include <stdlib.h>
FILE *database = NULL; // input file
int main(int argc, char *argv[])
{
/* assuming the user obeyed syntax and gave input-file as first argument*/
char *input = argv[1];
/* Initializing input/database file */
database = fopen(input, "r");
if(database == NULL)
{
fprintf(stderr, "Something went wrong with reading the database/input file. Does it exist?\n");
exit(EXIT_FAILURE);
}
printf("INFO: database file %s loaded.\n", input);
/* Crucial part printing line after line */
char *line = NULL;
size_t len = 0;
ssize_t read;
while((read = getline(&line, &len, database)) != -1)
{
printf("INFO: Retrieved line of length %zu :\n", read);
printf("%s \n", line);
char confirm; // wait for user keystroke to proceed
scanf("%c", &confirm);
// no need to do anything with "confirm"
}
/* tidy up */
free(line);
fclose(database);
exit(EXIT_SUCCESS);
}
Я попробовал его с fgets()
- я также разместить этот код -, но то же самое есть: он никогда не попадает в то время как петлю.
Это может быть что-то очень очевидное; Я новичок в программировании.
Я использую gcc-компилятор на Kali Linux.
Что говорит отладчик, когда вы проходите через код? –
Благодарим вас за ответы; Я нашел свою ошибку. Это действительно смущает, потому что код работает, только мой текстовый файл каким-то образом съелся; возможно, я не закрыл его должным образом, и все его содержимое было удалено, поэтому, конечно, значение getline() было EOF/-1. – c2ethanol
Я бы также проверил return 'scanf()' здесь, – RoadRunner