Comme suggéré, vous pouvez utiliser getchar() pour lire depuis la console jusqu'à ce qu'une fin de ligne ou un EOF soit retourné, en construisant votre propre tampon. La croissance dynamique du tampon peut se produire si vous êtes incapable de définir une taille de ligne maximale raisonnable.
Vous pouvez également utiliser fgets comme un moyen sûr d'obtenir une ligne sous forme de chaîne C à terminaison nulle :
#include <stdio.h>
char line[1024]; /* Generously large value for most situations */
char *eof;
line[0] = '\0'; /* Ensure empty line if no input delivered */
line[sizeof(line)-1] = ~'\0'; /* Ensure no false-null at end of buffer */
eof = fgets(line, sizeof(line), stdin);
Si vous avez épuisé l'entrée de la console ou si l'opération a échoué pour une raison quelconque, eof == NULL est retourné et le tampon de ligne peut rester inchangé (c'est pourquoi le fait de mettre le premier caractère à ' \0 est pratique).
fgets ne remplira pas trop la ligne[] et s'assurera qu'il y a un null après le dernier caractère accepté lors d'un retour réussi.
Si la fin de la ligne a été atteinte, le caractère précédant la terminaison ' \0 sera un \n '.
S'il n'y a pas de terminaison ' \n avant la terminaison \0 Il est possible qu'il y ait plus de données ou que la prochaine requête signale la fin du fichier. Vous devrez faire un autre fgets pour déterminer ce qui est vrai. (A cet égard, boucler avec getchar() est plus facile).
Dans l'exemple de code (mis à jour) ci-dessus, si line[sizeof(line)-1] == ' \0 après des fgets réussis, vous savez que le tampon a été complètement rempli. Si cette position est précédée d'un ' \n vous savez que vous avez eu de la chance. Sinon, il y a soit plus de données, soit une fin de fichier à venir dans stdin. (Lorsque le tampon n'est pas complètement rempli, il se peut que vous soyez toujours en fin de fichier et qu'il n'y ait pas non plus de ' \n à la fin de la ligne en cours. Puisque vous devez parcourir la chaîne de caractères pour trouver et/ou éliminer tout ' \n avant la fin de la chaîne (le premier ' \0 ' dans le tampon), je suis enclin à préférer utiliser getchar() en premier lieu).
Faites ce que vous devez faire pour faire face au fait qu'il y a toujours plus de lignes que la quantité que vous avez lue comme premier morceau. Les exemples de croissance dynamique d'un tampon peuvent fonctionner avec getchar ou fgets. Il y a quelques cas délicats auxquels il faut faire attention (comme se souvenir que l'entrée suivante commence à être stockée à la position de la balise ' \0 ' qui a terminé l'entrée précédente avant que le tampon ne soit étendu).