void regame1(int k) //Funcion para el redo
{
char redo;
char response2;
unsigned int o;
printf("Quieres volver a sacar las cartas para el jugador1?\n");
printf("Aprete (s = si, n = no)\n");
scanf("%s", &redo); //Poner el char redo en el scanf
if (redo == 's')
{
printf("Que posicion de cartas te gustaria cambiar? (Maximo hasta 3)\n");
scanf(" %c", &response2);
while (( response = getchar())!= EOF)
{
switch (response2)
{
case '1':
hand1[0] = cards[20]; symbol[0] = symbols[20];
break;
case '2':
hand1[1] = cards[21]; symbol[1] = symbols[21];
break;
case '3':
hand1[2] = cards[22]; symbol[2] = symbols[22];
break;
case '4':
hand1[3] = cards[23]; symbol[3] = symbols[23];
break;
case '5':
hand1[4] = cards[24]; symbol[4] = symbols[24];
break;
case '\n':
case '\t':
case ' ':
break;
}
}
printf("Las cartas nuevas del jugador 1 son:\n");
for (o = 0; o <= 4; o++)
{
printf("%s%s ", letters[hand1[o]], symbol[o]);
}
}
}
所以我有我的功能,但是每次我在扫描后按1或2或3时,它不会执行任何操作,或只执行其中一个操作,切换hand1数组或符号数组:(
我做错了吗?我只是想要这样,如果用户按下1,它将执行以下情况&#39; 1&#39;,最后按ctrl + d突破。
答案 0 :(得分:1)
用户在提供值后按response
后,您的问题是newline
读取输入缓冲区中的[enter]
:
scanf(" %c", &response2);
while (( response = getchar())!= EOF)
您需要修复scanf
,以便使用换行符:
scanf(" %c%*c", &response2);
然后,您就可以获得response
的值。如果您想自己证明这一点,只需添加一个响应switch
的{{1}}子句。
要解决这些问题,您还需要在每个循环中反复刷新输入缓冲区中的'\n'
。给我几分钟,我会举一个例子。 (得去接女儿......)
好的,回来。如果我将其设置为使用newline
并确保我无法在scanf
中留下'\n'
并让input buffer
按预期行事,我会使用简单的switch
,将输入读作字符串,然后将character buffer
传递给pointer
语句的第一个字符,如下所示:
switch
<强>输出:强>
#include <stdio.h>
int main (void) {
char buf[8] = {0};
printf ("\nQue posicion de cartas te gustaria cambiar? (Maximo hasta 3, [enter] to exit)\n");
while ( printf ("\n response: ") && scanf ("%[^\n]%*c", buf) == 1 )
{
switch (*buf)
{
case '1':
printf (" hand1[0] = cards[20]; symbol[0] = symbols[20];\n");
break;
case '2':
printf (" hand1[1] = cards[21]; symbol[1] = symbols[21];\n");
break;
case '3':
printf (" hand1[2] = cards[22]; symbol[2] = symbols[22];\n");
break;
case '4':
printf (" hand1[3] = cards[23]; symbol[3] = symbols[23];\n");
break;
case '5':
printf (" hand1[4] = cards[24]; symbol[4] = symbols[24];\n");
break;
default:
printf (" error - invalid input\n");
break;
}
}
printf ("\n All done!, bye...\n\n");
return 0;
}