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 :

[débutant]lire une string


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 46
    Par défaut [débutant]lire une string
    Bonjour, je souhaite lire une string de 20 charactère maximum (le retour à la ligne compte comme un charactère) et l'imprimer.
    Mon problème viens de la reconnaissance de la taille de la string entrée. Mon code est le suivant :
    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
    #include <stdio.h>
    #include <string.h>
     
    int main()
    {
        char tab[20];
     
        printf("écrire une chaine de 20 charactères maxi (retour à la ligne compris)\n");
     
        if(scanf(" %19c", tab) == 1)   //scanf réussi
        {
            if (strlen() > 20)   /*pb ici, je voudrais tester si la string est trop longue ( mais je ne sais pas vraiment comment récupérer cette longueur), il fallait peut être le faire avant.*/
            {
                fprintf(stderr,"ERROR:\n");
                return 1;
            }
            printf("%s", tab);
            return 0;
        }
        else     //scanf raté
        {
            fprintf(stderr,"ERROR\n");
            return 1;
        }
    }
    Merci d'avance,

    Jocelyn

  2. #2
    Membre confirmé
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Par défaut
    Je te conseillerais d'utiliser fgets pour récupérer la saisie de l'utilisateur dans une chaine. Ensuite tu peux vérifier si cette chaine contient bien le caractère de retour à la ligne ou pas.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 46
    Par défaut
    effectivement, je pense que ce sera plus simple, je vais chercher un tuto pour cette fonction car bien que j'en ai entendu parler, je ne sais pas m'en servir.

  4. #4
    Membre confirmé Avatar de Rappunzell
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Novembre 2007
    Messages : 93
    Par défaut
    Tout simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    if (tab[19] != '\0')
    {
    // La chaine est trop grande...
    }

  5. #5
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 46
    Par défaut
    J'en suis à ceci, mais le test pr la longueur ne va toujours pas. par exemple, si j'entre "azertyuiop" il me retourne error:
    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
    #include <stdio.h>
    #include <string.h>
     
    int main()
    {
        char tab[20];
     
        printf("Entrer 20 charactères maxi ( retour à la ligne compris)\n");
     
        fgets(tab,20,stdin);
        if (tab[19] != '\0')
        {
            fprintf(stderr,"ERROR\n");
    		return 1;
        }
        else
        {
            printf("%s",tab);
    		return 0;
        }
    }
    Pouvez vous m'aider?

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    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 jocelyn54 Voir le message
    J'en suis à ceci, mais le test pr la longueur ne va toujours pas. par exemple, si j'entre "azertyuiop" il me retourne error:
    Pouvez vous m'aider?
    Alors il faut 21 char...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
    #include <string.h>
     
    int main()
    {
        char tab[20+1];
     
        printf("Entrer %d caractères maxi ( retour à la ligne compris)\n", (int) (sizeof tab - 1));
     
        fgets(tab,sizeof tab,stdin);
       <...>

  7. #7
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 46
    Par défaut
    Alors il faut 21 char...
    En fait non, je veux que le saut de ligne soit dans les 20 char donc 19 char plus le <enter> me donneraient mes 20 non? Il faut quand même faire un tab plus grand? Le problème ne viendrait-il pas aussi du fait que quand la chaine ne fait que 6char par exemple, le '\0' ne se trouve pas à l'indice 19 du tableau?

  8. #8
    Membre confirmé Avatar de Rappunzell
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Novembre 2007
    Messages : 93
    Par défaut
    Le caractère \0 est le caractère de fin de string. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    char chaine[8];
     
    scanf("%s", chaine);
    ton tableau de char chaine aura la forme là si tu rente "bonjour":

    [b][o][n][j][o][u][r][\0]

    (C'est pour ça qu'il faut déclarer chaine[8] et non pas chaine[7] comme on pourrait le faire de façon instinctive)

    Maintenant, la fonction scanf ajoute automatiquement le caractère \0, mais peut être pas la fonction fgets(). Essaye de faire ta saisie avec scanf...

    sinon remplace:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    if (tab[19] != '\0')
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    if(tab[19] != '\n') // \n est le caractère 'retour chariot'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lire une string ligne par ligne
    Par Aurazed dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 08/02/2008, 11h24
  2. [Débutant] lire une image ou le package awt
    Par yodark dans le forum Java ME
    Réponses: 2
    Dernier message: 27/11/2007, 15h17
  3. [débutant]-Lire une page HTML
    Par torso dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 03/03/2006, 21h42
  4. [débutant] vider une string
    Par Biosox dans le forum SL & STL
    Réponses: 2
    Dernier message: 07/11/2005, 15h16
  5. [MFC] Lire une string (niveau débutant)
    Par Korskarn dans le forum MFC
    Réponses: 10
    Dernier message: 24/08/2005, 18h38

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