0

こんにちは、Turbo C を使用しています...ちょっと質問があります。本で TC のコードを見つけましたが、説明に満足していません。コードは次のとおりです。

main()
{
     int count = -1;                /* why it was initialized as -1? */
     char ch;

     printf("Type in a phrase:\n");
     ch = 'a';                      /* why it was initialized as 'a'? */
     while (ch != '\r')             /* perform while ch is not equal to return */ 
     {
           ch = getche();           
           count++;                 /* increment the count */
     }

 printf("\nCharacter count is %d", count);   /* prints the value of count */

}

前もって感謝します!

4

3 に答える 3

2

ユーザーが「abc」と入力して Enter キーを押すと、入力バッファーには「a」、「b」、「c」、「/r」が含まれます (この最後の文字は return を表します)。バッファーには 4 文字ありますが、ユーザーが実際に入力したのは 3 文字 (1 つは return) だけなので、カウントから 1 を引く必要があります。または、0 ではなく -1 からカウントを開始します。

このように考えることができます-これは何回ループしますか?

  • カウントは -1 から始まります。
  • 初回: 文字列から 'a' を読み取ります。'/r' ではないので、もう一度ラウンドします。count は現在 0 です。
  • 2 回目: 文字列から 'b' を読み取ります。'/r' ではないので、もう一度ラウンドします。count は 1 になりました。
  • 3 回目: 文字列から 'c' を読み取ります。'/r' ではないので、もう一度ラウンドします。count は 2 になりました。
  • 4 回目: 文字列から '/r' を読み取り、停止します。count は 3 になりました。

2番目のポイントでは、「\ r」でない限り、chが何に初期化されるかは問題ではありません。これは、少なくとも 1 回はループに入り、文字を読み取ることを意味します。

于 2011-05-14T08:55:37.810 に答える
2
 int count = -1;                \* why it was initialized as -1? *\

最後の「キャリッジリターン」文字を除いて、行内の文字を数えているように見えます。'\r' 文字がカウントに含まれないように、-1 から開始するのはそのためです。

 ch = 'a';                      \* why it was initialized as 'a'? *\

そのため、ループ内の条件はwhile最初は true になります。'\r' でない限り、何でも選択できます。その場合、条件はすぐに false になり、文字は読み取られません。

于 2011-05-14T08:56:21.757 に答える
0

最初の質問では、カウント値はとにかく開始できます。-1 だけで開始することは必須ではありません。

彼らは自分の便宜のためにそれをしただけです。数字を 1 または 0 から数えたいだけです。同じ式がアルファベットに適用されます。文章と単語はアルファベットの組み合わせになります。特定の順序で開始するには、混乱することなくそのように数える必要があります。

語句などを入力する場合は、\0 のような終了変数が必要です。これらはアルファベットには存在しないためです。周波数を計算するには、カウントをインクリメントする必要があります。

于 2015-11-07T10:34:32.367 に答える