我想知道如何使用std::cin
將輸入值限制爲帶符號的小數。如何驗證數字輸入C++
6
A
回答
2
double i;
//Reading the value
cin >> i;
//Numeric input validation
if(!cin.eof())
{
peeked = cin.peek();
if(peeked == 10 && cin.good())
{
//Good!
count << "i is a decimal";
}
else
{
count << "i is not a decimal";
cin.clear();
cin >> discard;
}
}
這也給出了一個錯誤消息,其中輸入-1a2.0避免了只給-1分配給i。
11
如果cin
的支持變量是一個數字,而所提供的字符串不是數字,則返回值是假的,所以你需要一個循環:
int someVal;
while(!(cin >> someVal)) {
cin.reset();
cout << "Invalid value, try again.";
}
-5
喜歡的東西:
double a;
cin >> a;
應該讀取您簽名的「十進制」罰款。
您需要一個循環和一些代碼來確保它以合理的方式處理無效輸入。
祝你好運!
1
cin's >>操作符通過一次讀取一個字符來工作,直到遇到空格爲止。這將誹謗整個字符串-1a2.0
,這顯然不是一個數字,所以操作失敗。看起來你實際上有三個字段,-1,a和2.0。如果你用空格分隔數據,cin將能夠毫無問題地讀取每一個數據。請記住閱讀第二場的char
。
0
我不想粗魯。我只是想分享我提供的解決方案,我認爲它更強大,並允許更好的輸入驗證。
0
我試過很多方法從使用>>
運營商用戶閱讀整數輸入,但在這種或那種方式我所有的實驗都失敗了。
現在我認爲getline()
功能(不與std::istream
相同名稱的方法)和strtol()
功能從包括cstdlib
是這個問題的唯一可預測的一致的解決方案。如果有人證明我錯了,我將不勝感激。這是像我使用的一個:
#include <iostream>
#include <cstdlib>
// @arg prompt The question to ask. Will be used again on failure.
int GetInt(const char* prompt = "? ")
{
using namespace std; // *1
while(true)
{
cout << prompt;
string s;
getline(cin,s);
char *endp = 0;
int ret = strtol(s.c_str(),&endp,10);
if(endp!=s.c_str() && !*endp)
return ret;
}
}
- * 1:配售
using namespace whatever;
全球範圍可能引發斷「團結構建」(!谷歌)的大型項目,所以應儘量避免。儘量不要使用這種方式,即使在較小的項目中! - 從文件中讀取整數是一個非常不同的問題。如果解決得當,勞爾·羅阿的方法可以做得很好。我也建議不應該容忍錯誤的輸入文件,但它確實取決於應用程序。
- 請注意,在
cin
的同一程序中使用>>
和getline()
會導致一些問題。只使用其中一個,或谷歌知道如何處理這個問題(不是太難)。
1
輸入。ħ
#include <ios> // Provides ios_base::failure
#include <iostream> // Provides cin
template <typename T>
T getValidatedInput()
{
// Get input of type T
T result;
cin >> result;
// Check if the failbit has been set, meaning the beginning of the input
// was not type T. Also make sure the result is the only thing in the input
// stream, otherwise things like 2b would be a valid int.
if (cin.fail() || cin.get() != '\n')
{
// Set the error state flag back to goodbit. If you need to get the input
// again (e.g. this is in a while loop), this is essential. Otherwise, the
// failbit will stay set.
cin.clear();
// Clear the input stream using and empty while loop.
while (cin.get() != '\n')
;
// Throw an exception. Allows the caller to handle it any way you see fit
// (exit, ask for input again, etc.)
throw ios_base::failure("Invalid input.");
}
return result;
}
用法
inputtest.cpp
#include <cstdlib> // Provides EXIT_SUCCESS
#include <iostream> // Provides cout, cerr, endl
#include "input.h" // Provides getValidatedInput<T>()
int main()
{
using namespace std;
int input;
while (true)
{
cout << "Enter an integer: ";
try
{
input = getValidatedInput<int>();
}
catch (exception e)
{
cerr << e.what() << endl;
continue;
}
break;
}
cout << "You entered: " << input << endl;
return EXIT_SUCCESS;
}
樣品運行
輸入一個整數:一個
輸入無效。
輸入整數:2b
輸入無效。
輸入一個整數:
您輸入:3
相關問題
- 1. 如何驗證輸入是數字?
- 2. 數字輸入驗證
- 3. C++輸入驗證
- 4. 驗證輸入C
- 5. 數字輸入的輸入驗證
- 6. 如何驗證輸入只接受12位數字的輸入?
- 7. 在C中驗證輸入字段#
- 8. 如何驗證輸入字段?
- 9. Python - 如何驗證tkinter輸入字段
- 10. 驗證輸入 - 數字與字母
- 11. 驗證在C輸入
- 12. C++輸入驗證(時間)
- 13. C++ 11 cin輸入驗證
- 14. C fscanf輸入驗證
- 15. 驗證用戶輸入C#
- 16. 驗證輸入的DateTime C#
- 17. 驗證輸入程序C++
- 18. C++模板輸入驗證
- 19. 使用C輸入驗證
- 20. 如何驗證textField輸入?
- 21. 如何驗證DataGridView輸入?
- 22. C++數組輸入和退出驗證
- 23. 函數驗證輸入C++簡單
- 24. C#輸入驗證檢查正數
- 25. 如何對輸入進行驗證?號或字母.. C編程
- 26. 如何限制或驗證輸入字段輸入重複的數字?
- 27. 驗證隻字母輸入
- 28. kotlin驗證輸入字段
- 29. 驗證輸入字符串
- 30. 驗證字符串輸入
play.cpp:10:錯誤: '結構的std :: istream的' 沒有名爲成員 '復位' – Ziggy 2011-09-22 23:12:54
並且還 - 如果我更換復位()與clear(),你的意思與否 - 當給出一個非數字輸入時,它會導致無限循環。 – Notinlist 2011-10-10 07:46:53