CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Un peu d' aide pour un débutant

cruc
cruc
Niveau 8
24 février 2008 à 19:26:06

:salut:

alors voila je me met a la programmation en langage C, et comme je ne connais pas grand chose je viens chercher un peu d' aide,

voici mon programme

  1. include <stdio.h>
  2. include <stdlib.h>

int main(int argc, char *argv[])
{
long Nombre1 = 0, Nombre2 = 0, Resultat = 0;

printf("Bonjour, veuillez taper un premier nombre (entier) afin de l' additionner avec un autre\n");
scanf("%ld", Nombre1);
printf("Merci, tapez ensuite le deuxieme nombre");
scanf("%ld", Nombre2);
printf("Merci bien, voila votre resultat %ld + %ld = %ld", Nombre1, Nombre2, Resultat);

system("PAUSE");
return 0;
}

a mes yeux, il est correct et il arrive a compiler, donc je me demandais pourquoi j' ai ce message quand je tape le premier nombre:
http://img137.imageshack.ck.us/img137/1016/hkcmdzp4.png
( j' ai pris une image sur internet pour voir de quoi je parle c' est pas mon programme .... )
donc voila d' apres vous qu' est-ce que j' ai manqué il y a t' il quelque chose qu' il fasse buguer le logiciel ?

en tout cas, :merci: d' avance pour vos réponses

cruc
cruc
Niveau 8
24 février 2008 à 19:42:44

ah, et aussi je tenais a dire que je bug qu' au début c' est a dire que je tape mon nombre, j'appuye sur entrée et hop message d' erreur

]AmrachaM[
]AmrachaM[
Niveau 10
24 février 2008 à 20:50:41

Il faut que tu fasses : scanf("%ld", &Nombre1);

important le &Nombre1 , pareil pour tout les scanf, pas pour les printf parcontre:).

Voilà bonne chance..

dnob700
dnob700
Niveau 10
24 février 2008 à 21:08:54

"a mes yeux, il est correct et il arrive a compiler,"

Et oui, c'est du C. Contrairement à d'autre langages de programmation, quand un programme compile, ça ne veut pas dire qu'il est correcte. Pour scanf il faut donner à la fonction l'adresse où enregistrer le résultat d'où le petit '&' devant le nom des variables. Mais comme un pointeur et un long c'est la même chose pour le compilo, il ne donne pas de message d'erreur (quoi qu'un bon compilo ferait au moins un warning à cette endroit).

cruc
cruc
Niveau 8
24 février 2008 à 21:24:36

merci beaucoup les gars, désolé jvous avez pas vu avant :) encore merci comme d' hab c' est une erreur d' inattention alala ^^

godrik
godrik
Niveau 30
25 février 2008 à 11:07:42

"(quoi qu'un bon compilo ferait au moins un warning à cette endroit)."
Je ne sais pas bien comment le compilateur peut faire pour detecter cette erreur.
A priori, la declaration de scanf est:
int scanf(char* format, ...);
il ne peut donc pas qu'il faut des pointeurs a partir du format. Cependant j'ai deja vu des compilo me prévenir. Des idées de comment ils font?

Chaos_Clad
Chaos_Clad
Niveau 10
25 février 2008 à 12:12:38

Un pointeur et un long c'est la même chose pour le compilo ?
Euh... ? oO

________________________________________
Ma vidéo du moment :
http://vids.myspace.com/index.cfm?fuseaction=vids.individual&amp;videoid=27196783

guyver2
guyver2
Niveau 10
25 février 2008 à 13:03:23

@Chaos_clad

le truc c'est que dans la signature de scanf, le terme "..." ne signifie pas forcement "pointeur". Toi tu le sait parce que tu sais comment marche scanf mais le compilo ne peux, a priori, pas le deviner

Chaos_Clad
Chaos_Clad
Niveau 10
25 février 2008 à 14:13:29

Ah ok je croyais que dnob parlait de manière générale ^^ J'ai pas l'habitude de ces "...", je les ai encore jamais utilisée :o))

________________________________________
Ma vidéo du moment :
http://vids.myspace.com/index.cfm?fuseaction=vids.individual&amp;videoid=27196783

sangohan55
sangohan55
Niveau 10
25 février 2008 à 15:37:21

"important le &Nombre1 , pareil pour tout les scanf"

si tu envoies un pointeur en paramètre pas besoin de mettre le '&'.

dnob700
dnob700
Niveau 10
27 février 2008 à 00:32:07

godrik : c'est de la magie au cas par cas. Je ne sais pas pour scanf, mais pour printf en tout cas gcc avec les bonnes options (-pedantic -Wall -Os (qui active des warning qui n'ont paslieu sinon, je ne sais pas pourquoi) peut-être) se plaint si les types passées en argument ne correspondent pas à la chaîne de format. Et je suppose qu'il doit faire la même chose pour scanf.

On est très loin de OCaml, mais il peut faire quelques vérifications simples (d'ailleurs les chaînes de format de caml sont aussi une espèce de magie assez infâme).

Je ne sais pas ce que fait VC là dessus, ça fait longtemps que je ne m'en suis pas servi.

À noter, et c'est important, que c'est la toute première fois sur ce forum que j'emploie la périphrase "un bon compilo" pour désigner GCC, alors que jusqu'à aujourd'hui je m'en suis toujours servi dans le but express de désigner VC++ ou ICC par opposition à GCC. Comme quoi, tout le monde change.

bogdanchevrier
bogdanchevrier
Niveau 8
28 février 2008 à 21:39:46

j'ajouterai aussi qu'apres la second scanf, tu doit mettre que "resultat = nombre1 + nombre 2, si tu veut qu'il additionne les nombres.

Ikki_2504
Ikki_2504
Niveau 11
10 mars 2008 à 20:45:37

A chaque fois que t'as cette jolie boite de dialogue "Machin a rencontré un problème et doit fermer", y'a de fortes chances que y'ai un problème d'adresse. C'est ton OS qui gère les adresses, tu peux pas t'amuser à les changer. S'il voit qu'un programme tente d'écrire à une adresse qui ne lui est pas allouée, l'OS bloque tout : c'est ce qui est arrivé ici avec l'oubli du "&" du scanf.
Vérifie les histoires de "&" et d'"*" quand t'as ce genre de bug :)

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment