0

私はプログラミングが初めてで、まともなプログラムを書くことを本当に学びたいです。EOFの使い方がよくわかりません。プログラムがコンパイルされ、実行すると、EOF 部分を除いて正常に動作します。プログラムは (CTRL+z を使用した後) -1 の値をメイン関数に返し、ステートメントを出力してからプログラムを終了することになっています。-1 は、EOF 自体の -1 とは異なる値です。

 #include <stdio.h>
//Function Declaration
int inputFunction (int num);

int main (void)
{
    //Local Declarations
    int num;
    do
    {    
    inputFunction (num);

    if (num < 0 || num > 100)
            inputFunction (num);
    else
        inputFunction (num);
    }while (num != -1);
    return 0;
}
int inputFunction (int num)
{
    int rc;

    do
    {
    printf("Enter an integer from 0 to 100: \n");
    rc = scanf("%d", &num);
       {
       if (rc != EOF)
              {
              if (num < 0 || num >100)
                 {
                 printf("ERROR\n");
                 return num;
                 }
              else
                  {
                 return num;
                 }
              }
       else
           {
           num = -1;
           return num;
       }
       }  
    }while (rc != EOF);
    }
4

3 に答える 3

4

で変数numが割り当てられることはありませんmain。呼び出すinputFunctionと値が返されますが、返される値は無視されます。

于 2011-06-01T04:20:04.530 に答える
2

DOS でファイルの終わりマーカーとしてよく使用される CTRL-Z (^Z) の ASCII 値は 26 (10 進数)です 。比較するとガベージ値が含まれます。

于 2011-06-01T04:20:50.413 に答える
1

Gabe が述べているように、関数内の変数にはローカルスコープがあるため、inputFunction() の戻り値を使用するには、その戻り値を割り当てる必要があります。したがって、main() で inputFunction() を呼び出すたびに、次のようにする必要があります。

num = inputFunction(num);

そうしないと、プログラムの実行が main() に戻ったときに、inputFunction() の num の値が失われます。これが、プログラムが期待どおりに実行されない主な理由です。

コードにはいくつかの論理的な問題もあります。main() の最初の if/else ステートメントでは、両方のステートメントがまったく同じ結果を生成します。他の動作も、まさにあなたがやりたいことではないかもしれません。

プログラムに何をさせたいかを紙とペンで計画することで利益が得られると思います。1 つの方法は、プログラムが矢印などを使用して行うことを「計画」することです (フローチャート)。または、目標の 1 ~ 2 文の説明から始めて、プログラムが実行する一連のタスクがコードに変換できるようになるまで、それを徐々に詳細に拡張することもできます。

于 2011-06-01T08:46:22.167 に答える