首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++递归重复输出

C++递归重复输出
EN

Stack Overflow用户
提问于 2014-09-10 15:26:41
回答 3查看 242关注 0票数 2

我有这样的代码:

代码语言:javascript
复制
#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==“一个芯片”)中的else循环时,它返回

“此选项无效!

一个芯片,多芯片,还是退出?

此选项无效!

一个芯片,多芯片,还是退出?“

但应该是:

“此选项无效!

一个芯片,多芯片,还是退出?“

怎么解决这个问题呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-10 16:23:10

cin不接受\n字符,getline()将其作为空行输入。放置一个getchar()来接受\n字符。

代码语言:javascript
复制
#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();
    }
}
票数 0
EN

Stack Overflow用户

发布于 2014-09-10 15:33:44

代码语言:javascript
复制
cin>>slot;

这将在流的缓冲区中的数字后面保留新行字符。下一个对getline的调用将发现这一点,给出一个空行。

您可以使用ignore忽略新行字符和行尾的任何其他垃圾:

代码语言:javascript
复制
cin.ignore(-1, '\n'); // ignore any number of characters up to and including new-line

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

票数 1
EN

Stack Overflow用户

发布于 2014-09-10 15:34:19

std::getline

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25769340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档