0

ここにいる新しいプログラマーは、Javaで少しだけ経験を積んで、Cで何かを書こうとしています。誰かに「はい/いいえ」の質問をして、答えに応じて何かをしてから、Enterキーを押して続行するように依頼します。私は2つの問題を抱えています:

1.)「y」、「Y」、または「はい」を回答として受け入れるようにプログラムを取得できません。1つを受け入れることはできますが、3つすべてを受け入れることはできません。「論理OR」演算子|| 動作していません。2.)次の2つの「フラッシュ」コマンドがないと、「Enterキーを押して続行」で停止できません。

while (getchar() != '\n');

私が持っていて使用しようとしているコードは次のとおりです。

int main (int argc, const char * argv[]) {
    printf("Would you like to continue? Please press y or n.\n");

    if(getchar() == 'y'){
        printf("You pressed yes! Continuing...");
    }
    else{
        printf("Pressed no instead of yes.");
    }
        //flush commands go here
    printf("\nPress ENTER to continue...");
    if(getchar()=='\n'){
        printf("\nGood work!");
    }else{
        printf("Didn't hit ENTER...");

    return 0;
}

助けていただければ幸いです、ありがとう。

4

2 に答える 2

1

* nix環境で作業していると仮定すると、着信文字を次々に格納するためのバッファーを作成できます。2つのケースがあります:

1. Single character input
2. 3 character String

他のすべての場合、入力はOKではないと盲目的に言うことができます!
ケース1の場合、iは「y」または「Y」である必要が1あり ます。ケース2の場合、iは「はい」である必要があり、 その他のケースは正しくありません。コードは次のとおりです。character
3string

#include<stdio.h>
int main()
{
char ch[3];
char c;
int i=0;
while(((c=getchar())!='\n')){
        ch[i]=c;
        i++;
}
ch[i]='\0';
if (i==1)
        if (ch[0]=='Y'||ch[0]=='y')
                printf("OK");
        else
                printf("Not OK");
else if(i==3)
        if (strcmp(ch,"Yes")==0)
                printf("OK");
        else
                printf("Not OK");
else
        printf("NOT OK");
return 0;
}

このようなものを使用することをお勧めします。

于 2011-10-12T03:59:28.373 に答える
1

最初に、最初の結果を保存して、getchar()考えられる各値をテストすることをお勧めします。

int c=getchar();
if(c=='y' || c=='Y')
....

「Enter」部分が2番目のテストでスキップする理由は、「y」または「n」と入力したときにEnterキーを押して入力を送信したためです。これ\nはまだバッファー内にあり、次の呼び出しによってプルされます。getchar()

于 2011-10-12T02:46:25.493 に答える