在 C++ 中输入空白行之前,如何要求用户输入整数?
How to ask for integer input from the user until he enters blank line in C++?
所以我需要将用户输入存储在一个向量中,直到他输入一个空行(或无效输入)。我试图将输入转换为字符串,然后将其与空白行进行比较,但没有成功。这是代码:
int input;
vector<int> v;
do
{
cout << "Write a number!" << endl;
cin >> input;
v.push_back(input);
} while (to_string(input) != "");
有什么办法吗?
更新
非常感谢你们的帮助!第二个答案解决了我所有的问题,第一个帮助我理解了它的逻辑背景。
您可以反转您的逻辑:您可以读取字符串,检查它们是否为空,然后将它们转换为整数,而不是读取整数直到某些东西 =21=].
std::string input;
std::vector<int> v;
std::getline(std::cin, input);
while(!input.empty())
{
int number = std::stoi(input);
v.push_back(number);
std::getline(std::cin, input);
}
请注意 std::cin
将不起作用,因为它会忽略空格(包括换行符)。此外,将 std:: cin >>
与 std::getline
混合是 a bad idea
使用标准函数std::getline
。这是一个演示程序
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::vector<int> v;
while ( true )
{
std::cout << "Enter a number (Enter - exit): ";
std::string line;
if ( not std::getline( std::cin, line ) or line.empty() ) break;
try
{
int value = std::stoi( line );
v.push_back( value );
}
catch ( ... )
{
std::cout << "Not an integer number\n";
}
}
for ( const auto &item : v ) std::cout << item << ' ';
std::cout << '\n';
return 0;
}
它的输出可能看起来像
Enter a number (Enter - exit): 1
Enter a number (Enter - exit): 2
Enter a number (Enter - exit): 3
Enter a number (Enter - exit): A
Not an integer number
Enter a number (Enter - exit): 4
Enter a number (Enter - exit): 5
Enter a number (Enter - exit):
1 2 3 4 5
所以我需要将用户输入存储在一个向量中,直到他输入一个空行(或无效输入)。我试图将输入转换为字符串,然后将其与空白行进行比较,但没有成功。这是代码:
int input;
vector<int> v;
do
{
cout << "Write a number!" << endl;
cin >> input;
v.push_back(input);
} while (to_string(input) != "");
有什么办法吗?
更新
非常感谢你们的帮助!第二个答案解决了我所有的问题,第一个帮助我理解了它的逻辑背景。
您可以反转您的逻辑:您可以读取字符串,检查它们是否为空,然后将它们转换为整数,而不是读取整数直到某些东西 =21=].
std::string input;
std::vector<int> v;
std::getline(std::cin, input);
while(!input.empty())
{
int number = std::stoi(input);
v.push_back(number);
std::getline(std::cin, input);
}
请注意 std::cin
将不起作用,因为它会忽略空格(包括换行符)。此外,将 std:: cin >>
与 std::getline
混合是 a bad idea
使用标准函数std::getline
。这是一个演示程序
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::vector<int> v;
while ( true )
{
std::cout << "Enter a number (Enter - exit): ";
std::string line;
if ( not std::getline( std::cin, line ) or line.empty() ) break;
try
{
int value = std::stoi( line );
v.push_back( value );
}
catch ( ... )
{
std::cout << "Not an integer number\n";
}
}
for ( const auto &item : v ) std::cout << item << ' ';
std::cout << '\n';
return 0;
}
它的输出可能看起来像
Enter a number (Enter - exit): 1
Enter a number (Enter - exit): 2
Enter a number (Enter - exit): 3
Enter a number (Enter - exit): A
Not an integer number
Enter a number (Enter - exit): 4
Enter a number (Enter - exit): 5
Enter a number (Enter - exit):
1 2 3 4 5