提问者:小点点

如何从一个输入得到2个整数值?[已关闭]


我才上十年级,有一个练习,我必须得到一个输入,比如(输入=1/2),这个输入需要存储在两个不同的整数中,我不知道怎么做。

感谢任何帮助。

抱歉,如果这个问题听起来很蠢,但这是我第一次在这里发帖,我不知道礼仪。

提前谢谢!


共3个答案

匿名用户

只需使用现有的iostream功能即可。那并不复杂。不需要进行字符串分析。插入器运算符将跳过空格。此外,它还会将给定的值转换为整数变量。斜杠将被读取,检查,然后丢弃。

#include <iostream>

int main() {
    int number1{}, number2{};
    char slash{};

    std::cout << "\nEnter a string: ";

    if (std::cin >> number1 >> slash >> number2 && slash == '/') {
        std::cout << "\n\nNumber 1: " << number1 << "\nNumber 2: " << number2 << "\n\n";
    }
    else {
        std::cerr << "\nError: invalid input\n\n";
    }
    return 0;
}

匿名用户

读取两个整数,忽略/匹配它们之间的字符。与角色匹配的最好方法是一个操纵者:

std::istream& slash(std::istream& in) {
    if ((in >> std::ws).peek() == '/') {
        in.ignore();
    }
    else {
        in.setstate(std::ios_base::failbit);
    }
    return *this;
}

int main() {
    int numerator, denominator;
    if (std::cin >> numerator >> slash >> denominator) {
        std::cout << " read " << numerator << '/' << denominator << '\n';
    }
}

匿名用户

解决方案:

将输入作为std::string,然后解析它。

完整代码:

#include <iostream>

std::pair<int,int> inputNumbers()
{
    std::string input;
    std::cout << "Input: ";
    std::cin >> input;
    size_t slashPos = input.find('/');
    if(slashPos == input.npos)
    {
        std::cout << "Error! Please try again.\n";
        exit(0);
    }
    return {std::stoi(input.substr(0,slashPos)),std::stoi(input.substr(slashPos + 1,input.size()-slashPos-1))};
}

int main() {
    std::pair<int,int> inputs = inputNumbers();
    std::cout << "First number: " << inputs.first << ". Second number: " << inputs.second << ".\n";
}