2017-04-23 8 views
-3

私はfgetcを使って、一度に1文字ずつテキストファイルからストリームを読み込み、何らかの理由で文字を並べ替えます。テキストファイルはC fgetc同じ関数のパラメータとして同時に使用されたときの奇妙な振る舞い

void newFunction(int i, int j, int k); 

int main() 
{ 
    FILE *fp; 
    /...opens text file.../ 
    newFunction(fgetc(fp), fgetc(fp), fgetc(fp)); 
} 

void newFunction(int i, int j, int k) 
{ 
    printf("%d %d %d", i, j, k,); 
} 

を「ABC」のようなものが含まれている私はa b cを期待していますが、なぜ私のコードはc b aを与えるのでしょうか?

+4

引数がどの順序で評価されるかは定義されていません。 –

+0

@Someprogrammerdudu優先順位はどうですか?私はかっこで囲むようにします。 – reiallenramos

+2

*演算子*の優先順位はそれとは関係ありません。引数は任意の順序で評価できます。どのfgetcコールが最初に呼び出されるかはわかりません。読んでください。 [この評価順序の参照](http://en.cppreference.com/w/c/language/eval_order)を参照してください。 –

答えて

0
void newFunction(int i, int j, int k); 

int main() 
{ 
    FILE *fp; 
    /...opens text file.../ 
    int i = fgetc(fp); 
    int j = fgetc(fp); 
    int k = fgetc(fp); 
    newFunction(i,j,k); 
} 

void newFunction(int i, int j, int k) 
{ 
    printf("%d %d %d", i, j, k); 
} 

パラメータを評価するために曖昧さを避けるために上記を行うことができます。

+1

はい。また、コードのデバッグ、保守、または強化が必要な人の健全性を維持するのにも役立ちます。 – ThingyWotsit

関連する問題