我有一个要从中读取数据的文件,数据格式为
[功能] [数字1] [数字2],其中[数字2]是可选的!
例如。

+ 88 19
- 29 28
! 4
+ 2 2

上面的输出:



当行的格式为[function] [number1] [number2]时,我的代码工作得很好,但是当行中不存在[number2]时,我的代码将失败。

到目前为止,我的代码:

我正在使用的库:
iostream

cstdlib

...
while (infile >> function >> number1>> number2)
{
    switch (function)
    {
    case '+':

        addition(number1, number2);
        break;

    case '-':

        subtraction(number1, number2);
        break;

    case '!':

        factorial(number1);
        break;

...

如果不存在[number2],我该如何仅读取[number1]并在下一次读取时跳回到[function]。

感谢您的帮助,
谢谢!

最佳答案

这将是适合您的方法的一种方法,但是对输入的假设较少。请记住,此代码非常特定于您选择的格式,并100%信任您正在读取的文件是正确的。正如人们在评论中提到的那样,阅读该行并进行解析会更可靠,并且可能是您将来应该考虑的内容。但是,这确实遵循了您当前的方法,并做了一些修改。

const bool isUnary(char function)
{
    if (function == '!') return true;

    // Add further unary functions here as if/switch

    return false
}

int main()
{
    // Only read function here
    while (infile >> function)
    {
        // Prepare your numbers
        int number1{}, number2{};

        // If the function is Unary (IE: Takes one parameter)
        if (isUnary(function))
        {
            infile >> number1; // Read the one number
        }

        // Otherwise read both numbers
        else
        {
            infile >> number1;
            infile >> number2;
        }

        // Then switch on function as you otherwise would
        switch (function)
        {
        case '+':
            addition(number1, number2);
            break;
        case '-':
            subtraction(number1, number2);
            break;
        case '!':
            factorial(number1);
            break;
        }
    }

    return 0;
}

关于c++ - C++偶尔阅读,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49392727/

10-10 19:11