我正在关注youtube的教程并正在做一个骰子生成器。 它基本上打印出3个骰子结果并总结出骰子结果。 在此之后,用户将查看总和,并根据总和,用户将猜测下一卷是否会更高,更低或相同。
下面是我的代码,假设,当我键入' yes'时,它应该在if语句中执行代码。但是,它直接进入了其他声明。有人可以告诉我出了什么问题吗?
int answer;
int guess;
int diceRoll4 = 0;
printf("Would you like to guess your next dice? Y/N \n");
scanf(" %c", &answer);
if (answer == 'yes' ){
printf("What is your guess?\n");
printf("please key in your number \n");
scanf(" %d", &guess);
if (guess > diceRoll4 ){
printf(" You got it wrong, too high!");
}
else if (guess < diceRoll4){
printf(" You got it wrong, too low!");
}
else {
printf("You got it right");
}
}
else{
printf("Thanks for playing");
}
答案 0 :(得分:4)
'yes'
是一个多字节字符,其行为是实现定义的。
您可能想要的是阅读和比较单个char
:
if (answer == 'y' ){
或读取整个字符串并进行比较:
char answer[128];
scanf("%s", answer);
if ( strcmp(answer,"yes") == 0 ){
...
}
请注意,我更改了answer
的类型并使用%s
来读取字符串。
答案 1 :(得分:4)
首先,answer
应该是char
的数组,以便保存字符串。变化
int answer;
到
char answer[10]; //Or any other reasonable size
其次,由于您要扫描字符串而不是字符,请更改
scanf(" %c", &answer);
到
scanf("%9s", answer);
9将扫描最多9个字符(结尾处为NUL终结符+1),从而阻止buffer overflows。
我已移除&
%s
,char*
期望&answer
,而char(*)[10]
则会char*
。数组的名称将转换为指向其第一个元素%s
的指针,正好是scanf
所期望的。因此上述scanf("%9s", &answer[0]);
等同于
==
第三,使用strcmp
比较两个字符串比较指针而不是它们中的实际内容。请改用string.h
中的if (answer == 'yes' ){
。当它的两个参数都包含相同的内容时,它返回0。变化
if (strcmp(answer, "yes") == 0){
到
char*
双引号用于表示以NUL结尾的字符串(strcmp
),这正是resp = requests.get(geturl, cookies=cookies)
cookies = requests.utils.dict_from_cookiejar(resp.cookies)
所期望的,而单引号(如代码中)是一个多字符的字符,其值为是实现定义的。
答案 2 :(得分:2)
如果您不想读取字符串,但只想读取用户可以回答char
或Y
的单个N
,则应将int answer;
更改为char answer;
。然后,您可以继续使用原始scanf()
- 来电。您仍需要更改
if (answer == 'yes')
到
if (answer == 'Y')
如果您希望用户输入y
或Y
,您可以toupper()
使用ctype.h
并将if
- 条件更改为{{ 1}}。
答案 3 :(得分:1)
要测试相等性,您必须使用strcmp
。如果返回值为0
,则表示它们相等。
if (strcmp(answer, "yes") == 0) {
// ...
} else {
// ...
}
备注:强>
仅使用answer == 'yes'
测试指针的相等性而不是值。这就是为什么只能输入else
。
因为answer
是int
,您必须更改为数组
char answer[15]
正如@Sathya所说,你只是阅读一个字符%c
来阅读你必须使用的字符串%s
scanf("%s", answer);
而不是{{1>} 多字符字符常量更改为'yes'
数组"yes"
最后char
more informations here。
答案 4 :(得分:0)
这一行:
if(answer =='yes'){
有几个问题。
main: main.c hello.o
gcc main.c hello.o -o main
hello.o: hello.c water.c car.c
gcc hello.c water.c car.c -c hello.o