从控制台读取字符

时间:2014-01-19 19:04:15

标签: c++ c xcode

我有一个问题,真的是SIMPLE =。=。我想从控制台扫描角色,这是我的代码:

char odp;
 printf("Czy uwazasz ze z Twoimi oczami jest coś nie w porzadku?\n");
    scanf("%c",&odp);
    printf("ZNAK ZCZYRTANY: %c\n",odp);

    while(odp != 't' || odp != 'n'){
        printf("zle dane wprowadz jeszcze raz\n");
        scanf("%c",&odp);
    }

    if(odp == 'n') /* prawa galaz */ //JAKO "NIE" POZIOM 1
    {
        printf("Kontrola u okulisty jest potrzebna czesciej niz myslisz\n");
        system("PAUSE");
        return 0;
    }

问题在于,当我打印这个角色时,它会显示“t”或“n”,但它不希望我得到它。这有什么不对?

2 个答案:

答案 0 :(得分:2)

试试这个。你有两个问题

  • 一个是if条件。它应该是 odp!='t'&& odp!='n'
  • scanf在stdin上留下'\ n'。这导致您的第二次scanf()失败。所以 你可以使用另一个虚拟角色来刷新'\ n'。

试试这个

char odp;
char newline;
printf("Czy uwazasz ze z Twoimi oczami jest coś nie w porzadku?\n");
scanf("%c%c",&odp,&newline);
printf("ZNAK ZCZYRTANY: %c\n",odp);

while(odp != 't' && odp != 'n'){
    printf("zle dane wprowadz jeszcze raz\n");
    scanf("%c%c",&odp,&newline);
}

if(odp == 'n') /* prawa galaz */ //JAKO "NIE" POZIOM 1
{
    printf("Kontrola u okulisty jest potrzebna czesciej niz myslisz\n");
    system("sleep 10");
    return 0;
}

答案 1 :(得分:0)

请再看一遍。你知道为什么即使我输入正确的答案(右键),它也会在循环中显示两次或更多次printf?

printf("Czy uwazasz ze z Twoimi oczami jest coś nie w porzadku?\n");
    scanf("%c",&odp);

while(odp != 'T' && odp != 'N'){
    printf("zle dane wprowadz jeszcze raz");
    scanf("%c",&odp);
}

if(odp == 'N') /* prawa galaz */ //JAKO "NIE" POZIOM 1
{
    printf("Kontrola u okulisty jest potrzebna czesciej niz myslisz\n");
    system("PAUSE");
    return 0;
}
else if(odp == 'T') //LEWA GALAZ POZIOM 1
{
    printf("Czy bola Cie oczy?\n");
    scanf("%c",&odp);

    while(odp != 'T' && odp != 'N'){
        printf("zle dane wprowadz jeszcze raz");
        scanf("%c",&odp);
    }

    if(odp == 'T')
    {

        printf("Kontrolujesz tonus - cisnienie galkowe?\n");
        scanf("%c",&odp);
    }
}