使用一系列 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;
很抱歉这个简单的问题,但我在其他地方找不到已经可用的答案。
我正在构建一个分数计算器,它可以加、减、除或乘两个分数(例如 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;