使用一系列 getlines 从用户输入中提取元素时遇到问题

Trouble using a series of getlines to extract elements from user input

很抱歉这个简单的问题,但我在其他地方找不到已经可用的答案。

我正在构建一个分数计算器,它可以加、减、除或乘两个分数(例如 4/3 + 5/2)。然而,首先,我需要解析出用户输入的不同元素,例如算术运算符,以及两个分数的分子和分母,并存储这些元素,以便后续操作它们。

我想使用一系列 getline(string),同时更改默认定界符以丢弃空格和 / 符号。但是,当我尝试执行我的程序时,getline(string) 似乎有问题。

有人能指出我的业余错误吗?编译器没有抛出任何错误,所以我有点不知道它可能是什么。

编辑:在帮助下我已经能够解决问题。谢谢大家

#include <string>
#include <iostream>

using namespace std;

int main()
{

string numeratorfirst;
string denominatorfirst;
string arithoperator;
string numeratorsecond;
string denominatorsecond;

cout << "Enter the two fractions and the operator you want to use(IE: 3/4 + 4/6): ";
getline(cin, numeratorfirst, '/');
getline(cin, denominatorfirst, ' ');
getline(cin, arithoperator);
getline(cin, numeratorsecond, '/');
getline(cin, denominatorsecond, ' ');

cout << " " << endl;

cout << "Your fraction is: " <<  numeratorfirst << "/" << denominatorfirst << " " << arithoperator << " " << numeratorsecond << "/" << denominatorsecond << endl;


system("pause");

return 0;
}

使用 scanf() 可能更容易:

int numeratorfirst;
int denominatorfirst;
char arithoperator;
int numeratorsecond;
int denominatorsecond;

cout << "Enter the two fractions and the operator you want to use(IE: 3/4 + 4/6): ";

int tokens = scanf("%d/%d %c %d/%d", &numeratorfirst, &denominatorfirst,
                   &arithoperator, &numeratorsecond, &denominatorsecond);
if (tokens != 5)
    return 1;

这有效,它会拒绝无效输入,例如 "foo/bar + baz/qux"。

如果您想要 "more C++ like" 解决方案,试试这个:

int numeratorfirst, denominatorfirst, numeratorsecond, denominatorsecond;
char slashfirst, slashsecond;
char arithoperator;

cout << "Enter the two fractions and the operator you want to use(IE: 3/4 + 4/6): ";

cin >> numeratorfirst >> slashfirst >> denominatorfirst >> arithoperator
    >> numeratorsecond >> slashsecond >> denominatorsecond;
if (!cin || slashfirst != '/' || slashsecond != '/')
    return 1;