0

我是 C 语言的初学者,这是我的问题。在 C++ 中,我会以这种方式查找错误的输入(不是无符号整数):

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用于扫描doubles。

要扫描long doubles,请使用%Lf, 大写字母L

根据fscanf(7.21.6.2)的规范

l (ell) 指定后面的 d、i、o、u、x、X 或 n 转换说明符适用于类型指针指向long intor的参数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 回答