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
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret ? ✓ - Forum Python
- Correction manuel - Forum Études / Formation High-Tech
- Frequence programme national ✓ - Forum Messagerie
- Programme demarrage windows 10 - Guide
- Incompatibilité de type vba ✓ - Forum Programmation
3 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
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");
}
}