scanf()正在扫描一个字符,甚至应该初始化它

时间:2017-11-18 21:33:28

标签: scanf

有些机构可以向我解释为什么" card_T2"甚至在" printf之前扫描("输入翻牌2:\ n");"显示在屏幕上?

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"然后按enter键,card_T1 [0] = 4,card_T1 [1] = 5,card_T2 [0] = 6,card_T2 [1] ="空格"。

我不明白为什么第3和第4次扫描是扫描,尽管printf从未显示过。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

尝试在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]和card_T2 [1]中的'k'。下面是一个例子,说明你运行的程序在这些变化之后会是什么样子(在“输入翻牌2之前有'1':”因为你忘了在打印card_T1之后放置\ _ [1](或者因为你没有'我想)):

Type in flop card 1: 
qwerty
123
q
1Type in flop card 2:
3
4
3
4 

这是因为char数组中的每个位置只有1个字节,每个字符也是1个字节,因此只有1个字符可以适合char数组的位置。至于为什么%s代替%d修复了我不知道的第一个问题。