quelques question ?

quelques question ? - C++ - Programmation

Marsh Posté le 21-12-2005 à 15:09:25    

oubliez ce premier post regardé directement le 3eme.
 

Citation :


Voici mon premier "programme" en c++ sans aide  :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.     int a=9*23;
  6.     int b=250/5;
  7.     int c=a+b;
  8.     int resu;
  9.         do
  10.         {   
  11.        
  12.           printf("La valeur de a est de %i\nLa valeur de b est de %i\nQuelle est la valeur de a+b : ",a,b);
  13.           scanf("%i",&resu);
  14.      
  15.           if(resu==c)
  16.           {
  17.           printf("c'est bien vous savez compter\n" );
  18.           }
  19.           else
  20.           {
  21.           printf("C'est pas correct WTF \?\!\!\?\ try again \!n" );     
  22.           }
  23.        
  24.         }
  25.         while(resu!=c);
  26.  
  27.     system("pause" ); //maintenant return 0;     
  28. }


Je voudrai savoir si il est "optimisé" sinon comment faites vous ? comment eviter le bug de la boucle infini quand ont tape autre chose qu'un chiffre ?

Message cité 1 fois
Message édité par icepiro le 23-12-2005 à 15:31:31
Reply

Marsh Posté le 21-12-2005 à 15:09:25   

Reply

Marsh Posté le 21-12-2005 à 15:17:26    

1 - vire le "system("pause" )"
2- retourne quelque chose (genre "return 0;" a la fin)
3- normalement pas de bug de boucle infinie. essaie un fflush(stdin);

Reply

Marsh Posté le 21-12-2005 à 15:38:24    

teste le retour de ton scanf ... :o mais .... on est dans la catégorie C++, ici, et ca, c'est du C, donc ce serait pas mal si tu pouvais déplacer ton topic

Reply

Marsh Posté le 21-12-2005 à 15:47:45    

testé ca marche mais j'ai toujours ce probleme de boucle mais pourquoi return a la place du system("pause" ) ?

Reply

Marsh Posté le 21-12-2005 à 16:18:56    

tu le testes comment, ton scanf ? :o
 
le system("pause" ) est quelque chose d'inutile, voire d'agaçant pour quelqu'un qui voudra utiliser ton programme en lignes de commandes, d'ailleurs, si tu ne veux pas que la fenêtre se ferme d'elle-même, tu ferais mieux de lancer ton prog en lignes de commandes, justement, plutôt que d'inclure du code de ce genre
Et pour le return, been, en toute logique, tu déclares ta fonction main comme retournant un int (et c'est une obligation de la norme, d'ailleurs), donc il est logique de mettre un return pour cette fonction, n'est-ce pas ?
 
Edit : ca y est, j'ouvre les yeux ... vérifie ton format de scanf ...
(Edit2 : ce n'est pas pour autant que tester le retour de scanf est facultatif, d'ailleurs)

Message cité 1 fois
Message édité par theshockwave le 21-12-2005 à 16:21:26
Reply

Marsh Posté le 21-12-2005 à 16:44:20    

theshockwave a écrit :


 
le system("pause" ) est quelque chose d'inutile, voire d'agaçant pour quelqu'un qui voudra utiliser ton programme en lignes de commandes, d'ailleurs, si tu ne veux pas que la fenêtre se ferme d'elle-même, tu ferais mieux de lancer ton prog en lignes de commandes, justement, plutôt que d'inclure du code de ce genre
Et pour le return, been, en toute logique, tu déclares ta fonction main comme retournant un int (et c'est une obligation de la norme, d'ailleurs), donc il est logique de mettre un return pour cette fonction, n'est-ce pas ?
 
Edit : ca y est, j'ouvre les yeux ... vérifie ton format de scanf ...
(Edit2 : ce n'est pas pour autant que tester le retour de scanf est facultatif, d'ailleurs)


 
1) je viend de remarqué qqchose si je met un return 0; la dosbox se ferme avant d'afficher la phrase "c'est bien ...." quand ont a bon. pas avec system...
 
