【问题标题】:Inputting numbers separated by spaces输入以空格分隔的数字
【发布时间】: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 与&gt;&gt; 混合在一起
  • 离题:atoi(rawInput[j]); 考虑改为 rawInput[j] - '0'; atoi 想要一个指向字符数组的指针。你只给它一个字符。如此多的远离话题。对不起。
  • 正如@user4581301 所说,也可以尝试其他方式。通常atoi 用于转换传递给程序的命令行参数,而不是用户输入。
  • k = k++; 如果不是未定义的行为,将是多余的。 Crom 只知道是 k=k 还是 k++ 会先执行。如果您希望 k 增加 1(AKA k= k+1;),k++ 就足够了

标签: c++ atoi


【解决方案1】:

如果您只是想收集一系列由空格分隔的整数作为用户输入..即1 2 3 4 5,您不必使用getline 方法。

对于这样的条件,您可以重做 while 循环:

int input;

while (cin >> input)
{
    <<HANDLE INPUT>>
}

这大大减少了您尝试执行的行解析,并且只要有一个整数可以捕获该行上的下一个输入整数。循环迭代将像上面相同的系列一样......

Loop #      Input Taken
1           1
2           2
3           3
...         ...

这种方式不需要解析,因为它每次迭代都会处理一个整数输入。

【讨论】:

    猜你喜欢
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 2021-06-12
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2013-11-12
    相关资源
    最近更新 更多