See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: question langage c (application console)  (Read 3948 times)

0 Members and 1 Guest are viewing this topic.

Offline spoutnikman

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 0
04 March 2010, 03:07:35
bonjour je débute en langage c et je me heurte a des problèmes :bug: j'ai quelques questions
j'essaye de faire une sorte de questionnaire
comment faire pour avoir plusieurs question et réponse sur un seule programme
ex de code
Quote
#include <stdio.h>
#include <stdlib.h>

int main()
{


  int choixreponce;
  printf(\n" );
  printf("1.\n" ) ;
  printf("2.\n" ) ;
  printf("3.\n" ) ;
  printf("4.\n" ) ;
  printf("\nVotre reponce ? "  ) ;
  scanf("%d", &choixreponce) ;

  printf("\n" ) ;
  switch (choixreponce)
  {
    case 1:
       printf("" ) ;
       break;
    case 2:
       printf("" ) ;
       break;
    case 3:
       printf("" ) ;
       break;
    case 4:
       printf("" ) ;
       break;
    default:
       printf("" ) ;
       break;

  }
  return 0 ;
  }

et pour ceux qui connaissent code blocs ou peut on trouver le programme qu'on a codé (car j'ai trouvé un semblant
d'exécutable console qui se coupe après l'entré du n° de la réponse)
 
j'espère avoir été assez clair et désolé si c'est dans la mauvaise section :siffle:   
merci d'avance



Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #1 - 04 March 2010, 03:55:45
C'est le bon endroit mais je suis trop fatigué pour répondre  (4hdu mat) ;)
Donc une autre bonne âme va certainement te répondre.

Dan


Offline tofitouf

  • Legend
  • ******
  • Posts: 1380
  • Karma: 0
Reply #2 - 04 March 2010, 10:10:10
ton bout de code semble correct à une exception il faut vérifier le code retour de scanf (il retourne le nombre de champs
trouvé) donc vérifier qu'il retourne 1

je corrige :
Quote
#include <stdio.h>
#include <stdlib.h>