2) j'ai essayer tout un tat format (en laissant la logique de coté) sa marche pas :(


Message édité par icepiro le 21-12-2005 à 16:46:03
Reply

Marsh Posté le 21-12-2005 à 16:51:25    

  • oublie scanf(), ce n'est pas une fonction triviale, contrairement à ce que pense apparemment la trop grande majorité de professeurs. Utilise fgets() pour la saisie, et strtol() pour la conversion en nombre (recherche l'aide avec la commande man sous unixoïdes, ou dans Google).


  • system("pause" ) est tout à fait valide... si, et seulement si, tu travailles sur un système qui connait une commande "pause". En l'occurrence, tu dois être sous Windows. Sous un autre OS, mettons Linux par exemple, ça ne fonctionnerait pas. Cf. l'aide de la commande system()


  • ta fonction main() retourne un entier. Un appel à "return" est donc obligatoire, et si ton compilateur ne te l'a pas signalé, c'est que son réglage est trop permissif. Essaie de consulter l'aide de ton compilateur pour ajouter des options le rendant plus strict. Ca t'obligera à écrire du code plus propre


  • "return 0" parce qu'en général, sur un système "0" signifie "pas d'erreur", et toute autre valeur est un code d'erreur. Ce n'est pas systématique, pour être sûr de retourner le bon code, utilise EXIT_SUCCESS et EXIT_FAILURE, définis dans stdlib.h


Message édité par Elmoricq le 21-12-2005 à 16:51:39
Reply

Marsh Posté le 21-12-2005 à 16:57:57    

Citation :

1) je viend de remarqué qqchose si je met un return 0; la dosbox se ferme avant d'afficher la phrase "c'est bien ...." quand ont a bon. pas avec system...


non, ca ne se ferme pas avant ... la durée de vie de ta console dos est la même que celle de ton programme, donc si ton prog se ferme, la fenêtre aussi. D'où ma suggestion d'ouvrir une fenêtre de commandes MS-DOS qui va te permettre de lancer ton programme dans son contexte (et ainsi de garder trace du résultat à l'écran)
 

Citation :

2) j'ai essayer tout un tat format (en laissant la logique de coté) sa marche pas :(


 
au lieu de tenter au hasard, regarde les documentations à ce sujet, ce n'est pas comme ca que tu arriveras à t'en sortir. Qui plus est, la doc sur ce genre de fonctionnalités de base est vraiment facile à trouver. Je t'aide ? Google -> man + nom de la fonction

Reply

Marsh Posté le 22-12-2005 à 23:05:32    

icepiro a écrit :

Voici mon premier "programme" en c++ sans aide  :


Si c'est du C++

  • Il est obsolète
  • Tu t'es trompé de forum


Si c'est du C, ben c'est pas du C++...
<...>
 

Citation :

Je voudrai savoir si il est "optimisé" sinon comment faites vous ? comment eviter le bug de la boucle infini quand ont tape autre chose qu'un chiffre ?


Ton code commenté et partiellement corrigé...

