我有一个要从中读取数据的文件,数据格式为
[功能] [数字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/