【发布时间】:2016-03-12 13:22:14
【问题描述】:
我正在尝试为在线编码平台上的一个问题编写代码。我已经编写了代码,但无法获得所需格式的输入。我需要输入一个包含三个整数(比如 n1、n2 和 m)的输入。问题是输入可以是由空格分隔的数字。我尝试寻求帮助,甚至找到了一种方法,但它不起作用。
这是我的代码:
#include <string>
#include <ctype.h>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
using namespace std;
int main()
{
int t;
cout << "Enter the number of test cases" << endl;
cin >> t;
do
{
string rawInput;
int isNum, n1, n2, m, t, i, j;
int arr[3];
arr[0] = 0;
arr[1] = 0;
arr[2] = 0;
cout << "Enter a number, or numbers separated by a space, between 1 and 1000." << endl;
while (getline(cin, rawInput))
{
cout << "Rawinput" << rawInput.length();
for (i = 0; i < rawInput.length(); ++i)
{
cout << rawInput[i];
}
int j = 0, k = 0;
for (int j; j < rawInput.length(); ++j)
{
isNum = isdigit(rawInput[j]);
if (isNum)
{
arr[k] = arr[k] * 10 + atoi(rawInput[j]);
}
else
k = k++;
}
cout << "I am Array" << endl;
for (int l = 0; l < 3; l++)
cout << arr[l] << endl;
}
if (arr[0] >= arr[2] && arr[1] >= arr[2])
{
for (int i = 1; i <= arr[2]; i++)
{
if (arr[0] >= i && arr[1] >= i)
{
arr[0] = arr[0] - i;
arr[1] = arr[1] - i;
}
}
}
cout << arr[1] + arr[0];
t--;
} while (t > 0);
}
特别是 atoi 函数似乎不起作用。我尝试使用 stoi,但即使这样也不起作用。
【问题讨论】:
-
那...是很多代码。请尝试创建一个minimal reproducible example,它可以更容易诊断错误,也许你会在编写时自己发现它们。
-
另外,请查看this 答案,因为您将
getline与>>混合在一起 -
离题:
atoi(rawInput[j]);考虑改为rawInput[j] - '0';atoi想要一个指向字符数组的指针。你只给它一个字符。如此多的远离话题。对不起。 -
正如@user4581301 所说,也可以尝试其他方式。通常
atoi用于转换传递给程序的命令行参数,而不是用户输入。 -
k = k++;如果不是未定义的行为,将是多余的。 Crom 只知道是k=k还是k++会先执行。如果您希望k增加 1(AKAk= k+1;),k++就足够了