gpt4 book ai didi

c - 如何使用这个开关功能,以便它完成我需要它做的事情

转载 作者:行者123 更新时间:2023-11-30 15:26:44 25 4
gpt4 key购买 nike

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,它就会执行 case '1' 中的操作,最后只需按 ctrl + d 即可退出。

最佳答案

您的问题是response读取newline用户按 [enter] 后留在输入缓冲区中提供值后:

scanf(" %c", &response2);
while (( response = getchar())!= EOF)

您需要修复 scanf所以你正在使用换行符:

scanf(" %c%*c", &response2);

然后您将能够获得 response 的值。如果您想向自己证明这一点,只需添加 switch响应 '\n' 的子句.

要解决这些问题,您还需要反复刷新 newline来自每个循环的输入缓冲区。给我几分钟时间,我会举一个例子。 (要去接女儿...)

好的,回来了。如果我将其设置为使用 scanf并确保我无法留下 '\n'input buffer并有switch表现如预期,我会使用一个简单的 character buffer ,读取输入作为字符串,并传递 pointerswitch 的第一个字符声明如下:

#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;
}

输出:

$ ./bin/nonewln

Que posicion de cartas te gustaria cambiar? (Maximo hasta 3, [enter] to exit)

response: 1
hand1[0] = cards[20]; symbol[0] = symbols[20];

response: 2
hand1[1] = cards[21]; symbol[1] = symbols[21];

response: 3
hand1[2] = cards[22]; symbol[2] = symbols[22];

response: 4
hand1[3] = cards[23]; symbol[3] = symbols[23];

response: 5
hand1[4] = cards[24]; symbol[4] = symbols[24];

response: 6
error - invalid input

response:

All done!, bye...

关于c - 如何使用这个开关功能,以便它完成我需要它做的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27306409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com