试图创建这个二十一点类型的游戏。无法使printf工作

时间:2013-10-16 03:19:07

标签: c

因此,每当我尝试运行此代码时,它将通过第一个printf,但它会显示第二个而不让我输入值。有什么我做错了吗?

    #include <stdio.h>

int main(int argc, const char * argv[])
{
    int suit1;
    int suit2;
    char H, S, C, D;
    float value1;
    float value2;
    printf("Please enter the card's suit");
    scanf("%d", &suit1);
    printf("Please enter the card's value");
    scanf("%f", &value1);
    printf("%d %f", suit1, value1);
}

2 个答案:

答案 0 :(得分:1)

考虑使用套装的字符(“CDHS”)和卡片的整数(而不是浮点数 - 尽管它们可以表示小整数而不会损失精度)。当你可以的时候,让变量的内部表示“接近现实世界”通常是一个好主意......

经过一些小修改,您的程序对我来说很合适(更新,根据您最近的评论):

#include <stdio.h>

int main(int argc, const char * argv[])
{
    int suit1;
    int suit2;
    char suitInput;
    char Hearts, Spades, Clubs, Diamonds;
    int value1;
    int value2;
    printf("Please enter the card's suit (C, D, H or S): ");
    scanf("%c", &suitInput);

    printf("\nPlease enter the card's value: (1 = Ace, up to 13 = King): ");
    scanf("%d", &value1);
    printf("\nYou entered %c, %d\n", suitInput, value1);
}

我得到的输出:

Please enter the card's suit (C, D, H or S): D

Please enter the card's value: (1 = Ace, up to 13 = King): 5

You entered D, 5

答案 1 :(得分:0)

我怀疑你是在为第一个输入输入一个字母或字符串,这会导致“跳过”第二个输入(因为第一次扫描不会消耗字母,第二次扫描会失败)。

将西装扫描为字符或字符串:

char *suit;
suit = malloc(100 * sizeof(char));
scanf("%s\n", suit);

或输入两个数字