生成骰子游戏 - C编程

时间:2015-06-14 07:54:16

标签: c dice

我正在关注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");
}

5 个答案:

答案 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
 我已移除& %schar*期望&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)

如果您不想读取字符串,但只想读取用户可以回答charY的单个N,则应将int answer;更改为char answer;。然后,您可以继续使用原始scanf() - 来电。您仍需要更改

if (answer == 'yes')

if (answer == 'Y')

如果您希望用户输入yY,您可以toupper()使用ctype.h并将if - 条件更改为{{ 1}}。

答案 3 :(得分:1)

要测试相等性,您必须使用strcmp。如果返回值为0,则表示它们相等。

if (strcmp(answer, "yes") == 0) {
    // ...
} else {
    // ...
}

备注:

  1. 仅使用answer == 'yes'测试指针的相等性而不是值。这就是为什么只能输入else

  2. 因为answerint,您必须更改为数组

    char answer[15]
    
  3. 正如@Sathya所说,你只是阅读一个字符%c来阅读你必须使用的字符串%s

    scanf("%s", answer);
    
  4. 而不是{{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