有人能给我解释一下为什么card_T2
在屏幕上显示之前就开始扫描了吗?
char card_T1[2];
char card_T2[2];
printf("Type in flop card 1: \n");
scanf("%c",&card_T1[0]); //Card value
scanf("%c",&card_T1[1]); //Card categorie
printf("%c\n",card_T1[0]);
printf("%c",card_T1[1]);
printf("Type in flop card 2: \n");
scanf("%c",&card_T2[0]); //Card value
scanf("%c",&card_T2[1]); //Card categorie
printf("%c\n",card_T2[0]);
printf("%c",card_T2[1]);
return 0;
我希望第一个scanf
扫描像“2k”这样的东西,但是如果我在输入后按回车键,回车键就会被扫描到card_T2[0]
上,我不明白为什么。
另外,如果我输入“456”之类的内容,然后按回车键、card_T1[0] = 4
、card_T1[1] = 5
、card_T2[0] = 6
和card_T2[1] = "space"
。
我不明白为什么第三和第四个scanf
是扫描,虽然printf
从来没有得到显示。
1条答案
按热度按时间2w3rbyxf1#
尝试在scanf语句中使用%s而不是%c(%c在printf语句中保持原样)。这将阻止程序在您按下一个字符并在之后输入后继续扫描card_T1[1]。但是,您必须一次按下一个字符并在之后输入。如果您按“2k”并在之后输入(给予一次输入时),只有字符“2”将存储在card_T1[0]中,cardT1[1]中不会存储任何内容(当然card_T2[0]或card_T2[1]中也没有任何内容)。如果您按“2”,然后输入,然后按“k”,然后输入,“2”将存储在card_T1[0]中,“k”将存储在card_T2[1]中。以下示例显示了在这些更改之后您运行的程序的外观(“键入翻牌卡2:“之前有”1“,因为您在打印card_T1[1]之后忘记输入\n(或者因为您不想输入)):
这是因为字符数组中的每个位置只有1个字节,每个字符也是1个字节,所以只有1个字符可以适合字符数组中的一个位置。至于为什么%s而不是%d解决了第一个问题,我也不知道。