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 :

syntax error before '!' token


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 94
    Points : 46
    Points
    46
    Par défaut syntax error before '!' token
    bonjour à tout le forum,


    je suis en TP de développement mais mes profs ne sont pas là alors je ne ne peux pas déboguer seul, car je ne comprend pas l'erreur, j'ai un programme auquel j'ai ajouté à la fin :

    73.do { //ce do{ se trouve en réalité au début du programme !
    74.do {
    75. printf("Autre foyer ? (O/N)");
    76. scanf("%s",&continu);
    77. if (continu=='O'||continu=='o') {
    78. sortie=0;
    79. } else {
    80. sortie=1;
    81. }
    82. }while !(continu=='o' && continu=='O' && continu=='N' && continu=='n');
    83. } while !(sortie=1);
    lors de la compilation avec ggc sous linux voici l'erreur :
    82: error: syntax error before '!' token
    83: error: syntax error before '!' token

    Si vous pouviez me dire d'où vient l'erreur j'en serais surper content !


    Merci !


    Petithomme

  2. #2
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Essaye de poster sur le bon forum

    essaye avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    82.  }while (!(continu=='o' && continu=='O' && continu=='N' && continu=='n'));
    83. } while (!(sortie=1));

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 94
    Points : 46
    Points
    46
    Par défaut
    Merci beaucoup !

    NB : sur quel forum je devais poster, car je vais souvent revenir ^^

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 94
    Points : 46
    Points
    46
    Par défaut
    Heu en fait j'ai encore un ptit blem :

    while !(continu=='o' && continu=='O' && continu=='N' && continu=='n');

    semble ne pas marcher comme je le souhaite :

    je voudrais que si la personne entre 'o' ou 'O' (pour oui) le programme retourne au début avec mon do{, et que s'il met 'n' ou 'N' alors programme s'arrete . . .


    Marci !

  5. #5
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Poste dans le forum du language que tu utilises (surement du C ou un tru du genre je suppose)

    Dans ton while n'oublies pas la parenthèse avant le !

    Ensuite il faut que tu testes la condition de ton while.

    Si ton utilisateur appuis sur 'O' par exemple, ta condition de boucle devient
    !(0&&1&&0&&0) soit 1
    Donc tu boucles dans ton while!

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 656
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 656
    Points : 11 153
    Points
    11 153
    Par défaut
    Je crois que tu ne fais pas le bon test : que ce passe-t-il si l'utilisateur tape autre chose que O ou N ?

    Cas de O et N :
    -tu sors du programme si l'utilisateur à taper N
    -tu restes dans le programme si l'utilisateur à tapé O

    Plus globalement :
    Si continu='O' ou si continu='o' alors on reste
    Si continu='N' ou si continu='n' alors on part
    Si continu!='N' ou continu!='n' ou continu!='O' ou continu!='o' alors on repose la question.

    Pour ton test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while !(continu=='o' && continu=='O' && continu=='N' && continu=='n');
    commence par faire un test simple et regarde comment le programme réagit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while (!continu=='o')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while (continu!='o')
    et fais une table de vérité qui rescence les cas où tu dois sortir (1) et ou tu dois rester (0).

    ---------------------------
    Pour ce qui est du forum : il aurait fallu poster en C++...
    Ce n'est pas grave si un modérateur passe par ici il déplacera le sujet dans le bon forum : il n'est donc pas nécessaire d'en recréer un pour cette discussion.

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 94
    Points : 46
    Points
    46
    Par défaut
    Ok je posterais au bon endroit, si un modo veut le déplacer, nop !

    voici la solution que je viens juste de trouver :

    while ((continu=='o' && continu=='O' && continu=='N' && continu=='n'));

    Merci encore de votre aide !

  8. #8
    Membre éprouvé Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Points : 969
    Points
    969
    Par défaut
    ca :
    while ((continu=='o' && continu=='O' && continu=='N' && continu=='n'));
    et ca :
    while (continu=='o' && continu=='O' && continu=='N' && continu=='n');

    c la meme chose!

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 593
    Points
    41 593
    Par défaut
    Il sera toujours faux, ce test...
    Tu testes si continu est à la fois égal à 'o' et à 'O' (sans compter les N)...

  10. #10
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Je rajouterais aussi que si "continu" est déclaré comme ceci :
    alors le "scanf" devrait être comme cela :

  11. #11
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 94
    Points : 46
    Points
    46
    Par défaut
    pourtant ma solution a l'arrache fonctionne . . . LOL

  12. #12
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par titmael
    pourtant ma solution a l'arrache fonctionne . . . LOL

    Ne rigole pas, ce n'est pas vraiment marrant, surtout quand tu vas devoir travailler sur des projets a plusieurs. Il faut tout faire sauf du code a l'arrache... (enfin il y a aussi d'autres choses a ne pas faire).

    Et ce n'est pas parce que ton code fonctionne sur un jeu de test precis qu'il est bon.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,
    Citation Envoyé par titmael
    pourtant ma solution a l'arrache fonctionne . . . LOL
    Si tu utilises le code qu'on a vu, y compris les modifications, je ne pense pas que ça fonctionne.
    En particulier, si tu contrôles ta boucle avec ce test:
    Citation Envoyé par titmael
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ((continu=='o' && continu=='O' && continu=='N' && continu=='n'));
    ça ne marchera pas : comme l'a déjà écrit Médinoc, le test est toujours faux.

    Et comme te l'a rappelé millie, une solution à "'l'arrache" n'en est pas une, car ça montre tout simplement que tu n'as pas compris ce que tu fais.
    Donc, que répondras-tu à ton prof quand il te demandera "comment ça marche ?"

  14. #14
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par titmael
    Merci beaucoup !

    NB : sur quel forum je devais poster, car je vais souvent revenir ^^

  15. #15
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Points : 354
    Points
    354
    Par défaut
    heu...moi je comprend pas ca:


    il faudrait pas plutot ca ?:


  16. #16
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 656
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 656
    Points : 11 153
    Points
    11 153
    Par défaut
    Citation Envoyé par kamouminator
    heu...moi je comprend pas ca:


    il faudrait pas plutot ca ?:

    en effet..........


    Pour ce qui est de ce test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while (continu=='o' && continu=='O' && continu=='N' && continu=='n');
    je rejoins ce qui a été dit au-dessus : il est toujours faux.

    ce test serait plus approprié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while (continu=='o' || continu=='O' || continu=='N' || continu=='n');
    et encore... Il faudrait ajouter des négations devant certains tests

  17. #17
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Points : 354
    Points
    354
    Par défaut
    bon, arretez moi si je dis des betises mais:

    d'abord comme tout le monde l'a fais remarqué:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while !(continu=='o' && continu=='O' && continu=='N' && continu=='n');
    il faudrai plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (!(continu=='o' && continu=='O' && continu=='N' && continu=='n'));
    mais ca n'a pas beaucoup de sens,
    c'est la meme chose que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (continu!='o' || continu!='O' || continu!='N' || continu!='n');
    ce qui est TOUJOURS le cas...

    autre chose: !(sortie==1) c'est pareil que (sortie!=1)....c'est plus clair comme ca...non ?

    d'autre par, je ne comprend pas du tout l'utilité des deux boucle...mais ca je pense que c'est parce que ta condition sur le premier while est mauvaise

    ton premier while, c'est pour verifier que tu as bien appuié sur 'o' 'O' 'n' ou 'N' non ?

    la condition serai donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (continu!='o' && continu!='O' && continu!='N' && continu!='n');
    ce qui signifie bien: "l'utilisateur n'appuie sur aucune de ces touches"

    y'a un autre probleme:
    ton if !!!!

    tu lui dis si continue == 'O' ou 'o' tu met sortie à 0

    sinon sortie = 1

    si j'ai bien compris c'est pas ca, parce que si tu appuie sur une autre touche comme 'b' par exemple sortie sera mise a 1....

    il faut mettre une autre condition
    sur continue quand il vo 'n' ou 'N'

    bien sur, je peu avoir mal compris ce que tu attends de ton programme...si c'est le cas, je m'en excuse !

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 593
    Points
    41 593
    Par défaut
    Si j'ai bien compris, tu veux boucler tant qu'on n'a pas saisi 'o', 'O', 'n' ou 'N'.
    Alors, plutôt que de s'embêter avec ces tests et ces && qui ne marchent pas, autant utiliser une autre méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <string.h>
     
    /* ... */
     
    do
    {
        /* Saisir un caractère dans continu */
        /* ... */
    }
    while( strchr("OoNn", continu) == NULL);

  19. #19
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Médinoc
    Si j'ai bien compris, tu veux boucler tant qu'on n'a pas saisi 'o', 'O', 'n' ou 'N'.
    Alors, plutôt que de s'embêter avec ces tests et ces && qui ne marchent pas, autant utiliser une autre méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* ... */
    while( strchr("OoNn", continu) == NULL);

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/04/2013, 11h09
  2. Réponses: 0
    Dernier message: 20/02/2010, 17h30
  3. Syntax error on token
    Par ourab dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 21/11/2009, 21h49
  4. "syntax error before '(' token " .. oO
    Par jbarreau-mainson dans le forum C
    Réponses: 3
    Dernier message: 08/04/2009, 12h21
  5. Problème de compilation (parse error before '*' token)
    Par moon93 dans le forum Autres éditeurs
    Réponses: 8
    Dernier message: 11/06/2006, 23h39

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