IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

fonction pour lire au clavier


Sujet :

C

  1. #21
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    Oui je l'avais testé et ca fonctionnait, mais c'est vrai que je n'avais pas essayé si on passait 0 comme taille de buffer et que donc oui j'avais oublié de vérifier la taille du parametre avant d'allouer l'espace

    Il y a un truc que je ne comprends pas dans votre code, c'est la vérification du tableau.
    Pourquoi faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte[taille_buffer - 1] = 0;
    Revoilà ma fonction, quelqu'un peut me dire si cela fonctionne bien chez lui ?
    J'ai mis deux exemples, l'un pour tester quand on entre au clavier et l'autre quand on lit un fichier, je ne vois plus d'erreurs, les 2 cas de figures ont l'air de bien fonctionner...

    Merci
    Bonne journée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    #include <stdio.h>
    #include <stdlib.h>
    #define verif_ptr(ope) { if(!(ope)) { printf("\n ----- Erreur d'allocation de la mémoire ----- \n"); exit(1); } } 
     
    /* Declarations des fonctions */
    char* lecture_clavier(unsigned long);
     
    /* Definition des fonctions */
    char* lecture_clavier(unsigned long taille_buffer)
    { 
    	int c;
    	unsigned long i = 0, j = 1;	
    	char *texte = NULL;
     
     	if(taille_buffer < 1)
    		taille_buffer = 5;
     
    	texte = malloc(sizeof(*texte)*taille_buffer);
    	verif_ptr(texte != NULL);
     
    	while((c=getchar()) != '\n' && c != EOF)
    	{
          		texte[i] = c;
    		i++;
     
    		if(i%taille_buffer == 0)
    		{
    			char *tmp = realloc(texte, sizeof(*texte)*taille_buffer*++j);
    			if(tmp != NULL)
    			{
    				texte = tmp;
    			}
    			else
    			{
    				free(texte);
    				return NULL;
    			}
    		}
      	}
     
    	if(c == EOF)
          	{
             	free(texte), texte = NULL;
          	}
    	else
    	{	
    		texte[i] = '\0';
    		if(i == 0 || (i+1)%taille_buffer != 0)
    		{
    			char *tmp = realloc(texte, sizeof(*texte)*(i+1));
    			if(tmp != NULL)
    				texte = tmp;
    		}
    	}
     
    	return texte;  
    }    
     
     
    /*************************************/
    /*       Programme principal         */
    /*************************************/
    int main(int argc, char** argv)
    {
    	/* Exemple 1 : lire au clavier */
    	printf("\n----- Exemple 1 : lire au clavier -----\n\n");
    	char *machaine = NULL;
     
    	printf("Entrez une chaine de caracteres :\n");
     
    	machaine = lecture_clavier(0);
     
    	printf("\n\nLa chaine tapee est :\n%s\n\n", machaine);
     
    	free(machaine);
     
     
    	/* Exemple 2 : lire un fichier ligne par ligne*/
    	printf("\n----- Exemple 2 : lire un fichier ligne par ligne -----\n\n");
    	FILE *monfichier = freopen("lecture_clavier.c", "r", stdin);
     
    	if(monfichier != NULL)
       	{
          		char *ligne;
    		unsigned short i = 1;
     
         		while((ligne = lecture_clavier(15)) != NULL)
          		{
             		printf ("Ligne %d = '%s'\n", i, ligne);
             		free(ligne);
    			i++;
          		}
      	}
     
    	fclose(monfichier);
     
      	return 0;
    }

  2. #22
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par italiasky
    Pourquoi faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte[taille_buffer - 1] = 0;
    Vielle méthode de chacal pour vérifier l'intégrité des chaines (les dépassements de tableau sont une spécialité du C...).

    On place un 0 à la position extrême (la plus à droite), et après chaque écriture dans la chaine, on vérifie le 0 est toujours là. Si il n'y est pas, c'est qu'on c'est planté dans le codage des indices, des tailles etc.

  3. #23
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    Lol ok

    Quelqu'un pour essayer vite fait la fonction chez lui ?
    Normalement ca devrait être bon

    Merci
    ++

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Fonction pour lire des nombres dans un fichier
    Par passant_ dans le forum Débuter
    Réponses: 11
    Dernier message: 28/10/2008, 18h47
  2. Recherche fonction pour lire/ecrire fichier ISO
    Par T-B dans le forum Langage
    Réponses: 2
    Dernier message: 21/01/2008, 14h47
  3. sizeof dans une fonction pour lire une chaine
    Par Haze. dans le forum Débuter
    Réponses: 11
    Dernier message: 06/11/2007, 12h07
  4. fonction pour lire les fichier audio
    Par tarek007 dans le forum Multimédia
    Réponses: 1
    Dernier message: 11/05/2005, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo