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

时间:2014-12-04 23:51:07

标签: c switch-statement

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突破。

1 个答案:

答案 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;
}