所以我正在进行acm编程练习问题而且我总是停留在从用户那里获取输入。我正在使用C ++。所以我需要读取用户的输入,它可能是多行或我们不知道的单行。因此,如果输入如下:
2
1 2 3 4 5
2 2 2
第一行代表用户玩的游戏数量,后面的行数是分数。每场比赛结束将以换行线结束。我需要阅读这些行并将其存储在某个地方。我该怎么做呢?我看过网站,似乎大多数人都使用scanf或cin或getline,但我不知道那些是什么。
另一个例子:
12 21
13 43
1 4
A C
0 0
每一行都包含我需要添加的两个数字,用空格分隔。当我看到两个零时,输入完成。我如何阅读这些并检查它是否为0 0? 我试过像:
string num1;
while (true) {
getline(cin,num1);
if (num1.empty()) {
break;
}
}
但它没有用。请帮助我想我知道如何解决问题,但我无法从用户那里获得输入。感谢
答案 0 :(得分:0)
嗯,我从在线挑战中学到了这一点,这是我在必要时这样做的方式。
第一种情况,我认为你必须申报N个案件,所以我有:
int N;
然后,我们需要在每种情况下使用多个数字,让我们说3.所以我会这样做:
int score1[N];
int score2[N];
int score3[N];
最后,当你必须接受输入时,你会这样做:
cin >> N;
for(int i = 0; i < N; i++)
cin >> score1[i] >> score2[i] >> score3[i];
我不确定这是否是最好的方法,但这就是我在进行在线挑战时的表现。祝你好运!
答案 1 :(得分:0)
这有点粗糙和笨重,但它应该给你一些工作:
#include <vector>
#include <string>
#include <sstream>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main() {
std::cout << "Enter two numbers (0 0 to exit): ";
string num1;
while (true) {
getline(cin, num1);
string buf;
stringstream ss(num1);
vector<string> tokens; // Create vector to hold the two numbers (separately)
// Split the two numbers (by the spaces)
while (ss >> buf)
tokens.push_back(buf);
cout << "Adding " + tokens[0] << " and " << tokens[1] << endl;
int sum = atoi(tokens[0].c_str()) + atoi(tokens[1].c_str());
cout << 0 + sum;
if (num1.empty()) {
break;
}
}
}
答案 2 :(得分:0)
另一个例子:
12 21
13 43
1 4
A C
0 0
为此,您可以执行以下操作:
int a, b;
while(cin >> a >> b , !(a == 0 && b == 0)){
cout << a+b;
// any logic for input
}
并为此输入:
2
1 2 3 4 5
2 2 2
使用c++
可能会有些麻烦
vector<vector<int> > data;
int n; cin >> n;
for(int i = 0; i < n; ++i)
data.push_back(read_vector_line());
这里的棘手功能是read_vector_line
。就像这样:
vector<int> read_vector_line()
{
vector<int> ans;
string s;
getline(cin, s);
// the below line is necessary sometimes for online judges
// getchar();
int num = 0;
for(int i = 0; i < s.size(); ++i)
{
char c = s[i];
if(c == ' ')
{
ans.push_back(num);
num = 0;
}
else
{
num = num*10 + (c-'0');
}
}
return ans;
}
我不确定这段代码是否正确编译。我离开您的主意是因为我没有任何C ++编译器