我对C ++还是很陌生,所以如果我听起来不熟练,我深表歉意。我在使用代码获取多个输入和输出时遇到了一些麻烦,我想应该有一个循环来获取数据,但是我不确定如何在代码中进行处理关于使用getline()的方法,但似乎不想与Char一起使用。
我已经尝试过getline,但是我不确定如何用Char输入来实现它,我相信我可能也需要一个单独的循环,但又不太确定。我在想也可以对EoF进行。
这是我的代码:
int main()
{
char inpval;
int outval = 0;
cout << "Enter a Roman Number to convert: " << endl;
while (cin.get(inpval))
{
inpval = toupper(inpval);
if (inpval == 'M')
outval = outval + 1000;
else if (inpval == 'D') {
inpval = cin.peek();
inpval = toupper(inpval);
if (inpval == 'M') {
outval = outval - 500;
continue;
} else {
outval = outval + 500;
continue;
}
}
//etc
cout << "The Equivalent Arabic value is:" << endl;
cout << outval << "\n";
return 0;
}
我的预期输出是:
(全部在换行符上) 输入: 一世 II IV V VI
输出: 1个 2 4 5 6
实际输出为:
输入: 我
输出: 1
P.S:该程序将罗马数字字符转换为受尊重的数字。
感谢您的帮助!
答案 0 :(得分:0)
您可以使用以下语法从cin输入多个项目。
cin >> a;
cin >> b;
cin >> c;
还有另一种方法
cin >> a >> b >> c;
此技术称为“操作员链接”,与上面类似。
答案 1 :(得分:0)
方法1:使用getchar()
,将罗马数字计算/转换为整数,直到遇到空格'',当得到空格' '
时,输出整数并执行相同的下一个罗马数字,直到得到另一个空格' '
或换行符'\n'
,并在遇到换行符'\n'
后停止程序。
方法2:使用类型std::string
,然后输入getline
。然后遍历字符串并进行计算,直到找到空格' '
为止,然后输出数字,直到找到下一个空格' '
或字符串结束时结束为止。
如果您知道#个罗马数字要转换,则可以将其循环。 希望这会有所帮助。
示例(方法2)
#include <bits/stdc++.h>
int value(char r)
{
if (r == 'I')
return 1;
if (r == 'V')
return 5;
if (r == 'X')
return 10;
if (r == 'L')
return 50;
if (r == 'C')
return 100;
if (r == 'D')
return 500;
if (r == 'M')
return 1000;
return -1;
}
int main()
{
int out=0;
std::string s;
std::string::iterator i; //string iterator
//for more info go to https://www.geeksforgeeks.org/stdstring-class-in-c/
getline(std::cin,s);
for (i = s.begin(); i!= s.end() ; ++i)
{
if(*i != ' ')//Encounter a space, output result and
{ //go to next roman numeral
int s1 = value(*i);
if (*(i+1) != ' ' || *(i+1) != '\0')
{
// Getting value of i+1 nth Element
int s2 = value(*(i+1));
// Comparing both values
if (s1 >= s2)
{
// Value of current symbol is greater
// or equal to the next symbol
out = out + s1;
}
else
{
out = out + s2 - s1;
i++; // Value of current symbol is
// less than the next symbol
}
}
else
{
out = out + s1;
i++;
}
}
else
{
std::cout<<out<<" ";
out = 0;
}
}
std::cout<<out<<" ";
std::cout<<std::endl;
return 0;
}
输入:
I II MM MCMIV
输出:
1 2 2000 1904
答案 2 :(得分:0)
这样做有什么问题吗?
cout << "Enter a Roman Numeral" << endl;
string inpval;
cin >> inpval;
while (inpval != "exit")
{
int outval = 0;
if (inpval == "I")
outval = 1;
else if (inpval == "II")
outval = 2;
else if (inpval == "III")
outval = 3;
else if (inpval == "IV")
outval = 4;
// ect
cout << "The Equivalent Arabic value is: " << outval << endl << endl;
cout << "Enter next numeral: (type exit to exit) " << endl;
cin >> inpval;
}