Code :
  1. /* #line 1 */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6.    int a = 9 * 23;
  7.    int b = 250 / 5;
  8.    int c = a + b;
  9.    int resu;
  10.    do
  11.    {
  12.       /* -ed-
  13.       printf("La valeur de a est de %i\nLa valeur de b est de %i\nQuelle est la valeur de a+b : ", a, b);
  14.       Ligne trop longue (76 max). Il est logique de faire la cesure au '\n'.
  15.                 scanf("%i",&resu);
  16.        
  17.       Comme d'habitude, mauvaise utilisation de scanf(). Cette fonction n'est pas du tout  
  18.       pour les debutants. Preferer fgets() et strtol(), par exemple.
  19.       */
  20. {
  21.       int n;
  22.       do
  23.       {
  24.          printf("La valeur de a est de %i\n"
  25.                 "La valeur de b est de %i\n"
  26.                 "Quelle est la valeur de a+b : ", a, b);
  27.                
  28.          n = scanf("%i", &resu);
  29.          if (n != 1)
  30.          {
  31.             /* purge */
  32.             int car;
  33.             while ((car = getchar()) != '\n' && car != EOF)
  34.             {
  35.             }
  36.             printf ("input error\n" );
  37.          }
  38.       }
  39.       while (n != 1);
  40. }
  41.       if (resu == c)
  42.       {
  43.          printf("c'est bien vous savez compter\n" );
  44.       }
  45.       else
  46.       {
  47.          /* -ed-
  48.                    printf("C'est pas correct WTF \?\!\!\?\ try again \!n" );       
  49.          '\?', '\!' et '\ ', ça n'existe pas. ? et ! sont corrects.
  50.          La ligne devrait se terminer par un '\n'
  51.          */
  52.          printf("C'est pas correct WTF ?!!? try again !\n" );
  53.       }
  54.    }
  55.    while (resu != c)      ;
  56. /* -ed- et le return 0 ? Pourquoi est-il commente ? */
  57.    system("pause" ); //maintenant return 0;
  58.  
  59.    return 0;
  60. }

Message cité 1 fois
Message édité par Emmanuel Delahaye le 22-12-2005 à 23:11:25

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 22-12-2005 à 23:08:09    

durkheim a écrit :

1 - vire le "system("pause" )"
2- retourne quelque chose (genre "return 0;" a la fin)
3- normalement pas de bug de boucle infinie. essaie un fflush(stdin);


1 - Pourquoi si il y en a besoin ? Ok, c'est pas portable, mais ça dépanne...
2 - OK
3 - Ben si. scanf() est ici utilisé à la hache, au moindre faux pas, c'est le bug. fflush() n'est défini que sur le flux sortants.
 
T'es sûr que tu sais de quoi tu parles ?


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 22-12-2005 à 23:08:09   

Reply

Marsh Posté le 23-12-2005 à 00:01:29    

durkheim a écrit :

1 - vire le "system("pause" )"
2- retourne quelque chose (genre "return 0;" a la fin)
3- normalement pas de bug de boucle infinie. essaie un fflush(stdin);


on en tient un \o/


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-12-2005 à 00:03:30    

au bûcher :o


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 23-12-2005 à 00:04:18    

Emmanuel Delahaye a écrit :


Ton code commenté et partiellement corrigé...


je suis toujours admiratif de voir que tu passes du temps à corriger et commenter le code des intervenants. franchement, c'est très rare une telle "conscience professionnelle" :jap: :jap:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-12-2005 à 02:45:37    

Merci de m'aider j'ai essayer de refaire un prog avec des veilles et bref conaissance aprise en cour il y 3 ans  mais vu que j'ai du mal sans livre je m'en suis acheté un ( le language c++ de jesse liberty campuspress).
 
  Pour evité de créé un deuxième topic j'ai une question. quand je tape un morceau de code dans un exercice donner j'ai une erreur alors que je tape EXACTEMENT ce qui est écrit et j'ai l'érreur suivante :
 
 C:\Dev-Cpp\main.cpp In function `int main()':  
6 C:\Dev-Cpp\main.cpp `end1' undeclared (first use this function)  
  (Each undeclared identifier is reported only once for each function it appears in.)  
