我是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而不使用字符串来完成此操作。我不希望输入负数和浮点数。为什么这不起作用?
答案 0 :(得分:4)
转换指令%lf
用于扫描double
s。
要扫描long double
,请使用%Lf
,大写L
。
来自fscanf
(7.21.6.2)
l (ell)指定以下d,i,o,u,x,X或n转换说明符适用 带有指向
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
的参数。