错误的输入C vs C ++ cin vs scanf

时间:2013-03-26 20:55:38

标签: c++ c scanf cin

我是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而不使用字符串来完成此操作。我不希望输入负数和浮点数。为什么这不起作用?

1 个答案:

答案 0 :(得分:4)

转换指令%lf用于扫描double s。

要扫描long double,请使用%Lf,大写L

来自fscanf(7.21.6.2)

的规范
  

l (ell)指定以下d,i,o,u,x,X或n转换说明符适用   带有指向long intunsigned 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的参数。