2013-03-26 56 views
0

我是C初學者,這裏是我的問題。在C++中我會看壞輸入(不是無符號整數)這樣說:壞輸入C vs C++ cin vs scanf

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和無字符串來完成此操作。我不想輸入負數和浮點數。爲什麼不工作?

+2

爲什麼當你希望你的輸入是'unsigned int'時,你掃描到'long double'? – Xymostech 2013-03-26 21:00:30

+0

@Xymostech *「我需要檢查負數和浮點數。」* – 2013-03-26 21:01:39

+0

@DrewDormann啊。 – Xymostech 2013-03-26 21:04:02

回答

4

轉換指令%lf用於掃描double s。

要掃描long double s,請使用%Lf,使用大寫L

fscanf(7.21.6.2)

(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的參數。

+0

長時間不是L而長時間L?它仍然無法正常工作。 Ty – user2211796 2013-03-26 21:01:56

+1

@ user2211796不,對於'long long',你使用'%lld'(或'%lli')和'll'長度修飾符。 – 2013-03-26 21:03:48

+0

@ user2211796在「它仍然不起作用」的情況下,您究竟意味着什麼,它在多大程度上不起作用? – 2013-03-26 21:05:51