gpt4 book ai didi

C++ I/O 流问题 : program asks for input twice or work incorrectly

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:59 25 4
gpt4 key购买 nike

我正在尝试编写一个程序,从命令行读取输入为 int,如果用户输入 int,程序打印“Input is”+ number 如果用户输入的类型不正确,则输出“wrong input” ”。这是我的代码:

#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 >> 输入;(案例 1)程序在输入正确的整数时要求输入两次;如果用户输入“2.2”或“a”,它会打印“错误的格式输入”。

没有cin >> input; (case-2) 当输入正确的整数时,程序要求输入一次; 但是当用户输入“2.2”时它会打印“输入为 2”,而不是打印“错误”消息,程序会打印“输入为 2”。

我的代码中的哪一部分出错了?我该如何解决这个问题?

对于案例 2: enter image description here

最佳答案

下面是允许在同一行输入多个整数但不允许任何其他内容的示例

#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";
}
}
}

关于C++ I/O 流问题 : program asks for input twice or work incorrectly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46087288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com