从控制台读取字符

reading char from console

本文关键字:字符 读取 控制台      更新时间:2023-10-16

我有一个非常简单的问题=.=。我想从控制台扫描字符,这是我的代码:

char odp;
 printf("Czy uwazasz ze z Twoimi oczami jest coś nie w porzadku?n");
    scanf("%c",&odp);
    printf("ZNAK ZCZYRTANY: %cn",odp);
    while(odp != 't' || odp != 'n'){
        printf("zle dane wprowadz jeszcze razn");
        scanf("%c",&odp);
    }
    if(odp == 'n') /* prawa galaz */ //JAKO "NIE" POZIOM 1
    {
        printf("Kontrola u okulisty jest potrzebna czesciej niz mysliszn");
        system("PAUSE");
        return 0;
    }

问题是,当我打印这个字符时,它向我显示"t"或"n",但它不希望我通过。这是怎么回事?

试试这个。你有两个问题

  • 一个是带有 if 条件。它应该是odp != 't' && odp != 'n'
  • 扫描在标准输入上留下了一个""。这导致您的第二个 scanf() 失败。所以您可以使用另一个虚拟字符刷新此""。

试试这个

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: %cn",odp);
while(odp != 't' && odp != 'n'){
    printf("zle dane wprowadz jeszcze razn");
    scanf("%c%c",&odp,&newline);
}
if(odp == 'n') /* prawa galaz */ //JAKO "NIE" POZIOM 1
{
    printf("Kontrola u okulisty jest potrzebna czesciej niz mysliszn");
    system("sleep 10");
    return 0;
}

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

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 mysliszn");
    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);
    }
}