1

Cの本を読んだところ、アドレス演算子を整数型(short、int、longなど)の2次元配列の要素に適用できれば、と書かれています。たとえば、型が float の場合、temp 変数を使用する必要があります。コード例:

int i, j;
int arr[4][4];
for (i = 0; i < 2; ++i)
   for (j = 0; j < 2; ++j)
       scanf("%d", &a[i][j]); /* OK because of int type */

しかし、これはOKではありません:

int i, j;
float arr[4][4];
for (i = 0; i < 2; ++i)
   for (j = 0; j < 2; ++j)
       scanf("%f", &a[i][j]); /* NOT OK because of float type - not integral type */

一時変数を使用する必要があります。

int i, j;
float temp;
float arr[4][4];
for (i = 0; i < 2; ++i)
   for (j = 0; j < 2; ++j) {
       scanf("%f", &temp); /* OK */
       a[i][j] = temp;     /* then assign back to element of 2d array */
   }

著者は、整数フィールドを持たない構造体と同じ問題を言います。

typedef struct {
    char name[20];
    int id;
    float grade;
} Student;

...

Student s;
float temp;
scanf("%d", &s.id);        /* OK becuase of integral type */
/* scanf("%f", &s.grade);  NOT OK because of float type */
scanf("%f", &temp);  /* OK */
s.grade = temp;      /* assign back */

著者はCで言うだけで、それは説明していません。Visual Studio 6.0、Visual Studio 2010 (拡張子 .c の新しいファイルを追加) でプログラムをテストしているので、temp 変数を使用しなくても正常に動作します
。履歴の問題ですか?古いCスタイル?
そして、C++ にこの制限はありますか?

4

1 に答える 1

1

私は真剣に新しい著者を見つけることを検討します:

#include <stdio.h>
int main(int argc, char *argv[])
{
    int i, j;
    float arr[4][4];
    for (i = 0; i < 2; ++i)
        for (j = 0; j < 2; ++j)
            scanf("%f", &arr[i][j]);

    for (i=0;i<2;++i)
        for (j=0;j<2;++j)
            printf("%f\n", arr[i][j]);
    return 0;
}

入力

1.01
2.01
3.01
4.01

出力

1.010000
2.010000
3.010000
4.010000

おそらく彼/彼女の理由が何であるかについてのより多くの情報が役立つでしょうが、そのような主張のためのいくつかの本当の肉を除いて、私は鳥かごにその本を並べます. 彼の主張の背後には何か歴史があるのか​​もしれません。私が推測できる唯一のことは、その性質float(つまり、実装固有の性質)です。ほとんどの人は IEEE 754 single-prec を にfloat、 double-prec を に使用しdoubleます。しかし、私は、その主張に対する彼の論理を理解しようとする際に、彼に多くの自由を与えています.

于 2013-01-24T04:12:42.173 に答える