Problème bizarre avec GCC (pour débutant)

Problème bizarre avec GCC (pour débutant) - C - Programmation

Marsh Posté le 03-06-2007 à 03:27:05    

Salut tout le monde,  
Voila j’ai un petit souci, qui commence à me casser la tète, avec GCC.
Je veux faire un programme très simple qui se déroule de cette manière :  
1- Je saisi un entier A
2- Je saisi un entier B
3- Je saisi un caractère CARAC
4- J’additionne A et B
5- J’affiche le résultat  
 
Le résultat affiché est alors incorrect ! (il correspond à A...).
J’ai  testé le programme sur Dev C++, là aucun problème, le résultat est correct.
 

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. int main()
  4. {
  5.     int A, B, C;
  6.     char CARAC;
  7.     printf("A : " );
  8.     scanf("%i", &A);
  9.     printf("B : " );
  10.     scanf("%i", &B);
  11.     printf("CARAC : " );
  12.     scanf("%s", &CARAC);
  13.     C = A + B;
  14.     printf("%i \n", C);
  15.     return 0;
  16. }


 
Lorsque je saisie le caractère CARAC avant les entiers A et B, il n’y a en revanche aucun problème.
Quelqu’un pourrait il m’expliquer un peu ? Merci d’avance
 :jap:

Reply

Marsh Posté le 03-06-2007 à 03:27:05   

Reply

Marsh Posté le 03-06-2007 à 09:12:57    

www.chezmoicamarche.com
 
blague à part, évites scanf et préféres y fgets suivi d'une phase de parsing manuel, cf :
 
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/inputs.htm

Reply

Marsh Posté le 03-06-2007 à 17:28:27    

Dans ton source CARAC c'est 1 char. Tu ne peux pas y stocker de chaine, même de chaine d'un seul caractère : une chaine d'un caractère, c'est deux char (le char et le 0 final).
 
Il faut donc soit utiliser %c, soit char CARAC[2].
 
Ensuite utilisé comme ça, scanf ne fait pas de controle sur la longueur de la saisie. Si tu entres plus d'1 caractère, ça va déborder sur le reste de la pile.

Reply

Sujets relatifs:

Leave a Replay

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