1

ここで何が問題なのですか?scanf は while ループで動作していないようです。ユーザーが望むまで、母音と子音を見つけようとしていました。

コードは次のとおりです。

#include <stdio.h>
main()
{
    char x,c;
    do
    {
        printf("enter\n");
        scanf("%c",&x);
        if(x=='a'||x=='e'||x=='i'||x=='o'||x=='u')
            printf("vowel\n");
        else
            printf("consonent\n");

        printf("do u want to continue ?(y/n)\n");
        scanf("%d",&c);
        if(c=='n')
            printf("thnks\n");

    } while(c=='y');
    return 0;
}
4

6 に答える 6

6

whichを使用して文字を読み取ろうとしていますが、%dこれは間違っています。%c代わりに使用してください。

于 2013-02-27T17:18:40.530 に答える
2

コードを元のコードに変更するとscanf("%c",&c)、y/n エントリが文字ではなく数字として取得されます

編集:

おそらく、代わりにgetcorを使用fgetsして最初の文字を取得してみてください。

于 2013-02-27T17:19:11.557 に答える
1

ここに問題があると思います: scanf("%d",&c); そのはず:

    scanf("%c",&c);
于 2013-02-27T17:20:29.713 に答える
1

正しいコードは次のとおりです。

#include <stdio.h>

int main()
{
    char x,c;
    do
    {
        printf("enter\n");
        scanf("%c",&x);
        getchar(); //to remove the \n from the buffer
        if(x=='a'||x=='e'||x=='i'||x=='o'||x=='u')
            printf("vowel\n");
        else
            printf("consonent\n");
        printf("do u want to continue ?(y/n)\n");
        scanf("%c",&c); //Here you were using %d instead of %c
        getchar(); //to remove the \n from the buffer

        if(c=='n')
            printf("thnks\n");
    }while(c=='y');

    return 0;
}
于 2013-02-27T17:24:18.090 に答える
0

両方のscanfsは次のように変更する必要があります。

scanf(" %c",&x);

..。

scanf(" %c",&c);

の前のスペースに注意してください。重要です。これは、入力の処理後に%残った終了文字を含む先頭の空白を消費します。stdin

于 2013-02-27T17:56:26.440 に答える
-1

このコードでループを複数回実行してみてください。

編集: なしの別のソリューションfflush(stdin)。8 文字の文字列を次のように定義してください。

char str[8];

ループ内のコードを次のように変更します

fgets(str, 8, stdin); // To read the newline character
printf("do u want to continue ?(y/n)\n");

scanf("%c",&c);
fgets(str, 8, stdin); // To read the newline character
于 2013-02-27T17:25:25.740 に答える