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 :

Programme C qui affiche les caractères saisis par l'utilisateur


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Stagiaire OFPPT
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Stagiaire OFPPT

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Points : 0
    Points
    0
    Par défaut Programme C qui affiche les caractères saisis par l'utilisateur
    Bonjour tout le monde je souhaite que vous allez bien . J'ai un problème avec un programme que je n'arrive pas à commencé.
    En réalité cette question m'a été posé en Algorithmique, et plus que ça il ne faut pas inclure des Tableaux, il faut juste travailler avec les notions de base hhhhhhh .
    Voici L'exercice :

    Écrire un algorithme qui lit les caractères saisies par l’utilisateur. A la fin ce programme nous
    affichera la phrase saisie.
    La saisie des caractères s’arrête lorsqu’on tape point « . ».
    Si l’utilisateur veut insérer un espace il lui suffit de tapez sur 0.
    Par exemple si l’utilisateur tape successivement les caractères « b » , « o », « n », « j », « o », « u », « r » , « t », « o », « u », « s », « . » , il nous affichera
    la chaîne « bonjourtous ».
    Mais si il tape « b » , « o », « n », « j », « o », « u », « r » , « 0 », « t », « o », « u », « s », « . » , le programme affichera « bonjour tous ».

    Voici se qu'ils ont fait comme réponse :

    Solutions
    Le programme est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Variables caractere , phrase : Chaînes
    DEBUT
        phrase <- « »
        REPETER
        Ecrire « Entrez une caractère : »
        Lire caractère
        SI caractere = « 0 » ALORS
            caractere <- « »
        FIN SI
        phrase <- phrase + caractere
        JUSQU A caractere = « . »
        Ecrire « La phrase résultante est : » , phrase
    FIN
    ==>> S'il vous plait aidez-moi pour pouvoir le traduire en C (sans utiliser des tableaux seulement les notions de base si c'est possible), et merci d'avance .

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Une liste chainée, même si ekieki a raison

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct elt {
        char c;
        struct elt* next;
    } Elt;
    Ensuite:
    • Soit insertion à la fin avec 2 pointeurs (1 au début et 1 à la fin)
    • Soit insertion devant, mais écriture à l'envers

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Stagiaire OFPPT
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Stagiaire OFPPT

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Merci Pour Ton Effort Mon ami , mais pour être franc avec toi je n'est pas étudier les pointeurs . Malheureusement J'ai Arrivé Jusqu'a Les Fonctions. Alors Même Si Tu Me Donne La Réponse Compléte De Cet Exercice, J'aurai Des Difficulté A Le Comprende .

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Sans tableau ni liste chainée ni pointeurs, il n'y a mon avis pas de solution. En effet, il n'y n'est pas possible d'agréger des données en utilisant des "notions de base" (d'ailleurs, qu'est ce que les "notions de base" excluent ?).

    A mon humble avis, le plus simple est d'utiliser un tableau assez grand pour que sa taille soit suffisamment grande pour récupérer la majorité des messages entrés par les utilisateurs. Bien sûr, avec une taille fixe, on est jamais à l'abri qu'un jour un utilisateur rentre un message trop long mais que tu débutes, cela sera largement acceptable. Ensuite, il faut faire une boucle while() jusqu'à recevoir '.'. Pour lire le clavier caractère par caractère, tu as la fonction getchar(). Tu peux accéder à chaque case du tableau pour y mettre tes caractères avec une variable que tu incrémentes quand tu lis un caractère valide (cad différent de '\0' == 0, ce qu'on détecte avec un if()).

    Enfin, printf() et puts() peuvent te permettre d'afficher des messages pour l'utilisateur.

    Bon courage.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Stagiaire OFPPT
    Inscrit en
    Janvier 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Stagiaire OFPPT

    Informations forums :
    Inscription : Janvier 2014
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Salut Bktero J'ai Essayer De Répondre à cet Exercice en utilisant un tableau des caractères, Mais J'ai un petit soucie en ce qui concerne la fonction strcpy Un Msg D'erreur Est afficher au-dessous du Code lvoila le Code :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     main ( )
     {
     	char T[101] ; int i ; 
     	  do 
     	     {
     	     	for (i=0 ; i<=99 ; i++)
     	     	 {
     	     	 	printf (" Veuillez Entrer Le %i Caractere : ",i) ;
     	     	 	getchar ( ) ;
     	     	 	scanf ("%c",&T[i]) ;
     	     	 	  if ( T[i]=='0' )
     	     	 	   	strcpy(T[i]," ") ;	 	     	 	   
     	     	 }
     	     }
     	   while ( T[i] != '.' ) ;
     	      printf (" Votre Phrase Est : \n ") ;
     	        for (i=0 ; i<=99 ; i++)
     	         	printf (" %c ",T[i]) ; 
      system (" pause ");  
     }
    Et Voilà L'erreur :
    [Error] invalid conversion from 'char' to 'char*' [-fpermissive] la ligne : 15
    Merci Pour ton intérêt et ton aide

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    T[i] est un char, strcpy() attend une chaine... Le compilateur n'est pas d'accord. D'ailleurs, pourquoi utiliser une fonction qui copie des chaines alors que tu souhaites juste faire une affectation de caractère ?

    De manière globale, il y a énormément de problèmes de logique dans ce code :
    - getchar() puis scanf() ?
    - Un do/while avec un for un l'intérieur ?
    - afficher une chaine de caractères avec une boucle ??

    D'un point de vue syntaxe, il manque un "int" devant main().

    Enfin, -fpermissive il me semble que c'est un warning du C++. Es-tu sûr de bien compiler en mode C ?

  7. #7
    Membre actif Avatar de zaza576
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2013
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 175
    Points : 275
    Points
    275
    Par défaut
    Avec les notions de bases, si on exclut les solutions par les pointeurs, les structures chaînées, les tableaux dynamiques et les tableaux,
    ça fait qu'il peut toujours utiliser les variables. Donc il peut définir des variables de type char pour chaque lettre saisie par l'utilisateur

    A mon université, les notions de bases incluaient tout ce que j'ai cité précédemment (les pointeurs, les structures chaînées, les tableaux dynamiques et les tableaux). On est ou on n'est pas développeur C.

    Et d'ailleurs, même pour Java. On nous avait appris les bases avec le Java 1.1, 1.5 et 1.6 avant de passer à la POO en 1.7 et 1.8 récemment).

    C'est l'humain qui se fixe ses propres limites dans l'apprentissage. Au final, il n'y a pas de base (et là je sens les gens des bases de données me sortir mais il y a des ACID) XD...

    --------------------

    Pourquoi pas faire directement T[i] = " "; au lieu de ton strcpy qui travaille sur des chaînes de caractères (char**) ?

    Et si on veut aller assez loin dans le respect des normes du main, il faut saisir cela (en C99) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int main(int argc, char** argv){
        return EXIT_SUCCESS;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function googleIsYourF*ck*ngFriend(String url, String maQuestion){
        goTo(url);
        reponse = find(maQuestion);
        if(isAcceptable(reponse)){
            clickOn(By.xpath("//button[@id='resolvedButton']"));
        }
        sendMessage("Merci");
    }
    
    googleIsYourF*ck*ingFriend("http://www.google.fr", "ma question");

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par zaza576 Voir le message
    Donc il peut définir des variables de type char pour chaque lettre saisie par l'utilisateur
    Vas-y l'artiste-médium montre nous le bout code en C qui fait ce que tu dis.

    Après avoir bien rigoler je pense que je vais l'encadrer

  9. #9
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    @zaza576 : c'est l'effet élections qui te fait dire autant de bêtises ?

    @foetus :

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 345
    Points : 1 211
    Points
    1 211
    Par défaut
    Citation Envoyé par zaza576 Voir le message
    Donc il peut définir des variables de type char pour chaque lettre saisie par l'utilisateur
    [...]
    On est ou on n'est pas développeur C.
    [...]
    Pourquoi pas faire directement T[i] = " "; au lieu de ton strcpy qui travaille sur des chaînes de caractères (char**) ?


    Plus sérieusement et comme d'autres l'ont dit, sans tableaux et sans pointeurs, implémenter "phrase <- phrase + caractere" en C n'est pas possible ... bon après y'a peut-être une manière "tricky" de le faire, en appelant une fonction qui affiche sur la sortie standard (et qui "bufferize") à chaque caractère et en "flushant" manuellement ce buffer ?

Discussions similaires

  1. [Turbo Pascal] Fonction qui remplace les caractères entrés par des étoiles (*)
    Par Dr.Mimo dans le forum Contribuez
    Réponses: 0
    Dernier message: 30/03/2012, 21h51
  2. Réponses: 0
    Dernier message: 30/03/2010, 20h07
  3. programme c qui affiche les dix nombre suivants
    Par psychologue dans le forum Débuter
    Réponses: 5
    Dernier message: 31/01/2010, 16h45
  4. Réponses: 2
    Dernier message: 07/12/2009, 13h34
  5. InputQuery n'affichant pas les caractères saisies
    Par netah25 dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2007, 11h03

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