8 C:\Dev-Cpp\main.cpp `end' undeclared (first use this function)  
 C:\Dev-Cpp\Makefile.win [Build Error]  [main.o] Error 1  
 
voici l'exercice :

Code :
  1. #include <iostream>
  2. int main()
  3. {
  4.     int x = 5;
  5.     int y = 7;   
  6.     std::cout << end1;
  7.     std::cout << x + y << " " << x * y;
  8.     std::cout << end;
  9.     return 0;
  10. }


 
Si quelqu'un peut m'aide pour m'eviter une calvicie précosse ...

Message cité 2 fois
Message édité par icepiro le 23-12-2005 à 03:02:37
Reply

Marsh Posté le 23-12-2005 à 08:54:00    

std::endl

Reply

Marsh Posté le 23-12-2005 à 12:09:28    

icepiro a écrit :

Merci de m'aider j'ai essayer de refaire un prog avec des veilles et bref conaissance aprise en cour il y 3 ans  mais vu que j'ai du mal sans livre je m'en suis acheté un ( le language c++ de jesse liberty campuspress).


Alors c'est "Le langage C++" ou "The C++ language"...
 
Mais pour apprendre le C, ça va pas le faire. Alors tu as probablement du te tromper de branche du forum...
 
MODO : -> C++
 
Ceci dit, si le code que tu a montré est exactement celui du livre, sa place est dans la cheminée (et pas pour attendre le Père Noël, mais pour ne bonne flambée !)


Message édité par Emmanuel Delahaye le 23-12-2005 à 12:11:40

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 23-12-2005 à 14:18:07    

Emmanuel Delahaye a écrit :

fflush() n'est défini que sur le flux sortants.


Harkonnen a écrit :

on en tient un \o/



 
 
Oh la^^
 
Bon ben apparemment je sais pas de quoi je parle, mais mon prof de C++ non plus, c'est de lui que je tiens le fait de vider le buffer avant un scanf... Alors, pourquoi c'est mal?


Message édité par durkheim le 23-12-2005 à 14:19:36
Reply

Marsh Posté le 23-12-2005 à 14:19:27    

comme on vient de te le dire, c'est un comportement indéfini, donc suivant le compilateur ca peut faire ce que tu souhaites, ne rien faire ou carrément planter ton appli à l'exécution [:pingouino]

Reply

Marsh Posté le 23-12-2005 à 14:19:49    

paske ca a aucun sens, et si ton prof de c++ vous dit d'utiliser scanf c'est qu'il y a un probleme [:petrus75] (par contre avant le scanf un fflush sur stdout est parfois utile pour un affichage correct)

Reply

Marsh Posté le 23-12-2005 à 14:22:35    

Au temps pour moi, c'était sans doute stdout.

Reply

Marsh Posté le 23-12-2005 à 14:22:47    

Si on devait fusiller chaque professeur utilisant scanf() à tort et à travers, on résoudrait le problème de surpopulation mondiale. [:dawa]

Reply

Marsh Posté le 23-12-2005 à 14:53:38    

Citation :


Alors c'est "Le langage C++" ou "The C++ language"...
 
Mais pour apprendre le C, ça va pas le faire. Alors tu as probablement du te tromper de branche du forum...
 
Ceci dit, si le code que tu a montré est exactement celui du livre, sa place est dans la cheminée (et pas pour attendre le Père Noël, mais pour ne bonne flambée !)


   
  C'est bien le langage c++ en fait j'ai commencé par du c mais vu que le bouquin que j'ai acheter reprend tout les bases je me suis dit pourquoi pas directement le c++.
  Je me suis renseigné avant de l'acheter et je n'est pas vue de critique négative sur ce livre au contraire. Un feu de 28 €  :cry:  
 
A la fin du bouquin il met les résultats de l'exo (que j'avais à peu près compris -le but étant de deviné ce que ca va faire et de compilé pour verifier-)
je cite : " Ce programme initialise deux variables entierès (nombres) puis en affiche la somme, 12, et le produit, 35.
 


Message édité par icepiro le 24-12-2005 à 13:48:33
Reply

Marsh Posté le 23-12-2005 à 14:55:59    

ce serait surprenant que ton livre ait une faute d'orthographe dans son titre, tout de même :o
 
et ce qui est contesté ici, c'est la volonté absurde de chercher à apprendre le C avec un bouquin de C++ ou inversement

Reply

Marsh Posté le 23-12-2005 à 15:19:48    

Citation :

ce qui est contesté ici, c'est la volonté absurde de chercher à apprendre le C avec un bouquin de C++ ou inversement


 
  Non non je veux et j'ai toujours voulu apprendre le c++. Le problème etant que je me rappel de vieux cour de C et je fait un mélange (comme les entêtes)
c'est la résond pour laquelle je me suis acheté un bouquin facile et qui reprend tout  dont le titre orginal est :c++ in 21 days. Que j'en chi, que je fasse des erreurs, que je mélange les choses  je m'en fout j'ai du temp et je suis passient (merde j'écrit une lettre de motiv ou quoi ?).  
  J'adore la prog et ca m'a toujours frustré de ne pas connaitre ce langage. c'est pour ca que je demande de l'aide sur cette exo car tant que j'aurais pas compris pourquoi ca fonctionne pas je resterai a la page 24(hohoho) du livre. Au fait mon compilateur c'est Dev-c++ dernière version.
 

Citation :

au lieu de tenter au hasard, regarde les documentations à ce sujet, ce n'est pas comme ca que tu arriveras à t'en sortir. Qui plus est, la doc sur ce genre de fonctionnalités de base est vraiment facile à trouver. Je t'aide ? Google -> man + nom de la fonction


 
Je t'en veux pas theshock mais c'est la premiere chose que j'avais fait et c'est la ou je me suis dit merde faudrai p'têtre que je reprenne les bases je vai me renseigné sur le net ... tiend c'est un bouquin de c++ bien noté, bonne critique verifion d'autre sources lui aussi il aime bien ? c'est partit..

Message cité 1 fois
Message édité par icepiro le 23-12-2005 à 15:27:42
Reply

Marsh Posté le 23-12-2005 à 15:22:36    

je t'avertis tout de suite que tu ne connaîtras jamais le C++ en 21 jours, pas la peine de rêver.
 
Et la meilleure chose que tu puisses faire pour apprendre le C++, c'est d'oublier complètement ce que tu te rappelles du C
 
donc si cet exo était censé être fait en C++, il aurait fallu le poster dans la catégorie prévue à cet effet (tu peux encore le déplacer en éditant ton premier message) est on t'aurait aussi lynché sur place au vu de ce que tu as écrit

Reply

Marsh Posté le 23-12-2005 à 15:39:22    

Petite précision le titre du livre que je vous est donné est la nouvelle version (850 page contre 430 pour l'ancienne) le titre du livre de l'original est l'intro c++ meme editeur meme ecrivain plus de renseignement : http://c.developpez.com/livres/

Reply

Marsh Posté le 23-12-2005 à 15:41:18    

oui, et bien ... commence à programmer en C++, alors [:pingouino]
 
edit : en clair : oublie scanf, printf et ces autres immondices qui viennent des langages préhistoriques :o (troll inside)

Message cité 1 fois
Message édité par theshockwave le 23-12-2005 à 15:42:17
Reply

Marsh Posté le 23-12-2005 à 16:01:28    

theshockwave a écrit :

edit : en clair : oublie scanf, printf et ces autres immondices qui viennent des langages préhistoriques :o (troll inside)


 
D'un autre côté, c'est bien pratique printf() pour sortir des données dans un format fixe [:klem3i1]

Reply

Marsh Posté le 23-12-2005 à 16:02:02    

Elmoricq a écrit :

D'un autre côté, c'est bien pratique printf() pour sortir des données dans un format fixe [:klem3i1]


 
la chui d'accord, c'est infiniment plus simple a utiliser que les << a tout va des streams

Reply

Marsh Posté le 23-12-2005 à 16:04:07    

ben, rien ne vous empêche de refaire ca en C++, hein ... d'ailleurs, Taz avait posté un lien vers une classe faite pour le formatage de strings en C++ (et boost propose des outils pour ca ...)

Reply

Marsh Posté le 23-12-2005 à 16:04:36    

ouais mais printf c'est stdart [:sinking]

Reply

Marsh Posté le 23-12-2005 à 16:55:45    

si quelqu'un pourrai me dire pourquoi mon bout de code ne fonctionne pas c'est cool merci :)

Reply

Marsh Posté le 24-12-2005 à 02:00:59    

icepiro a écrit :

Citation :

ce qui est contesté ici, c'est la volonté absurde de chercher à apprendre le C avec un bouquin de C++ ou inversement


 
  Non non je veux et j'ai toujours voulu apprendre le c++. Le problème etant que je me rappel de vieux cour de C et je fait un mélange (comme les entêtes)
c'est la résond pour laquelle je me suis acheté un bouquin facile et qui reprend tout  dont le titre orginal est :c++ in 21 days. Que j'en chi, que je fasse des erreurs, que je mélange les choses  je m'en fout j'ai du temp et je suis passient (merde j'écrit une lettre de motiv ou quoi ?). [...]
 


 
[:dark-imperator][:autobot] [:kiki]  
 
 

icepiro a écrit :

Merci de m'aider j'ai essayer de refaire un prog avec des veilles et bref conaissance aprise en cour il y 3 ans  mais vu que j'ai du mal sans livre je m'en suis acheté un ( le language c++ de jesse liberty campuspress).
 
  Pour evité de créé un deuxième topic j'ai une question. quand je tape un morceau de code dans un exercice donner j'ai une erreur alors que je tape EXACTEMENT ce qui est écrit et j'ai l'érreur suivante :
 
 C:\Dev-Cpp\main.cpp In function `int main()':  
