Debutant en C

Fermé
ilusion2 Messages postés 5 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 17 juillet 2009 - 11 juil. 2009 à 16:37
ilusion2 Messages postés 5 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 17 juillet 2009 - 17 juil. 2009 à 15:53
Bonjour,
je débute le C et j'ai un petit problème... A chaques fois que je lance mon programme la console windows s'allume mais ne reste pas pour le défilement du programme. J'ai tout de meme essayé la commande getchar() mais rien y fait j'ai l'impression que mon programme s'effectue a une vitesse incroyable..
Sinon voici mon programme j'aimerai qu'il fasse la somme de deux nombres choisis par l'utilisateur mais malheuresement il y a un petit problème. Merci de votre aide et toutes suggestions.

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{int nombre1= 0;
printf("choisis ton nombre\n", nombre1);
scanf("nombre1%d" , &nombre1);
int nombre2= 0;
printf("choisis ton nombre\n", nombre2);
scanf("nombre2%d", nombre2);
int resultat = nombre1 + nombre2;
printf(" %d + %d = %d\n", nombre1, nombre2, resultat);
getchar();
return 0;}

8 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
11 juil. 2009 à 17:35
Salut,

printf("choisis ton nombre\n", nombre1);
Si tu veux afficher nombre1, tu ne dois pas oublier de mettre dans le premier argument ( %d ). Mais ici, en suivant la logique de ton programme, tu n'as pas besoin de l'afficher, donc je te recommanderai d'effacer purement et simplement nombre1.

scanf("nombre1%d" , &nombre1);
Mauvaise utilisation de scanf. Correction : scanf("%d",&nombre1);

int nombre2= 0;
Ce que tu fais est valable avec la norme C99 (et non en ANSI). Mais, ce n'est pas très propre. Généralement, on déclare les variable en tout premier dans un scope. En gros, groupe tes déclarations de variables d'une part et tes instructions d'autre part.

printf("choisis ton nombre\n", nombre2);
scanf("nombre2%d", nombre2);

Même constat que les deux premières remarques.

int resultat = nombre1 + nombre2;
Utilise plutôt : resultat=nombre1+nombre2; et déclare int resultat avec tes autres variables.

getchar();
Ce getchar() va récupérer le '\n' que tu as utilisé lorsque tu as validé l'entrée de ta variable (touche entrée).
Ainsi le programme prendra fin juste après. Donc remets deux getchar() (un pour enlever du buffer clavier le '\n' du scanf("%d",&..) et le second pour attendre avant de provoquer la fin du programme.

Cdlt
2
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
11 juil. 2009 à 17:34
Salut,
je pense que le prb viens plus de la syntaxe:
printf("choisis ton nombre\n", nombre1); //pourquoi mettre nombre1 comme argument du printf?
scanf("nombre1%d" , &nombre1); //pourquoi mettre: nombre1%d
scanf("nombre2%d", nombre2); //il faut preciser l' adresse d'une variable
tu peux essayer cela....
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int nombre1= 0;
printf("choisis ton nombre\n");
scanf("%d" , &nombre1);
int nombre2= 0;
printf("choisis ton nombre\n");
scanf("%d",&nombre2);
printf(" %d + %d = %d\n", nombre1, nombre2, nombre1 + nombre2);
getchar();
return 0;
}
@+
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
11 juil. 2009 à 17:36
Oui, t'as corrigé les petites imperfections du programme, mais tu n'as pas corrigé le fait que la fenêtre se ferme aussitôt.
Il faut doubler le getchar() final car le premier getchar() sera annihilé par le '\n' stocké dans le buffer clavier.

Cdlt
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
12 juil. 2009 à 17:12
Salut,
Voici un programme fonctionnel dont la fenêtre ne se fermera pas à la fin.
Par contre, je n'ai pas mis la gestion d'erreur, du genre si l'utilisateur rentre un nombre trop grand ou rentre des lettres.
#include <stdio.h>

