Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 06-03-2014 11:42:42

Hypathie
Membre
Lieu : Chambéry _ Montréal
Distrib. : Jessie
Noyau : Linux debian 3.16.0-4-586
(G)UI : Cinnamon Mate Xfce
Inscription : 28-12-2013

[résolu]question sur if ...else en C

Bonjour,
je me lance toute seule dans le c et je me suis donnée comme but d'écrire un programme nommé "lettre.c qui permet ;

d'afficher "voyelle", si la variable est une voyelle;
d'afficher "consonne, si la variable est une consonne.

J'en suis là :

#include <stdio.h>

int main(void)
{
  char var='b';
  if(var=='a'){;printf("voyelle\n");}
  if(var=='e'){;printf("voyelle\n");}
  if(var=='i'){;printf("voyelle\n");}
  if(var=='o'){;printf("voyelle\n");}
  if(var=='u'){;printf("voyelle\n");}
  if(var=='y'){;printf("voyelle\n");}
  else{printf("consonne\n");}
}



En faisant :

gcc -o lettre.x lettre.c ; ./lettre.x



J'ai bien le retour :

consonne



Mais si je donne la valeur 'a' ou 'e' ou 'i' ou 'o' ou 'u' ou 'y' j'obtiens


voyelle
consonne
 



Je ne comprends pas pourquoi.

quelqu'un pourrait-il m'aider à faire apparaître "consonne" par exemple lorsque :

char var='t';



Merci d'avance

Dernière modification par Hypathie (06-03-2014 17:40:57)

Hors ligne

#2 06-03-2014 11:53:46

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : [résolu]question sur if ...else en C

Salut Hypathie,

Hypathie a écrit :

En faisant :

gcc -o lettre.x lettre.c ; ./lettre.x



J'ai bien le retour :

consonne



Mais si je donne la valeur 'a' ou 'e' ou 'i' ou 'o' ou 'u' ou 'y' j'obtiens


voyelle
consonne
 


Je pense que si tu mets 'y' tu obtiens bien 'voyelle'.

Hypathie a écrit :

Je ne comprends pas pourquoi.



Ton code :

#include <stdio.h>

int main(void)
{
  char var='e';
  if(var=='a'){;printf("voyelle\n");}
  if(var=='e'){;printf("voyelle\n");}
  if(var=='i'){;printf("voyelle\n");}
  if(var=='o'){;printf("voyelle\n");}
  if(var=='u'){;printf("voyelle\n");}
  if(var=='y'){;printf("voyelle\n");}
  else{printf("consonne\n");}
}



s'interprète de la manière suivante :

Soit var = 'e',
Si var = 'a', afficher «voyelle», ce n'est pas le cas.
Si var = 'e', afficher «voyelle», c'est le cas, donc «voyelle»
Si var = 'i', afficher «voyelle», ce n'est pas le cas.
Si var = 'o', afficher «voyelle», ce n'est pas le cas.
Si var = 'u', afficher «voyelle», ce n'est pas le cas.
Si var = 'y', afficher «voyelle», sinon afficher «consonne», ce n'est pas le cas, donc «consonne».

Tu voudrais plutôt :

#include <stdio.h>

int main(void)
{
  char var='e';
  if(var=='a')
  {
    printf("voyelle\n");
  }
  else if(var=='e')
  {
    printf("voyelle\n")
  }
  else if(var=='i')
  {
    printf("voyelle\n");
  }
  else if(var=='o')
  {
    printf("voyelle\n");
  }
  else if(var=='u')
  {
    printf("voyelle\n");
  }
  else if(var=='y')
  {
    printf("voyelle\n");
  }
  else
  {
    printf("consonne\n");
  }
}



Ou encore mieux :

#include <stdio.h>

int main(void)
{
  char var='e';
  if(var=='a' || var=='e' || var=='i' || var=='o' || var=='u' || var=='y')
  {
    printf("voyelle\n");
  }
  else
  {
    printf("consonne\n");
  }
}


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#3 06-03-2014 12:39:42

Hypathie
Membre
Lieu : Chambéry _ Montréal
Distrib. : Jessie
Noyau : Linux debian 3.16.0-4-586
(G)UI : Cinnamon Mate Xfce
Inscription : 28-12-2013

Re : [résolu]question sur if ...else en C

Merci captnfab smile

je n'avais pas encore vu les deux "pipe".

Est-ce qu'il n'existerait pas un petit truc pour dire "autre chose que tout ce qui a été conditionné ?
Du genre pour mettre à la place de la dernière ligne de cela :


#include <stdio.h>

int main(void)
{
  char var='b';
  if(var=='a'){;printf("voyelle\n");}
  if(var=='e'){;printf("voyelle\n");}
  if(var=='i'){;printf("voyelle\n");}
  if(var=='o'){;printf("voyelle\n");}
  if(var=='u'){;printf("voyelle\n");}
  if(var=='y'){;printf("voyelle\n");}
  else{printf("consonne\n");}
}
 


else (autre chose) si tout autre chose que ce qui a été conditionné auparavant alors écrire "consonne" ?

juste pour rire une boulette que j'ai faite avant ta réponse et qui m'a écroulée de rire :


#include<stdio.h>
int main(void){
char var='a';
if(var=='a'){;printf("voyelle\n");}
if(var=='e'){;printf("voyelle\n");}
if(var=='i'){;printf("voyelle\n");}
if(var=='o'){;printf("voyelle\n");}
if(var=='u'){;printf("voyelle\n");}
if(var=='y'){;printf("voyelle\n");}
else{
  if(var!='a'){printf("consonne\n");}
  if(var!='e'){printf("consonne\n");}
  if(var!='i'){printf("consonne\n");}
  if(var!='o'){printf("consonne\n");}
  if(var!='u'){printf("consonne\n");}
  if(var!='y'){printf("consonne\n");}
     }
}
 



ça m'a donné :


voyelle
consonne
consonne
consonne
consonne
consonne
 



lol

Je comprends mieux pourquoi merci beaucoup encore, ça m'a vraiment aidé ta lecture de mon premier code !

EDIT : là, je mets [résolu] alors, mais est-ce que ça va pour le forum si je pose des questions en rapport à des difficultés de lecture de code c dans la rubrique "programmation" ? (même question pour des scripts bash)

Dernière modification par Hypathie (06-03-2014 17:43:37)

Hors ligne

#4 06-03-2014 12:50:46

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : [résolu]question sur if ...else en C

Hypathie a écrit :

je n'avais pas encore vu les deux "pipe".


C'est le «ou» logique, et «&&» est le «et» logique.

Hypathie a écrit :

Est-ce qu'il n'existerait pas un petit truc pour dire "autre chose que tout ce qui a été conditionné ?


Non. Sauf si tu le définis toi-même:

#include <stdio.h>

int main(void)
{
  char var='b';
  int filtre=0;
  if(var=='a')
  {
    printf("voyelle\n");
    filtre=1;
  }
  if(var=='e')
  {
    printf("voyelle\n");
    filtre=1;
  }
  if(var=='i')
  {
    printf("voyelle\n");
    filtre=1;
  }
  if(var=='o')
  {
    printf("voyelle\n");
    filtre=1;
  }
  if(var=='u')
  {
    printf("voyelle\n");
    filtre=1;
  }
  if(var=='y')
  {
    printf("voyelle\n");
    filtre=1;
  }
  if(filtre==0)
  {
    printf("consonne\n");
  }
}
 



Bon, quand tu en seras au select/case, là tu auras un moyen de t'en tirer.

Hypathie a écrit :

EDIT : là, je mets [résolu] alors, mais est-ce que ça va pour le forum si je pose des questions en rapport à des difficultés de lecture de code c dans la rubrique "programmation" ? (même question pour des scripts bash)


Oui, c'est la rubrique idéale pour smile


PS: essaye de formater ton code comme je te l'ai montré. Ne condense pas, ça n'aide pas à la lecture. C'est important de prendre les bonnes habitudes dès le début smile
PS2: [ code=c ] permet les sorties colorées smile


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#5 06-03-2014 18:39:25

Hypathie
Membre
Lieu : Chambéry _ Montréal
Distrib. : Jessie
Noyau : Linux debian 3.16.0-4-586
(G)UI : Cinnamon Mate Xfce
Inscription : 28-12-2013