6 C:\Dev-Cpp\main.cpp `end1' undeclared (first use this function)  
  (Each undeclared identifier is reported only once for each function it appears in.)  
8 C:\Dev-Cpp\main.cpp `end' undeclared (first use this function)  
 C:\Dev-Cpp\Makefile.win [Build Error]  [main.o] Error 1  
 
voici l'exercice :

Code :
  1. #include <iostream>
  2. int main()
  3. {
  4.     int x = 5;
  5.     int y = 7;   
  6.     std::cout << end1;
  7.     std::cout << x + y << " " << x * y;
  8.     std::cout << end;
  9.     return 0;
  10. }


 
Si quelqu'un peut m'aide pour m'eviter une calvicie précosse ...


 
 
alors...pour commencer la deuxieme erreur de dit que "end" ca existe pas...c'est endl
Ce qui rejoint la premiere erreur qui te dit que end1 n'existe pas non plus....c'est toujours endl.
Et de plus si tu as pas un "using namespace std" au debut de ton code ca pourrait etre pas mal de mettre std::endl

Reply

Marsh Posté le 24-12-2005 à 12:23:29    

Citation :


alors...pour commencer la deuxieme erreur de dit que "end" ca existe pas...c'est endl
Ce qui rejoint la premiere erreur qui te dit que end1 n'existe pas non plus....c'est toujours endl.
Et de plus si tu as pas un "using namespace std" au debut de ton code ca pourrait etre pas mal de mettre std::endl


 
Merci ca fonctionne mais ca me laisse perplexe le fait que dans un bouquin il te mette un exo avec des erreurs  :fou:  
Pour les fautes c'est plus sympa en mp, je le sai que je suis mauvais :ange:
 
edit: d'accord je viend de comprendre endl c'est pour end line donc forcement pas de 1 mais ces con sur mon livre ils me donnent un exo et ils expliquent après. par contre pour using spacename std eux il ne le définisse pas allez savoir moi sa ne marche pas sans.(google my friend)

Message cité 2 fois
Message édité par icepiro le 24-12-2005 à 13:11:47
Reply

Marsh Posté le 24-12-2005 à 13:35:34    

icepiro a écrit :

par contre pour using spacename std eux il ne le définisse pas allez savoir moi sa ne marche pas sans.(google my friend)


si tu spécifies explicitement le namespace, tu n'as pas besoin du using namespace


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 24-12-2005 à 13:43:01    

ok c'est bon j'ai compris la prochaine fois je lirai le chapitre suivant avant de faire l'exercice du chapitre precedant c'est fou ca !

Reply

Marsh Posté le 24-12-2005 à 21:44:28    

icepiro a écrit :

(google my friend)


Voila une reaction qu'elle est bonne  [:bananav]  
Et Noyeux Joel bien sur  :bounce:


Message édité par gocho le 24-12-2005 à 21:44:46
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed