不幸的是,限制輸入的字符的數量在C++中沒有可移植的方法。但是無論您使用哪種平臺都會提供一些機制:例如在Windows上,查找Console functions。
如果用普通的舊C++輸入輸出流輸入去從cin
,這是一個好主意,閱讀的初始文本爲std::string
使用istream& getline(istream&, string&)
- 這將防止緩衝區溢出,因爲string
S調整是必要的。 (您涉及getline(InputMain, 5, '\n')
碼在技術上是安全的,因爲它不會讀取超過5個字符爲InputMain
,但是這個代碼是脆弱的 - 如果你以後決定要6個字符,你可以很容易忘記更新您的來電malloc()
,領先。死機另外,你需要記住free(InputMain)
但正如我所說,使用string
代替)
關於解析:。
無論您使用getline(cin, str)
或讀取輸入到string
一些特定平臺的代碼,一旦它在那裏,你需要以數字的形式出來。這就是istringstream
類是有用的 - 它可以讓你把一個現有string
作爲流從閱讀,因此,您可以使用格式化的輸入>>
操作:如果您使用C++輸入輸出流
string str;
if (!getline(cin, str)) {
cerr << "Something went seriously wrong...\n";
}
istringstream iss(str);
int i;
iss >> i; // Extract an integer value from the stream that wraps str
if (!iss) {
// Extraction failed (or a more serious problem like EOF reached)
cerr << "Enter a number dammit!\n";
} else if (i < 1000 || i > 9999) {
cerr << "Out of range!\n";
} else {
// Process i
}
,你可實際上只是從cin
直接提取的,而不是通過string
去和istringstream
:
int i;
cin >> i; // Extract an integer value from cin
然而,這可能會有細微的不良影響;值得注意的是,用戶輸入的行上的任何附加字符(特別是按Enter鍵時輸入的'\n'
)將保留在輸入緩衝區中,以便在接下來的<<
操作中讀取。通常這並不重要,但有時確實如此:例如如果你跟進cin.get();
,預計這將等待一個按鍵,它不會 - 它只是讀取'\n'
(或第一個非數字字符的用戶輸入)。
這聽起來很像功課 – lothar 2009-04-17 17:07:51