Re : [résolu]question sur if ...else en C

Excuse moi ; pour ce code là


#include <stdio.h>

int main(void)
{
  char var='e';
  if(var=='a')
  {
    printf("voyelle\n");
  }
  else if(var=='e')
  {
    printf("voyelle\n")
  }
  else if(var=='i')
  {
    printf("voyelle\n");
  }
  else if(var=='o')
  {
    printf("voyelle\n");
  }
  else if(var=='u')
  {
    printf("voyelle\n");
  }
  else if(var=='y')
  {
    printf("voyelle\n");
  }
  else
  {
    printf("consonne\n");
  }
}
 



J'ai la réponse :


lettre.c: In function ‘main’:
lettre.c:13:3: error: expected ‘;’ before ‘}’ token
consonne

 



J'y ai passé l'ap-m : impossible de trouver d'où ça peut venir ?

Le tout petit avec le "OU" logique marche super bien : merci !

smile

Hors ligne

#6 06-03-2014 19:01:14

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : [résolu]question sur if ...else en C

Il manque un « ; » ligne 12 smile

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#7 06-03-2014 20:16:52

Hypathie
Membre
Lieu : Chambéry _ Montréal
Distrib. : Jessie
Noyau : Linux debian 3.16.0-4-586
(G)UI : Cinnamon Mate Xfce
Inscription : 28-12-2013

Re : [résolu]question sur if ...else en C

ouuffffff, merci smile

regarde, pendant ce temps
histoire de faire joli ce que j'ai trouvé qui fonctionne :

#include <stdio.h>

int main(void)
{
  char var='t';
  if(var=='a')
  {
    printf("voyelle\n");
  }
  else
  {
     if(var=='e')
     {
      printf("voyelle\n");
     }
        else
         {
           if(var=='i')
           {
           printf("voyelle\n");
           }
             else
             {
               if(var=='o')
               {
               printf("voyelle\n");
               }
                 else
                 {  
                    if(var=='u')
                    {
                    printf("voyelle\n");
                    }
                      else
                      {
                        if(var=='y')
                        {
                        printf("voyelle\n");
                        }
                          else
                             {
                             printf("consonne\n");
                             }
                       
                        }
                   
                    }
               
                }
           
            }
     
       }  
           
}
 



pour l'aspect "formatage" je m'attends à ce que tu ne vas pas apprécier  tongue

Hors ligne

#8 06-03-2014 20:54:09

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Sid/Rc-Buggy
Noyau : Linux (≥ 4.3)
(G)UI : i3-wm (≥ 4.11)
Inscription : 07-07-2008
Site Web

Re : [résolu]question sur if ...else en C

big_smile

Bah, c'est sûr que l'aspect formatage est plutôt… artistique là ^^"

Tant que c'est pour te faire plaisir dans des exercices, c'est cool.

Pour en revenir à un formatage qui ne me défrise pas, il faudrait revoir les points suivants :

  • Toujours aligner le { ouvrant avec le } fermant

  • Toujours aligner le if avec le else (s'il existe)

  • Toujours décaler le code à l'intérieur des accolades par rapport à celles-ci.


Ce qui donne (avec un décalage de deux espaces) :

#include <stdio.h>

int main(void)
{
  char var='t';
  if(var=='a')
  {
    printf("voyelle\n");
  }
  else
  {
    if(var=='e')
    {
      printf("voyelle\n");
    }
    else
    {
      if(var=='i')
      {
        printf("voyelle\n");
      }
      else
      {
        if(var=='o')
        {
          printf("voyelle\n");
        }
        else
        {  
          if(var=='u')
          {
            printf("voyelle\n");
          }
          else
          {
            if(var=='y')
            {
              printf("voyelle\n");
            }
            else
            {
              printf("consonne\n");
            }
          }
        }
      }
    }
  }  
}



Une autre version qui sera préférée si tu veux rassembler les affichages au même endroit dans le code :

#include <stdio.h>

int main(void)
{
  char var='b';
  int voyelle= var=='a' || var=='e' || var=='i' || var=='o' || var=='u' || var=='y';

  if(voyelle)
    printf("voyelle\n");
  else
    printf("consonne\n");
}


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

Pied de page des forums