« Programmation C/Entrées/sorties » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎Synchronisation : Utilisation de {{Erreur volontaire}}
→‎Entrées non formatées : utilisation de fgetc dans saisie_chaine
Ligne 478 :
{
int taille = 256;
int offset = 0;
char *chaine = malloc(taille);
if (chaine != NULL;)
 
while (chaine != NULL && fgets(chaine + offset, taille - offset, flux) != 0)
{
offsetint i = taille - 10;
ifint (strrchr(chaine, '\n') == 0)c;
while ((c = fgetc(stdin)) != EOF)
{
if (nouvellei == NULLtaille)
/* '\n' n'est pas présent dans le tableau, la ligne a donc été
* tronquée par fgets(). Il faut donc agrandir la taille du tampon
* afin de pouvoir récupérer la suite.
*/
char *nouvelle = realloc(chaine, taille += 256);
if (nouvelle == NULL)
{
/* realloc()Le atableau échouéest :plein, et on libèrea laencore mémoiredes etchoses ona quittelire... */
free(chaine)taille += 256;
char *nouvelle = realloc(chaine, taille += 256);
if (nouvelle == NULL)
{
/* realloc() a échoué : on libère la mémoire et on quitte */
free(chaine);
}
chaine = nouvelle;
}
chaineif (c != nouvelle;'\n')
} {
else chaine[i] = c;
{ i++;
*/}
/* '\n' est dans le tableau: on a lu toute la ligne. */
break;else
{
}
/* fin de la ligne: on s'arrete sans mettre le '\n' */
if (offset == 0 && chaine != NULL)
break;
{
}
free(chaine);
chaine = NULL;
}
chaine[i] = '\0';
}
return chaine;