int main(void){
    int nombre1,nombre2;

    printf("choisis ton nombre\n");
    scanf("%d" ,&nombre1);

    printf("choisis ton nombre\n");
    scanf("%d",&nombre2);
    getchar();

    printf("%d + %d = %d\n",nombre1,nombre2,nombre1+nombre2);

    getchar();
    return 0;
}
1
guitarist3 Messages postés 62 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 29 décembre 2012 19
11 juil. 2009 à 17:20
efface "getchar ()" mais appart sa je vois que l'on est au meme niveau sur le site du zéro comme par hasrad on est tous les 2 au mem chapitre sauf que moi je l'ai réussi^^ moi j'utilise Dev C++ car il est plus souvent mis a jour .
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
11 juil. 2009 à 17:21
moi j'utilise Dev C++ car il est plus souvent mis a jour
Euh tu dois confondre. DevC++ n'est plus mis à jour depuis quelques années ^^.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
guitarist3 Messages postés 62 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 29 décembre 2012 19
11 juil. 2009 à 17:23
Fiddy t'utilise quoi alors??
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
11 juil. 2009 à 17:27
Si tu veux absolument un IDE pour la facilité, tu peux utiliser Code::Blocks.
Pour ma part, je préfère utiliser un éditeur de texte + un compilateur séparément. (Vim + Gcc).
0
ilusion2 Messages postés 5 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 17 juillet 2009
12 juil. 2009 à 15:54
Bonjour,
Merci a tous pour vos explications cela me permet de progresser.Encore mille mercis ( surtout a fiddy pour ces explications claires et précises) @+ keep it touch.
0
ilusion2 Messages postés 5 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 17 juillet 2009
12 juil. 2009 à 16:03
Bonjour,
J'ai suivi vos conseils cependant pendant l'execution du programme, il me marque:"Exception non gérée à 0x60996af2 dans calcul.exe : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x00000000."Et ensuite le choix entre arreter ou continuer. Que dois-je faire.Merci de toutes suggestions...
0
ilusion2 Messages postés 5 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 17 juillet 2009
12 juil. 2009 à 16:07
Bonjour,
Je n'ai toujours pas trouvé la cause du message ci-dessus mais le programme donné par chuko n'affiche ce message et marche parfaitement pourquoi ?Merci...
0
ilusion2 Messages postés 5 Date d'inscription samedi 11 juillet 2009 Statut Membre Dernière intervention 17 juillet 2009
17 juil. 2009 à 15:53
Bonjour,

Merci a tous pour vos conseils, j'ai progressé et maintenant je test un programme dont le principe est le suivant:

.L'ordinateur tire au sort un nombre entre 1 et 100
.Il vous demande de deviner le nombre. Vous rentrez donc un nombre entre 1 et 100
.L'ordinateur compare le nombre que vous avez rentré avec le nombre "mystère" qu'il a tiré au sort. Il vous dit si .le nombre mystère est supérieur ou inférieur à celui que vous avez entré
.Puis, l'ordinateur vous redemande le nombre.
... Et il vous indique si le nombre mystère est supérieur ou inférieur.
.Et ainsi de suite, jusqu'à ce que vous ayez trouvé le nombre mystère. (source: le site du zero).

Pour l'instant j'ai debuter mon programme comme ceci:

#include <stdio.h>
#include <stdlib.h>
int main()
{ int nombredujeu=0,nombremystere=10; //ici je declare mes variables

printf("choisis ton nombre\n"); //on demande au joueur de choisir son nombre
scanf("%d\n");//il le choisis
if(nombredujeu<10) //et ici je demande de tester 'si le nombre choisis est< au nombre mystere alors il affiche desole ect...
{
printf("desole c'est plus\n");
}

return 0;
getchar();

}


Pour l'instant c'est juste le test qui permet de dire: voila si c'est plus petit alors ect...
Leproblème est que après avoir compiler avec succes le programme ne s'execute pas comme je le voudrais et affiche le message suivant: Exception non gérée à 0x5fd96af2 dans TP.exe : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x00000000.

J'ai donc 2 questions a vous demander: 1) Que veux dire c emessage
2) Ou est le probleme dans mon programme ?

merci a tous pour votre aide vous etes geniaux!
0