如何使用char获得多个输入并使用int获得多个输出? C ++

时间:2019-04-07 04:06:04

标签: c++

我对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:该程序将罗马数字字符转换为受尊重的数字。

感谢您的帮助!

3 个答案:

答案 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;
}