int main()
{
   int choixreponce;
   
   bool ok = false;
   while (!ok)
   {
      printf(\n" );
      printf("1.\n" ) ;
      printf("2.\n" ) ;
      printf("3.\n" ) ;
      printf("4.\n" ) ;
      printf("\nVotre reponce ? " ) ;
      ok = scanf("%d", &choixreponce) == 1; // si c'est égal à 1 l'utilsateur à bien rentré une valeur numérique
      else if (!ok || choixreponce < 1 || choixreponce > 4)
      {
         printf("erreur : veuillez entrer une valeur entre 1 et 4 !" ) ;
         ok = false;
      }      
   }

   printf("\n" ) ;
   switch (choixreponce)
   {
      case 1:
         printf("ok : choix 1" ) ;
         break;
      case 2:
         printf("ok : choix 2" ) ;
         break;
      case 3:
         printf("ok : choix 3" ) ;
         break;
      case 4:
         printf("ok : choix 4" ) ;
         break;
      default:
         printf("erreur : valeur foireuse" ) ;
         break;
   }
   
   return 0 ;
}


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

PC en rade, codage en panne.... Nom de Zeus

Offline tofitouf

  • Legend
  • ******
  • Posts: 1380
  • Karma: 0
Reply #3 - 04 March 2010, 10:14:57
pour en revenir à ta question que je n'ai aps complètement compris : tu veux plusieurs choix à la suite ?

il te suffit alors de reproduire plusieurs fois le premier bloc :
Quote
int choixreponse2;

ok = false; // ne pas redéclarer ok qui est fait au dessus
while (!ok)
{
printf("choix deux \n" );
printf("1.\n" ) ;
printf("2.\n" ) ;
printf("\nVotre reponse ? " ) ;
ok = scanf("%d", &choixreponse2) == 1; // si c'est égal à 1 l'utilisateur à bien rentré une valeur numérique
else if (!ok || choixreponse2< 1 || choixreponse2> 2)
{
printf("erreur : veuillez entrer une valeur entre 1 et 2 !" ) ;
ok = false;
}
}

et ensuite tu teste aussi la seconde valeur dans ton switch

là c'est à toi de t'organiser selon ce que tu veux faire
tu remplace le switch précédent par celui là :
Quote
switch (choixreponce)
{
case 1:
if (choixreponse2 == 1)
printf("ok : choix 1 - 1" ) ;
else
printf("ok : choix 1 - 2" ) ;
break;
case 2:
etc... etc....
break;
}


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

PC en rade, codage en panne.... Nom de Zeus

Offline Alto-kun

  • Hero Member
  • *****
  • Posts: 775
  • Karma: 1
Reply #4 - 04 March 2010, 12:14:37
Quote
DanSteph a écrit:
C'est le bon endroit mais je suis trop fatigué pour répondre  (4hdu mat) ;)
Donc une autre bonne âme va certainement te répondre.

Dan

a quel heure tu va te réveiller encore???:prout:


[sgrey]Alto-kun[/sgrey]Valentin 17 Ans
--------------------


http://tinyurl.com/d9c4guf

Offline spoutnikman

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 0
Reply #5 - 05 March 2010, 01:10:24
merci beaucoup les gars :top:    je vais essayer si y a un blem je vous recontacte



Offline spoutnikman

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 0
Reply #6 - 06 March 2010, 00:37:47
re les gars j'ai encore un blem :sunk:
bin voila quand je suis sous code blocks et je lance le programme après que j'aie tapé le choix de ma réponse le texte disant
si la reponse est bonne ou mauvaise apparait suivit du texte de code blocks indiquant que le programme est terminé
mais quand je lance normalement sans code blocs le programme se coupe juste après avoir entré la reponce :( y a t'il un moyen
d'éviter ca ? :wonder:
merci d'avance



Offline tofitouf

  • Legend
  • ******
  • Posts: 1380
  • Karma: 0
Reply #7 - 06 March 2010, 17:42:45
il doit y avoir un problème effectivement mais comme cela sans avoir le code exact sous les yeux c'est diffciles à dire.

une erreur courante sont les valeurs par défauts, elles peuvent varier si tu le fait marcher en debug ou en relase.

ex :

int mavaleur;

// ca peux prendre n'importe quoi selon l'état de la mémoire à ce moment là, donc il vaut mieux toujours initier ses valeurs
par quelques chose :

int mavaleur = 0;
ca évite des déconvenues à cause de comportement aléatoire.

je n'ai jamais utilisé codeblock, je conseille largment le visual c++ gratuit et aussi QT qui est un peu lent mais très
stable et bien documenté.


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

PC en rade, codage en panne.... Nom de Zeus

Offline Fox-Terrier

  • League of
  • Legend
  • ******
  • Posts: 1426
  • Country: Switzerland ch
  • Karma: 28
  • :D
Reply #8 - 06 March 2010, 21:21:25
je suppose que tu t'es mis au tuto du zéro ?
(http://www.siteduzero.com/tutoriel-3-14189-apprenez-a-programmer-en-c.html ,pour ceux qui connaissent pas)

tu peux poster ton code avec les balises [code ] ... [/code ] (sans espaces)

Quote
donc il vaut mieux toujours initier ses valeurs

super important ça !

en fait j'ai pas exactement compris ce que tu voulais faire : des conditions au conditions ? du genre si je choisis 1.
cheesburger me demander si je veux 1. avec mayonnaise 2. avec ketchup ?



Message modifié ( 07-03-2010 17:20 )


Offline MartySpaceLines

  • Legend
  • ******
  • Posts: 1096
  • Karma: 0
Reply #9 - 06 March 2010, 22:43:22
Hello!

J'ai pas regardé en détail (fatigué ;)), mais j'ai juste deux remarques qui pourraient t'être utiles:

- Pour mettre du code C++ sur le forum, tu peux utiliser (comme plus bas) les balises [ cpp ] et [ /cpp ] (sans les espaces).
Ainsi, ton code sera coloré automatiquement!

- Ci-dessous, j'ai essayé de revoir la présentation de ton code, avec des tabulations, des espaces et des sauts de ligne.
N'aie pas peur d'aérer ton code, il n'en sera que mieux lisible!

Code: [Select]
#include <stdio.h>
#include <stdlib.h>

int main ()
{
     int iChoixReponse;


     printf (\n" );
     printf ("1.\n" ) ;
     printf ("2.\n" ) ;
     printf ("3.\n" ) ;
     printf ("4.\n" ) ;
     printf ("\nVotre reponse ? " ) ;

     scanf ("%d", &iChoixReponse) ;

     printf ("\n" ) ;

     switch (iChoixReponse)
     {
          case 1:
               printf("" ) ;
               break;
          case 2:
               printf("" ) ;
               break;

          // Etc... ;-)
     }

     return 0 ;
}

Donc:

- Utilisation des tabs (ici des espaces...) pour séparer les différents éléments

- Ne pas ésiter à laisser des lignes vides pour aérer le code

- espace entre le nom d'une fonction et les parenthèses (ex: MaFonction ();)

- Noms de variables clairs:

ex: une variable qui stocke la réponse d'une question (comme chez toi):

Mauvais: repquest
 - Nom pas clair
 - On ne sait pas le type de valeur (int, char etc...)

Mieux: iReponseQuestion1
 - On sait de quoi on cause
 - On connaît tout le temps le type de la variable (i = int, b = bool, c = char etc...)

Voilà...j'espère que tout ceci te sera utile ;)


EDIT: Enfait non, là il est aéré comme je l'aime...dans le preview du message il ajoutait un saut entre chaque ligne de code ;)



Message modifié ( 07-03-2010 09:26 )

@++

MSL  


Offline spoutnikman

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 0
Reply #10 - 07 March 2010, 00:05:19
merci les gars :top:   :top:    :top:  de votre aide merci beaucoup je vais tester tout ca et si y a un bug je vous en parle
a+



Offline tofitouf

  • Legend
  • ******
  • Posts: 1380
  • Karma: 0
Reply #11 - 07 March 2010, 02:46:35
Quote
MartySpaceLines a écrit:
Hello!

J'ai pas regardé en détail (fatigué ;)), mais j'ai juste deux remarques qui pourraient t'être utiles:

- Pour mettre du code C++ sur le forum, tu peux utiliser (comme plus bas) les balises [ cpp ] et [ /cpp ] (sans les

merci pour l'info, c'est top ca....
y'a un mode d'emploi des balises du forum ???


Quote

PS: Là, le code est presque trop aéré...en fait, ici il y a 2x trop d'espace entre les lignes...je sais pas pourquoi ;)


à non là c'est comme j'écris naturellement si c'est plus compact je comprends plus rien.
quand je relis du code je le remt toujours en forma à ma sauce en ajoutant ci et là des espaces. on a tous nos ptites manies :)



Message modifié ( 08-03-2010 10:33 )

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

PC en rade, codage en panne.... Nom de Zeus

Offline MartySpaceLines

  • Legend
  • ******
  • Posts: 1096
  • Karma: 0
Reply #12 - 07 March 2010, 09:28:30
En fait, je l'aime aussi comme ça, mais dans le preview du message il m'ajoutait un saut entre chaque ligne...

Donc: cette version-ci est "parfaite" ( c-à-d adaptée à moi ;)) Oubliez le truc de "trop aéré"


@++

MSL  


Offline Rivs

  • Jr. Member
  • **
  • Posts: 81
  • Karma: 0
Reply #13 - 16 March 2010, 03:10:24

Quote
re les gars j'ai encore un blem
bin voila quand je suis sous code blocks et je lance le programme après que j'aie tapé le choix de ma réponse le texte disant
si la reponse est bonne ou mauvaise apparait suivit du texte de code blocks indiquant que le programme est terminé
mais quand je lance normalement sans code blocs le programme se coupe juste après avoir entré la reponce  y a t'il un moyen
d'éviter ca ?
merci d'avance


En faite faut mettre une pause, pour pas que ça coupe, ça fait longtemps que j'ai pas fait de console lol.
Donc éssai d'afficher une ligne aprés ton resultat "taper sur une touche pour éteindre", puis tu fait un scanf, une foi que tu appui sur une touche, le programme se ferme.

Quand tu n'est pas sous un logiciel de prog, une fois que tous est éxécuté, le programme se termine, à toi de géré ça comme je l'ai dit, car sinon tu véra jamais la réponse à ton choix héhé.


Offline tofitouf

  • Legend
  • ******
  • Posts: 1380
  • Karma: 0
Reply #14 - 16 March 2010, 09:07:06
totalement exact !!! un dernier scanf bidon corrige le pb.


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

PC en rade, codage en panne.... Nom de Zeus

Offline spoutnikman

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 0
Reply #15 - 17 March 2010, 19:53:17
'erci les gras vous m'avez bien aidé :wor: :wor: :wor:



Offline Jim Lovell

  • Global Moderator
  • Legend
  • *****
  • Posts: 1530
  • Country: Belgium be
  • Karma: 31
    • Mon site
Reply #16 - 17 March 2010, 20:00:08
Sinon, il y a aussi le

Code: [Select]
system ("PAUSE");
pour mettre en pause le programme ;)
En fait, la fonction system renvoie aux commandes DOS... (donc uniquement à faire tourner sur windows)

Donc en faisant

Code: [Select]
system ("COLOR 5D");
au début du programme, on peut changer la couleur du programme ;)


Jim Love:love:LL
C'est en se plantant que l'on construit ses racines....


ConneXion

Offline Rivs

  • Jr. Member
  • **
  • Posts: 81
  • Karma: 0
Reply #17 - 17 March 2010, 21:02:49
Oui éxactement, j'y pensais méme plus....
sinon tu fait un while(true) ..... héhé.

« Last Edit: 17 March 2010, 23:09:37 by Rivs »

Offline tofitouf

  • Legend
  • ******
  • Posts: 1380
  • Karma: 0
Reply #18 - 17 March 2010, 21:52:13
Quote
Rivs a écrit:

sinon tu fait un while(true) ..... héhé.

???? explique un peu là car c'est étrange. ca va faire une boucle infinie, ton programme prends toutes les ressources système et ne s'arrête jamais


« Last Edit: 17 March 2010, 23:09:37 by tofitouf »
---------------------------------------------

PC en rade, codage en panne.... Nom de Zeus

Offline Rivs

  • Jr. Member
  • **
  • Posts: 81
  • Karma: 0
Reply #19 - 17 March 2010, 23:09:37
Oui, c'était une blague héhé, boucle qui tourne sans rien faire, ça prend pas spécialement beaucoup de ressource, au moin il véra son resultat si la boucle est aprés, mais ne poura plus l'arrété....

NAn plus sérieusement la pause systém c'est bien, sinon faire le coup du scanf pour que ça marche partout.
Sinon je ne pense pas qu'il y est d'autre solution.

« Last Edit: 17 March 2010, 23:09:37 by Rivs »