3

float 変数を含む構造体があり、

struct MyStruct{
    float p;
}newMyStruct;

そして、私はそれに値を読み込んでいますscanf

int main(){
    scanf("%f",&(newMyStruct.p));
}

問題は、printf("%f",newMyStruct.p)「0.000000」を印刷して印刷するときです。また、引数が double であるという警告が表示されますが、形式は float であることが期待されます (scanf("%f",&(newMyStruct.p));ステートメントの警告) 。scanf()構文を scanf("%0f",&(newMyStruct.p));に変更するとprintf("%0f",newMyStruct.p);、float 値が正しく出力されますが、コンパイラは別の警告を表示します (精度が 0 であることに関連するもの) )。またprintf("%2f",newMyStruct.p)、浮動小数点数を他の形式で出力します。

したがって、私の質問は、これらの警告をすべて取り除き、適切に出力できる適切な float 変数を読み取るにはどうすればよいかということです。

私は通常、コードを書いているラップトップにアクセスできないため、適切な警告を提供できません。

4

1 に答える 1

5

編集:

問題を再現できません。gcc でコンパイルされた次のコードを使用すると、すべてが期待どおりに機能します。

#include <stdio.h>

struct MyStruct {
  float p;
} newMyStruct;

int main() {
  scanf("%f", &(newMyStruct.p));
  printf("%f\n", newMyStruct.p);
}

gcc --version の出力は次のとおりです。

gcc (デビアン 4.7.2-5) 4.7.2

于 2013-10-08T17:42:50.263 に答える