Débutant en C - besoin d'aide

Bonjour à tous

Voilà je débute en C, mais la ya quelque chose que je comprend pas :neutre: , mais alors pas du tout :confused: , j’ai ca comme code

et ca me donne
http://img172.imageshack.us/img172/1750/calculatricekt4.jpg

Ce que je comprend pas c’est au niveau de mes variables nombre1, nombre2 et resultat, je rentre 5 et 3, et je me retrouve avec 2293616 + 2293612 = 2293620
alors que normalement je devais avoir 5 + 3 = 8 (je suis trop fort en calcul de tête :sarcastic: )

Donc si quelqu’un peut me dire ou je me suis gouré car la j’avoue être pommé.

Merci d’avance à tous


#include <stdio.h>
#include <stdlib.h>

int main()
{
    int resultat = 0, nombre1 = 0, nombre2 = 0, reste = 0, menu = 0;
    printf("=== Menu ===\n\n1. Addition\n2. Soustraction\n3. Multiplication\n4. Division\n\n");
    printf("Choix du menu: ");
    scanf("%ld", &menu);
    switch (menu)
{
case 1:
    printf("=== Addition ===\n\n");
    printf("Premier nombre : ");
    scanf("%ld", &nombre1);
    printf("Deuxieme nombre : ");
    scanf("%ld", &nombre2);
    resultat = nombre1 + nombre2;
    printf("%ld + %ld = %ld\n\n", nombre1, nombre2, resultat);
    break;
case 2:
    printf("=== Soustraction ===\n\n");
    printf("Premier nombre : ");
    scanf("%ld", &nombre1);
    printf("Deuxieme nomre : ");
    scanf("%ld", &nombre2);
    resultat = nombre1 - nombre2;
    printf("%ld - %ld = %ld\n\n", nombre1, nombre2, resultat);
    break;
case 3:
    printf("=== Multiplication ===\n\n");
    printf("Premier nombre : ");
    scanf("%ld", &nombre1);
    printf("Deuxieme nomre : ");
    scanf("%ld", &nombre2);
    resultat = nombre1 * nombre2;
    printf("%ld x %ld = %ld\n\n", nombre1, nombre2, resultat);
    break;
case 4:
    printf("=== Division ===\n\n");
    printf("Premier nombre : ");
    scanf("%ld", &nombre1);
    printf("Deuxieme nomre : ");
    scanf("%ld", &nombre2);
    resultat = nombre1 / nombre2;
    //resultat = nombre1 % nombre2;
    printf("%ld + %ld = %ld , R = %ld\n\n", nombre1, nombre2, resultat, reste);
    break;
default:
    printf("Error\n\n");
}




    system("PAUSE");
return 0;
}

Salut,

le problème semble venir de tes printf()

Tu affiches l’adresse de la variable et non sa valeur, utilise les de cette façon:

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

Sinon j’ai vu une erreur dans ta division, tu mets le reste dans la variable résultat :wink:

EDIT: grilled de 2 sec :grrr:

Et pour un petit menu comme celui la avec 4 possiblitiés, pourquoi déclarer les variables en double ? un int suffit largement :wink:

Mais le monsieur te l’a deja corriger :stuck_out_tongue:

Good luck pour les tuto des zer0 (je ne me trompe pas c’est bien cela ?)

effectivement made in zero :smiley:

Ca serait pas plutôt :

long resultat = 0, nombre1 = 0, nombre2 = 0, reste = 0, menu = 0;

ou alors

%d au lieu de %ld …

???

Bah tout dépend de quel type de donnée il a besoin, s’il compte faire du calcul scientifique, double es approprié, si c’est juste pour faire des calculs d’entiers, l’int suffit.

Oui mais ce que je voulais dire c’est qua :

int truc ;
scanf( "%ld", &truc) ;

ça risque de donner des trucs bizarres (en général int = 16 bits, long = 32 bits) …

Un int c’est du 32 bits :slight_smile:
Son erreur venait de printf car il affichait l’adresse de la variable et non pas le contenu.

Ah non!

un int ça peut être du 32 bits!:slight_smile:

sizeof(short int) <= sizeof(int) <= sizeof(long)

Mais si j’ai bon souvenir rien ne dit que ça doit être 4 octets :slight_smile: (même si dans l’absolu ça l’est)

Je la voyais venir celle la, je parle de notre problème donc dans notre contexte, il s’agit de 32 bits, je le vois mal coder en C sur un C64.

:slight_smile: On n’en est pas sûr non plus :wink:

(mode paranoïa on)