我试图编写一个程序,从命令行读取输入为int,如果用户输入int,程序打印"输入是" +如果用户输入错误的类型输入,输出"错误的输入"。 这是我的代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
int input;
cout << "Enter an Int:" << endl;
cin >> input;
if (!(cin >> input)) {
cout << "wrong format input" << endl;
return 1;
}
cout << "input is " << input << endl;
return 0;
}
现在cin >> input;
(案例-1)程序在输入正确的整数时要求两次输入;它打印&#34;错误的格式输入&#34;如果用户输入2.2&#39;或者&#39; a&#39;。
没有cin >> input;
(case-2)程序在输入正确的整数时要求输入一次; 但打印&#34;输入为2&#34;当用户输入2.2&#39;而不是打印&#34;错误&#34;消息,程序打印&#34;输入为2&#34;。
我的代码中哪个部分出错了?我该如何解决这个问题?
答案 0 :(得分:0)
以下是允许在同一行输入多个整数的示例,但不允许其他任何内容
#include <iostream>
#include <string>
int main()
{
std::string input;
while(std::cin >> input){
size_t last;
int res;
bool good = true;
try{
res = std::stoi(input,&last);
}
catch(...){
good = false;
}
if(!good || last != input.length()){
std::cout << "Incorrect input: " << input << ", try again.\n";
}
else{
std::cout << "Integer read: " << res << '\n';
}
}
return 0;
}
/***************
Output
$ ./test
2
Integer read: 2
hello
Incorrect input: hello, try again.
2.2
Incorrect input: 2.2, try again.
1111111111111111111111111111111111111111111111111111111111111111111111
Incorrect input: 1111111111111111111111111111111111111111111111111111111111111111111111, try again.
3 4
Integer read: 3
Integer read: 4
^Z
[3]+ Stopped ./test
*/
另一个版本 - 使用stringstream
while(std::cin >> input){
std::istringstream ss(input);
int res;
ss >> res;
if(!ss){
std::cout << "Incorrect input: " << input << ", try again.\n";
}
else{
char ch = ss.get();//let's check that no more characters left in the string
if(!ss){
std::cout << "Integer read: " << res << '\n';
}
else{
std::cout << "Incorrect input: " << input << ", try again.\n";
}
}
}
答案 1 :(得分:0)
if(!(cin&gt;&gt; input))是第二次输入的原因。就这样做:
#include <iostream>
#include <string>
using namespace std;
int main() {
int input;
cout << "Enter an Int:" << endl;
cin >> input;
if (cin.fail()) {
cout << "wrong format input" << endl;
return 1;
}
cout << "input is " << input << endl;
return 0;
}