Correction programme - Problème de TYPE
Résolu/Fermé
Gouag
Messages postés
32
Date d'inscription
vendredi 22 novembre 2013
Statut
Membre
Dernière intervention
28 mars 2014
-
Modifié par Gouag le 27/02/2014 à 21:27
Gouag Messages postés 32 Date d'inscription vendredi 22 novembre 2013 Statut Membre Dernière intervention 28 mars 2014 - 28 févr. 2014 à 17:33
Gouag Messages postés 32 Date d'inscription vendredi 22 novembre 2013 Statut Membre Dernière intervention 28 mars 2014 - 28 févr. 2014 à 17:33
A voir également:
- Correction programme - Problème de TYPE
- Programme demarrage windows 10 - Guide
- Correction orthographe - Guide
- Désinstaller programme windows 10 - Guide
- Clear type - Guide
3 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
27 févr. 2014 à 21:53
27 févr. 2014 à 21:53
Bonjour,
J'ai juste regardé la partie scanf().
Seul le dernier programme est correct.
Le premier fonctionne peut-être mais est faux. Le deuxième est presque correcte en revanche.
Explication :
char reponse;
scanf("%s",&reponse);
%s est à utiliser avec un pointeur sur une zone mémoire. Donc reponse doit être de type char *reponse=malloc(...); ou char reponse[2];
Sinon, tu vas récrire une partie de la pile et cela peut provoquer des erreurs inattendues. Dans ce cas, il faudra mettre : scanf("%s",reponse); (et non &reponse;).
char reponse;
scanf("%c",&reponse);
Ici c'est bon. Mais, il y aura un '\n' qui sera stocké dans le buffer clavier lorsque tu appuieras sur la touche entrée pour valider la saisie. De fait, la valeur retournée lors du scanf("%c",...) suivant sera le même '\n'. D'où le problème. Il suffit de glisser un petit getchar(); juste après chaque scanf("%c",&reponse);
Le dernier (scanf("%d",...)) est une saisie par nombre. C'est plus simple à gérer lorsqu'on n'est pas à l'aise avec les notions abordées ci-dessus.
Cdlt,
J'ai juste regardé la partie scanf().
Seul le dernier programme est correct.
Le premier fonctionne peut-être mais est faux. Le deuxième est presque correcte en revanche.
Explication :
char reponse;
scanf("%s",&reponse);
%s est à utiliser avec un pointeur sur une zone mémoire. Donc reponse doit être de type char *reponse=malloc(...); ou char reponse[2];
Sinon, tu vas récrire une partie de la pile et cela peut provoquer des erreurs inattendues. Dans ce cas, il faudra mettre : scanf("%s",reponse); (et non &reponse;).
char reponse;
scanf("%c",&reponse);
Ici c'est bon. Mais, il y aura un '\n' qui sera stocké dans le buffer clavier lorsque tu appuieras sur la touche entrée pour valider la saisie. De fait, la valeur retournée lors du scanf("%c",...) suivant sera le même '\n'. D'où le problème. Il suffit de glisser un petit getchar(); juste après chaque scanf("%c",&reponse);
Le dernier (scanf("%d",...)) est une saisie par nombre. C'est plus simple à gérer lorsqu'on n'est pas à l'aise avec les notions abordées ci-dessus.
Cdlt,
Gouag
Messages postés
32
Date d'inscription
vendredi 22 novembre 2013
Statut
Membre
Dernière intervention
28 mars 2014
28 févr. 2014 à 06:07
28 févr. 2014 à 06:07
Merci beaucoup.
Cdlt
Cdlt
Gouag
Messages postés
32
Date d'inscription
vendredi 22 novembre 2013
Statut
Membre
Dernière intervention
28 mars 2014
28 févr. 2014 à 17:33
28 févr. 2014 à 17:33
Re,
J'ai suivi les instructions données ici:
char reponse;
scanf("%c",&reponse);
Ici c'est bon. Mais, il y aura un '\n' qui sera stocké dans le buffer clavier lorsque tu appuieras sur la touche entrée pour valider la saisie. De fait, la valeur retournée lors du scanf("%c",...) suivant sera le même '\n'. D'où le problème. Il suffit de glisser un petit getchar(); juste après chaque scanf("%c",&reponse);
mais ça ne fonctionne toujours pas !?
J'ai suivi les instructions données ici:
char reponse;
scanf("%c",&reponse);
Ici c'est bon. Mais, il y aura un '\n' qui sera stocké dans le buffer clavier lorsque tu appuieras sur la touche entrée pour valider la saisie. De fait, la valeur retournée lors du scanf("%c",...) suivant sera le même '\n'. D'où le problème. Il suffit de glisser un petit getchar(); juste après chaque scanf("%c",&reponse);
mais ça ne fonctionne toujours pas !?
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(int argc, char *argv[]) { int nombresaisi,nombreMystere,compteur=1,MAX,MIN,niveau; char reponse,o; printf("Voulez vous jouer avec nous (saisir o ou n)?\n"); scanf("%c",&reponse); getchar(); if(reponse=='o') { do { compteur=1; niveau==0; printf("Choisir le niveau:\n"); scanf("%d",&niveau); if (niveau==1) { MIN=1; MAX=100; srand(time(NULL)); nombreMystere = (rand() % (MAX - MIN + 1)) + MIN; do { reponse==0; printf("Saisir un nombre entier positif ou nul:"); scanf ("%d",&nombresaisi); if(nombresaisi<nombreMystere) { printf("C'est plus\n\n"); compteur++; } else if (nombresaisi>nombreMystere) { printf("C'est moins\n\n"); compteur++; } else { printf("Bravo vous avez trouve le nombre mystere\n\n\a"); printf("Le nombre de tentative est de:%d\n\n",compteur++); } } while (nombresaisi!=nombreMystere); printf("voulez vous rejouer?"); scanf("%c",&reponse); getchar(); } else if (niveau==2) { MIN=1; MAX=1000; srand(time(NULL)); nombreMystere = (rand() % (MAX - MIN + 1)) + MIN; do { reponse==0; printf("Saisir un nombre entier positif ou nul:"); scanf ("%d",&nombresaisi); if(nombresaisi<nombreMystere) { printf("C'est plus\n\n"); compteur++; } else if (nombresaisi>nombreMystere) { printf("C'est moins\n\n"); compteur++; } else { printf("Bravo vous avez trouve le nombre mystere\n\n"); printf("Le nombre de tentative est de:%d\n\n",compteur++); } } while (nombresaisi!=nombreMystere); printf("voulez vous rejouer?\n"); scanf("%c",&reponse); getchar(); } else if (niveau==3) { MIN=1; MAX=10000; srand(time(NULL)); nombreMystere = (rand() % (MAX - MIN + 1)) + MIN; do { reponse==0; printf("Saisir un nombre entier positif ou nul:"); scanf ("%d",&nombresaisi); if(nombresaisi<nombreMystere) { printf("C'est plus\n\n"); compteur++; } else if (nombresaisi>nombreMystere) { printf("C'est moins\n\n"); compteur++; } else { printf("Bravo vous avez trouve le nombre mystere\n\n"); printf("Le nombre de tentative est de:%d\n\n",compteur++); } } while (nombresaisi!=nombreMystere); printf("voulez vous rejouer?\n"); scanf("%c",&reponse); getchar(); } } while(reponse=='o'); { printf("Tant pis!Une autre fois peut etre!\n\n"); } } else { printf("Tant pis!Une autre fois peut etre!\n"); } }