2
#include <stdio.h>
#include <stdlib.h>

int main()

{
    
    char a,b;
    
    printf("enter the firstkeyword \n");
    a = getchar();
    printf("enter your second keyword \n");
    b = getchar();
    
    if(a>b)
    {
    printf("it is '%c' greater than '%c' as i expected \n",a,b);
    }
    else if (b>a)
    {
    printf("here'%c'is greater than '%c' \n",b,a);
    }
    else
    {
    printf("dont type the same character twice in next session \n");
    }
    return(0);
    
}

プログラムをコンパイルした後のo/pは次のとおりです。

最初のキーワードを入力してください

「$」と入力し、ctrl+z を使用して eof を入力し、「Enter」を押してプログラムを続行しました。しかし、2 番目のキーワードを入力しなくても、コンパイラは出力を次のように出力します。

2 番目のキーワードを入力してください

私が予想したように、それは「->」よりも「$」の方が大きいです

誰でもこのプログラムを手伝ってもらえますか?

文法や語句の誤りがあれば申し訳ありません。

4

3 に答える 3

5

getchar()\nを押すと、追加の入力も取得されますが、これはまだバッファーに残っています。2enter番目の機能を有効にするには、この余分な文字を吸収する必要があります。getchargetchar

char just_to_consume;
a = getchar();
just_to_consume = getchar();
printf("enter your second keyword \n");
b = getchar();
just_to_consume = getchar();

上記のオプション以外に、標準関数setvbufを使用してバッファリングを制御できます。もう1つのオプションがあります(個人的には、未定義の動作を避けるためにこれを好まない)を使用していますfflush(stdin)

于 2013-08-06T07:20:15.690 に答える
2

getchar問題は、改行がバッファリングされて次の呼び出しに渡されることです。おそらく次の方法で、バッファリングされた改行を処理する必要があります。

printf("enter the firstkeyword \n");
scanf(" %c", &a);

printf("enter your second keyword \n");
scanf(" %c", &b);

前のスペース%cは、次の文字の前のスペースを無視するように指示する一般的なイディオムですscanf。この場合、改行も含まれます。この特定のケースでは最初は必要ありませんが、2 番目のケースでは不可欠です。

stdlibインクルードも必要ありませんreturnreturn 0;

実際、Linux 端末を使用していて実験したい場合は、端末をraw モードに設定できます。これにより、端末が提供するバッファと解析機能が削除されます。これを行うに/bin/stty rawは、ターミナルで実行します。

この方法ではバッファリングがなく、バッファリングされた改行について心配する必要がありません。ただし、戦略的に改行を配置してそれを調整しない限り、コンソールの出力はおかしくなります (ここに入力しましたaおよび):b\r

$ ./a.out 
         enter the firstkeyword 
                               aenter your second keyword 
                                                         bhere'b'is greater than 'a' 

上記には元のコードを使用しました。

復元するには、実行するだけです/bin/stty cooked

于 2013-08-06T07:20:00.980 に答える
0

C は '\n' を 2 番目の文字として使用します。あなたができることは、同じ行に両方の文字を入力することです

$ @

または、 getchar() 関数を使用しないでプログラムを変更します

char a,b;
printf("enter the firstkeyword \n");
scanf(" %c",&a);
printf("enter your second keyword \n");
scanf(" %c",&b);

"%cの間の空白に注意してください

これでうまくいきます。

于 2013-08-07T10:38:57.753 に答える