Я новичок в C и получил крах моей программы, когда она доходит до конца.scanf сбой программы и сравнение строки C
Это мини-игра, в которой пользователь должен угадать номер. Когда он будет найден, программа спросит пользователя, хочет ли он играть в новую игру.
Пожалуйста найти мой код ниже:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main() {
int MAX = 100, MIN = 0;
int nombreCoup = 0;
int nombreMystere = 0;
int nombreJoueur;
char newPartie;
int continuerPartie = 0;
int niveauDiffic;
srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
printf("Bonjour, ceci est un mini jeu dans lequel vous allez devoir deviner un nombre choisi aleatoirement entre 0 et 100.:\n");
while (continuerPartie = 1)
{
printf("Choisissez votre niveau de difficulte entre 1 et 3 :\n");
scanf("%d", &niveauDiffic);
switch (niveauDiffic)
{
case 1:
printf("Vous avez selectionne la difficulte Facile. Le jeu commence.\n");
break;
case 2:
printf("Vous avez selectionne la difficulte Normale. Le jeu commence.\n");
niveauDiffic = 2;
MAX = 1000;
break;
case 3:
printf("Vous avez selectionne la difficulte Difficile. Le jeu commence.\n");
niveauDiffic = 3;
MAX = 10000;
break;
default:
printf("Mauvaise entrée, la difficulte sera donc reglee sur Facile. \n");
break;
}
printf ("\n On y va : \n");
scanf ("%d", &nombreJoueur);
nombreCoup++;
do {
if (nombreJoueur > nombreMystere) {
printf ("Le nombre mystere est plus petit !\n");
nombreCoup = nombreCoup + 1 ;
printf("Retente ta chance ! \n \n");
scanf ("%d", &nombreJoueur);
}
else {
printf ("Le nombre mystere est plus grand ! \n");
nombreCoup = nombreCoup + 1 ;
printf("Retente ta chance ! \n \n");
scanf ("%d", &nombreJoueur);
}
} while (nombreJoueur != nombreMystere);
printf ("Vous avez trouver le nombre mystere en %d coups ! \nVoulez vous rejouer ? (Y/N) ", nombreCoup);
scanf("%1c", &newPartie);
printf ("%c", newPartie);
if (strcmp(newPartie, "Y" == 0)|| strcmp(newPartie, "y" == 0))
{
printf ("Et c'est reparti !!'");
}
else {
continuerPartie = 0;
}
}
return 0;
}
Проблема заключается в том, что программа падает на последнем scanf()
. Я также получил это предупреждение при компиляции:
«передавая аргумент 1 из„“STRCMP делает указатель из целого числа без броска»
, но мне не удалось избавиться от него.
EDIT:
Спасибо за вашу помощь ПЕРЦЫ, похоже, что я должен получить больше внимания на мой синтаксис ... Теперь мой код не врезаться, я применил поправки. Единственная оставшаяся проблема заключается в том, что этот код:
printf ("Vous avez trouver le nombre mystere en %d coups ! \nVoulez vous rejouer ? (Y/N) ", nombreCoup);
scanf("%1c", &newPartie);
printf ("%c", newPartie);
if ((newPartie == 'Y') || newPartie == 'y')
{
printf ("Et c'est reparti !!'");
}
else {
continuerPartie = 0;
}
не выполняется ... Я не знаю, почему, но он закрывается после последнего Printf до если ..
EDIT 2:
Вот решение, благодаря @Sourav Гоша
ли вы попробовать зсапЕ ("% 1c", & newPartie);?, ум пространство перед тем%. - Сурав Гош.
'newPartie' является' 'char'.Use, если ('Y' newPartie ==) || newPartie == 'y') 'вместо' if (strcmp (newPartie, "Y" == 0) || strcmp (newPartie, "y" == 0)) '. 'strcmp' требует, чтобы оба его аргумента были типа' char * ', и оба они должны быть NUL-завершены. Кроме того, используйте 'while (continuerPartie == 1)' вместо 'while (continuerPartie = 1)'. Первый сравнивает 'continuerPartie' с 1, а последний присваивает ему 1 (что делает его бесконечным циклом, поскольку 1 - - нулевое число и все ненулевые числа считаются истинными) и изменить 'int continuerPartie = 0;' на 'int continuerPartie = 1;' для выполнения цикла. –