0

私はCの初心者で、ここに私の問題があります。C++ では、この方法で不正な入力 (unsigned int ではない) を探します。

long double c;
cin >> c;

if (c == (unsigned int) c) {
cout<<"OK";    
}
else
cout<<"NOT OK";

しかし、今Cを学んでいるとき、私は同じようにやろうとしていますが、うまくいきません:

long double c;
scanf("%lf", &c);

if (c == (unsigned int) c) {
printf("OK\n");    
}
else
printf("NOT OK\n");    

それを修正する方法について何かアドバイスはありますか?私の仕事は、scanf を使用し、文字列を使用せずにこれを行うことです。負数と浮動小数点数を入力したくありません。なぜこれが機能しないのですか?

4

1 に答える 1

4

変換ディレクティブ%lfは s をスキャンするためのものdoubleです。

long doublesをスキャンする%Lfには、大文字の を使用しLます。

fscanf(7.21.6.2)の仕様より

l (エル) 後続の d、i、o、u、x、X、または n 変換指定子が or へのポインター型の引数に適用されることを指定しlong intますunsigned long int次の a、A、e、E、f、F、g、または G 変換指定子は、型へのポインターの引数に適用されますdouble。または、後続の c、s、または [ 変換指定子が へのポインター型の引数に適用されますwchar_t

L後続の a、A、e、E、f、F、g、または G 変換指定子が へのポインター型の引数に適用されることを指定しますlong double

于 2013-03-26T20:59:00.680 に答える