J'essaye d'écrire un simple programme C qui charge un fichier texte, imprime la première ligne à l'écran, attend que l'utilisateur appuie sur Entrée, puis imprime la ligne suivante, etc.C - Imprimer les lignes à partir du fichier avec getline()
Comme seul argument, il accepte un fichier texte qui est chargé en tant que "base de données" de flux. J'utilise la fonction getline()
pour cela, selon l'exemple this. Il compile bien, charge avec succès le fichier texte, mais le programme ne pénètre jamais dans le while-loop
, puis quitte.
#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);
}
Je l'ai essayé avec fgets()
- Je peux aussi poster ce code -, mais même chose là-bas: il ne pénètre jamais la boucle while.
Cela pourrait être quelque chose de très évident; Je suis nouveau à la programmation. J'utilise le compilateur gcc sur Kali Linux.
Qu'est-ce qu'un débogueur vous indique lorsque vous parcourez le code? –
Merci pour vos réponses; J'ai trouvé mon erreur. C'est vraiment embarrassant, parce que le code fonctionne, seul mon fichier texte a été mangé; peut-être que je ne l'ai pas fermé correctement et tout son contenu a été supprimé, donc bien sûr la valeur de getline() était EOF/-1. – c2ethanol
Je voudrais également vérifier le retour de 'scanf()' ici, – RoadRunner