2011-06-01 12 views
0

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

#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); 
    } 
+0

'inputFunctionは(& num);' – Arlen

+0

@Redをint型int型試してみてください@orangepage:。私はポインタがこのような質問をしている人のために少しも先進的であるかもしれないことを疑う – Gabe

+0

が、これはCではないC++で@Red、そのような事はありません – Wiz

答えて

4

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

2

DOSでファイル終了マーカーとしてよく使用されるCTRL-Z(^ Z)のASCII値は26(10進数)です。メインで変数numを渡していることを覚えておいてください。呼び出しは参照として使用されないため、比較するとガベージ値が含まれます。

1

Gabeは関数の変数がローカルのスコープを持っているので、inputFunction()の戻り値を割り当てる必要があると述べています。だから、あなたがそうのようにそれをやるべきあなたがメインでinputFunction()を呼び出している毎回():プログラムの実行がメインに戻ったときに

num = inputFunction(num); 

inputFunction(中NUMのそれ以外の値))(失われます。これは、プログラムが期待どおりに実行されない主な理由です。

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

あなたは、あなたがプログラムにしたいことをペンとペーパーで計画することで恩恵を受けるかもしれないと思います。 1つの方法は、プログラムが矢印などで行うことを「マップする」ことです(フローチャート)。あるいは、目標の1-2文の説明から始めて、プログラムが実行する一連の作業が終了するまで徐々に詳細に展開してから、コードに変換することができます。

関連する問題