Debutant en C

ilusion2 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
ilusion2 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   378
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   19
 
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   19
 
Fiddy t'utilise quoi alors??
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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