scanf 使程序崩溃并比较字符串 C
scanf crashes program and comparing string C
我是 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()
崩溃了。我在编译时也收到了这个警告:
"passing argument 1 of 'strcmp' makes pointer from integer without a cast"
但我没能摆脱它。
编辑:
感谢你的帮助 guyz,看来我必须更加关注我的语法...现在我的代码没有崩溃,我已经应用了更正。唯一剩下的问题是这段代码:
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;
}
没有执行...我不知道为什么但它在 if..
之前的最后一个 printf 之后关闭
编辑 2:
这是解决方案,感谢@Sourav Gosh
您是否尝试过 scanf(" %1c", &newPartie);?,注意 % 之前的 space。 – Sourav Ghosh。
点 1
在您的代码中,
while (continuerPartie = 1)
并没有按照您认为的那样去做。也许您想改用 等式运算符 (==
)。否则就是死循环。
也就是说,您应该将 continuerPartie
初始化为 1
而不是 0
,以确保在第一次迭代中满足 while()
循环。
点 2
strcmp(newPartie, "Y" == 0)
不是正确的用法。
要么使用
strncmp()
与 &newPartie
和 n
为 1
,或(不是一个很好的方法)
- (更好) 使用简单的相等运算符
==
就像 if ((newPartie=='Y')|| (newPartie=='y'))
此外,strcmp()
/strncmp()
中的 ==
相等比较应该类似于 strncmp(a,b,c) == 0
点 3
改变
scanf("%1c", &newPartie);
至
scanf(" %1c", &newPartie);
忽略之前存储在输入缓冲区中的换行并且扫描非空白字符。
你的程序有几个错误:
while (continuerPartie = 1)
它不断地给continuerPartie
赋值1。
改为:
while (continuerPartie == 1)
此外,newPartie
是一个字符,而不是字符串。
if (strcmp(newPartie, "Y" == 0)|| strcmp(newPartie, "y" == 0))
应该是:
if ((newPartie=='Y')|| (newPartie=='y'))
我是 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()
崩溃了。我在编译时也收到了这个警告:
"passing argument 1 of 'strcmp' makes pointer from integer without a cast"
但我没能摆脱它。
编辑:
感谢你的帮助 guyz,看来我必须更加关注我的语法...现在我的代码没有崩溃,我已经应用了更正。唯一剩下的问题是这段代码:
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;
}
没有执行...我不知道为什么但它在 if..
之前的最后一个 printf 之后关闭编辑 2:
这是解决方案,感谢@Sourav Gosh
您是否尝试过 scanf(" %1c", &newPartie);?,注意 % 之前的 space。 – Sourav Ghosh。
点 1
在您的代码中,
while (continuerPartie = 1)
并没有按照您认为的那样去做。也许您想改用 等式运算符 (==
)。否则就是死循环。
也就是说,您应该将 continuerPartie
初始化为 1
而不是 0
,以确保在第一次迭代中满足 while()
循环。
点 2
strcmp(newPartie, "Y" == 0)
不是正确的用法。
要么使用
strncmp()
与&newPartie
和n
为1
,或(不是一个很好的方法)- (更好) 使用简单的相等运算符
==
就像if ((newPartie=='Y')|| (newPartie=='y'))
此外,strcmp()
/strncmp()
中的 ==
相等比较应该类似于 strncmp(a,b,c) == 0
点 3
改变
scanf("%1c", &newPartie);
至
scanf(" %1c", &newPartie);
忽略之前存储在输入缓冲区中的换行并且扫描非空白字符。
你的程序有几个错误:
while (continuerPartie = 1)
它不断地给continuerPartie
赋值1。
改为:
while (continuerPartie == 1)
此外,newPartie
是一个字符,而不是字符串。
if (strcmp(newPartie, "Y" == 0)|| strcmp(newPartie, "y" == 0))
应该是:
if ((newPartie=='Y')|| (newPartie=='y'))