C ++递归重复输出

时间:2014-09-10 15:26:41

标签: c++

我有这段代码:

#include <iostream>
#include <vector>
#include <ctime>
#include <math.h>
#include <string>

using namespace std;

int main()
{
    srand(time(0));
    string command_one;
    int slot;
    cout<<"One chip or Quit?\n";
    getline(cin, command_one);
    if(command_one=="One chip"){
        cout<<"Pick a slot between 0 and 8 (inclusive)\n";
        cin>>slot;
        if(slot>=0 and slot<=8){
            double position=slot;
        }
        else{
            cout<<"This Option is invalid!\n";
            main();
        }
    }
    else if(command_one=="Quit"){
        cout<<"Have a nice day! :D";
    }
    else{
        cout<<"This Option is invalid!\n";
        main();
    }
}

当它碰到嵌套在if(command_one ==“One chip”)中的else循环时,它返回到
“此选项无效!
一个芯片,多芯片,或退出?
此选项无效!
单芯片,多芯片还是退出?“

但它应该是:

“此选项无效!
单芯片,多芯片还是退出?“

如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

cin>>slot;

这会在流的缓冲区中的数字后面留下换行符。下一次调用getline会发现,给出一个空行。

您可以使用ignore忽略换行符中的换行符和其他任何垃圾:

cin.ignore(-1, '\n'); // ignore any number of characters up to and including new-line

请注意,不允许调用main(尽管某些编译器可能允许);这样的无限递归最终可能导致堆栈溢出。请考虑使用循环。

答案 1 :(得分:0)

std::getline

  

从输入中提取字符并将其附加到str,直到出现以下情况之一(按所列顺序检查)
  a)输入的文件结束条件,在这种情况下,getline设置eofbit   b)下一个可用输入字符是delim,由Traits::eq(c, delim)测试,在这种情况下分隔符字符是从输入中提取的,但不会附加到str

因此,您需要使用剩余的\n字符。

答案 2 :(得分:0)

cin没有\n字符。getline()将其作为空行输入。设置getchar()以获取\n个字符。

#include <iostream>
#include <vector>
#include <ctime>
#include <math.h>
#include <string>
#include <stdio.h>

using namespace std;

int main()
{
    string command_one;
    int slot;
    cout<<"One chip or Quit?\n";
    getline(cin, command_one);
    if(command_one=="One chip")
    {
        cout<<"Pick a slot between 0 and 8 (inclusive)\n";
        cin>>slot;

        //putting a getchar() after cin

        getchar();
        if(slot>=0 and slot<=8)
        {
            double position=slot;
        }
        else
        {
            cout<<"This Option is invalid!\n";
            main();
        }
    }
    else if(command_one=="Quit")
    {
        cout<<"Have a nice day! :D";
    }
    else
    {
        cout<<"This Option is invalid!\n";
        main();
    }
}