Correction programme - Problème de TYPE
Résolu
Gouag
Messages postés
32
Date d'inscription
Statut
Membre
Dernière intervention
-
Gouag Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
Gouag Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai écrit le programme suivant.
Il fonctionne.
Cependant lorsque je modifie mes
De même lorsque je change le type de la variable
Quelqu'un pourrait il m'expliquer pourquoi le type de donnée
Merci d'avance
Bien cordialement
PS: J'ai saisis les 3 programmes: 2 fonctionnant + 1 ne fonctionnant pas
PROGRAMME FONCTIONNANT:
PROGRAMME NE FONCTIONNANT PAS:
PROGRAMME FONCTIONNANT:
J'ai écrit le programme suivant.
Il fonctionne.
Cependant lorsque je modifie mes
SCANF%sen
SCANF%ccela ne fonctionne plus et je ne comprends pas pourquoi. Cette fonction s'applique pour la saisie de la variable
réponse.
De même lorsque je change le type de la variable
reponsepour la passer de
charen
int, avec une saisie du chiffre 1 pour dire oui et le chiffre 0 pour dire non, il fonctionne également.
Quelqu'un pourrait il m'expliquer pourquoi le type de donnée
charpour la variable reponse avec %c ne fonctionne pas dans ce programme car ce type fonctionne bien avec %s?
Merci d'avance
Bien cordialement
PS: J'ai saisis les 3 programmes: 2 fonctionnant + 1 ne fonctionnant pas
PROGRAMME FONCTIONNANT:
#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("%s",&reponse); 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("%s",&reponse); } 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("%s",&reponse); } 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("%s",&reponse); } } while(reponse=='o'); { printf("Tant pis!Une autre fois peut etre!\n\n"); } } else { printf("Tant pis!Une autre fois peut etre!\n"); } }
PROGRAMME NE FONCTIONNANT 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); 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); } 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); } 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); } } while(reponse=='o'); { printf("Tant pis!Une autre fois peut etre!\n\n"); } } else { printf("Tant pis!Une autre fois peut etre!\n"); } }
PROGRAMME FONCTIONNANT:
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(int argc, char *argv[]) { int nombresaisi,nombreMystere,compteur=1,reponse,MAX,MIN,niveau; printf("Voulez vous jouer avec nous (saisir 1 ou 0)?\n"); scanf("%d",&reponse); if(reponse==1) { do { compteur=1; niveau==0; printf("Choisir le niveau:\n"); scanf("%d",&niveau); if (niveau==2) { 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("%d",&reponse); } else if (niveau==3) { 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("%d",&reponse); } else if (niveau==4) { 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("%d",&reponse); } } while(reponse==1); { printf("Tant pis!Une autre fois peut etre!\n\n"); } } else { printf("Tant pis!Une autre fois peut etre!\n"); } }
A voir également:
- Correction programme - Problème de TYPE
- Votre appareil ne dispose pas des correctifs de qualité et de sécurité importants - Guide
- Programme demarrage windows - Guide
- Activer correction automatique android - Guide
- Clear type - Guide
- Message programmé iphone - Guide
3 réponses
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,
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"); } }