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

[C] petit probleme dans mon programme

-Vlad64-
-Vlad64-
Niveau 14
31 octobre 2006 à 16:35:55

:salut: je suis en train d´apprendre les bases de la programmation en C et je doit faire un petit programme sur dev c++ qui demande a l´utilisateur de saisir 2 nombres entiers qui seront ensuite classés dans l´ordre croissant.
j´ai réussi à le faire sans probleme mais là où ça bug c´est si l´utilisateur entre un nombre décimal ou autre chose qu´un nombre entier donc ce que je voudrais faire c´est afficher un message d´erreur plutot que d´avoir ce bug mais j´y arive pas :(
j´ai essayé differentes possibilités et je comprend pas pourquoi celle là ne marche pas :
printf("\n Entrer un nombre entier \n", x);
scanf("%i",&x) ;
if (!("%i",&x)) {
printf("\n erreur : vous n´avez pas saisi un nombre entier \n");
system("pause");
return; }

la j´ai mis que le morceau correspondant a mon probleme, le reste est juste mais là ca bloque:
je pense que c´est le " if (!("%i",&x)) " qui ne va pas.
en fait je voudrais faire en sorte que si l´utilisateur n´entre pas un nombre entier un message d´erreur s´affiche et mette fin au programme mais apparament je m´y prend mal^^

merci d´avance :svp:

kikou81
kikou81
Niveau 9
31 octobre 2006 à 16:44:22

mais a la limite tu te fais un menu, tu choisi Nombre decimal, et ta variable pour les nombres de cimal sera un float!parce qu´en C, il y a plusieur type de variables,
Les int(entiers), long(entiers) float(decimal)...
Le mieux dans ce genre de prog est d´utiliser un float parce que si l´utilisateur rentre un decimal ca marche et s´il rentre un entier ca marche aussi :ok:

godrik
godrik
Niveau 30
31 octobre 2006 à 17:05:29

mais des fois tu as besoin d´un entier et pas d´un décimal.

scanf("%i",&x) ;
C´est forcément un entier qui est stocké dans la variable x. Peut etre par contre que scanf n´a pas pu lire la valeur. Cela peut etre verifié en consultant la valeur retourné par scanf (regarde ta doc)

if (!("%i",&x)
ca, ca ne veut juste rien dire c´est normal que ca ne fonctionne pas.
De quel type est la variable x ?

mais je penses que la vrai erreur dans tout ca est:
printf("\n Entrer un nombre entier \n", x);
En effet, tu passes un parametre qui ne sera pas utilisé par printf. Et printf est une fonction bien étange, elle prends autant de parametre que néccaissaire. Ce qui fait qu´elle a un comportement étrange avec la pile. Cela ne m´étonerait pas que ton erreur vienne de la.

DantePC
DantePC
Niveau 10
31 octobre 2006 à 19:35:22

Salut. Comme il a été dit, il est possible de vérifier le retour de scanf et ainsi vérifier si la saisie s´est bien passée ou non :

  1. include <stdio.h>

/* Fonction permettant de vider le buffer */
static void purge(void)
{
int c;
while ((c = getchar()) != ´\n´ && c != EOF)
{
}
}

/* Si une erreur est surevenue, on la signale et on purge le buffer pour le vider d´éventuels caractères restants */
static void signalerErreur(void)
{
printf("Une erreur est survenue lors de la saisie, recommencez: ");
fflush(stdout);
/* Utilisé pour être sur que le texte soit émis du fait de la non présence d´un ´\n´ final */
purge();
}

int main(void)
{
int mon_entier = 0, res = 0;
printf("Entrez un entier: ");
fflush(stdout);
/* Tant que la saisie échoue, on signale l´erreur */
while ((res = scanf("%d", &mon_entier)) < 1)
{
signalerErreur();
}
printf("%d\n", mon_entier);
return 0;
}

-Vlad64-
-Vlad64-
Niveau 14
01 novembre 2006 à 13:47:32

merci pour vos réponses mais je suis vraiment débutant et je n´ai pas tout compris, notament la méthode pour vérifier le retour de scanf de DantePC, y´a trop d´élement que je n´ai pas encore vu :(
en tout cas comme le dit godrik il faut bien uniquement des entiers et non des décimaux.
bon je vais mettre mon programme entier(la il fonctionne):

  1. include <stdio.h>

int main()
{
int x,y ;

printf("\n Veuillez saisir un nombre entier \n", x);
scanf("%i",&x) ;
printf("\n Saisissez un autre nombre entier \n", y);
scanf("%i",&y) ;

if (x<y) {
printf("\n La plus petite valeur est %i \n",x);
printf("\n La plus grande valeur est %i \n",y);
}else
if (x>y) {
printf("\n La plus petite valeur est %i \n",y);
printf("\n La plus grande valeur est %i \n",x);
}else
if (x==y) {
printf("\n Les deux valeurs saisis sont identiques \n");
}

system("pause");

return 0 ;
}

voila si on s´en tient a ça il n´y pas de probleme, si l´utilisateur saisi un nombre entier(signé ou non) le programme focntionne correctement.
cependant si il saisi un caractere ou un nombre décimal la ca bug et donc je voudrais rajouté la condition : si le nombre saisi (x) n´est pas un nombre entier afficher "erreur" et terminer le programme.
or a mon niveau cela se traduirai par:
if (!("%i",&x)) {
printf("\n Erreur : vous n´avez pas saisi un nombre entier, veuillez recommencer \n");
system("pause");
return; }

Cependant d´apres Godrik "if (!("%i",&x))
ca ne veut juste rien dire" donc c´est normal que ca ne marche pas^^
mais je ne sais pas du tout comment l´exprimer autrement :non2:
quelqu´un a une idée :svp:

godrik
godrik
Niveau 30
01 novembre 2006 à 15:58:32

en fait si le mec rentre un caractere alors scanf dira qu´il n´a pas réussit a le lire. Un petit bout de code valant mieux qu´un long discours:
http://rafb.net/paste/results/gfVSxX54.html

-Vlad64-
-Vlad64-
Niveau 14
01 novembre 2006 à 16:26:56

:merci:
mais je comprend pas vraiment ce que je doit faire avec ce morecau de code :question:

-Vlad64-
-Vlad64-
Niveau 14
01 novembre 2006 à 16:31:12

la je suis en premiere année de licence(math/physique/info) donc mes connaissances sont vraiment tres limités^^
bon j´ai quand meme essayé d´adapté ce code a mon programme et ca bloque en effet si le caractere saisi n´est pas un nombre entier, mais le probleme maintenant c´est que si j´entre un nombre entier et que je valide ca saute une ligne et ca ne m´affiche pas le printf suivant donc c´est pire qu´avant :(

godrik
godrik
Niveau 30
02 novembre 2006 à 11:22:34

imagine que tu fais un scanf ("%d %d",...)
si tu ecris bien deux entiers alors scanf renverra 2.
si tu ecris un entier et un caractere alors scanf renverra 1
si tu ecris un caractere puis autre chose, alors scanf renverra 0.
tu peux ainsi savoir combien de champs ont été correctement renseigné.

-Vlad64-
-Vlad64-
Niveau 14
02 novembre 2006 à 13:57:11

ah oui, merci j´ai compris :ok:
et grace a ca je peux placer la condition: si scanf ne renvoi pas un entier, afficher un message d´erreur et fermer le programme^^
:merci: pour ton aide

godrik
godrik
Niveau 30
02 novembre 2006 à 14:18:18

Notes bien que cette information est disponible dans la documentation de scanf. Quand tu cherches ce qui se passe quand une fonction ne fonctionne pas, lis toujours la documentation de la fonction. La réponse y est quasiment toujours disponible.

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