gpt4 book ai didi

c++ - 使用 stringstream 和 if-else 语句时的字符串输入错误

转载 作者:行者123 更新时间:2023-11-30 05:29:05 25 4
gpt4 key购买 nike

我正在尝试编写一段大型代码的一部分,其中用户输入一个包含 2 个数字的字符串,然后从该字符串中解析每个数字以进行简单的加法(现在只是想测试解析)。

我使用 stringstream 进行解析,这似乎有效,但使用此代码计算多个案例无效。请查看下面的代码和输出;

#include <iostream>
#include <sstream>


int main()
{
int t;

std::cout << "Enter the number of test cases: ";
std::cin >> t;
std::cout << std::endl;

if (t > 10 || t < 1)
{
std::cout << "Invalid number of test cases!" << std::endl;
return 0;
}
else
{

for (int x = 0; x < t; x++)
{
std::stringstream numbers;
int num_1;
int num_2;

std::cout << "Enter the two numbers (separated by a space): " << std::endl;
std::string input;

getline (std::cin, input);

numbers << input;

numbers >> num_1 >> num_2;

std::cout << num_1 << std::endl;
std::cout << num_2 << std::endl;
std::cout << num_1 + num_2 << std::endl;
}
}

return 0;

}

Code Output

代码输出

Enter the two numbers (separated by a space):
0
-13120
-13120

Enter the two numbers (separated by a space):
1 3
1
3
4

Enter the two numbers (separated by a space):
4 5
4
5
9

Enter the two numbers (separated by a space):
6 7
6
7
13

为什么第一个案例不接受输入?

最佳答案

将 main 早期的代码更改为:

std::cout << "Enter the number of test cases: ";
std::cin >> t; std::cin.ignore();

当您cin>>t 时,它会读入您提供的数字,然后停止。您的下一个输入是 getline,它读取到下一行的结尾……这是您在测试用例数之后键入的行。因此,您在第一个输入中使用了一个空行。

cin.ignore() 告诉它跳过那个空行并继续你接下来输入的任何内容。

关于c++ - 使用 stringstream 和 if-else 语句时的字符串输入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36539193/

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