c++ - 为什么我的 while 循环不接收新输入 (c++)

标签 c++ input while-loop

我编写了一个程序来获取用户输入的字符串并将其解析为标记并根据输入移动机器人。我的问题是试图发出多个命令。代码如下:

void Navigator::manualDrive()
{

    const int bufSize = 42;
    char uinput[bufSize];
    char delim[] = " ";
    char *token;
    while(true)
    {

        Navigator::parseInstruction(uinput);
    }
}  
/* parseInstruction(char *c) -- parses cstring instructions received
* and moves robot accordingly
*/


void Navigator::parseInstruction(char * c)
{

    const int bufSize = 42;
    char uinput[bufSize];
    char delim[] = " ";
    char *token;


    cout << "Enter your directions below: \n";
    cin.ignore();
     cin.getline (uinput, bufSize);


    token=strtok(uinput, delim);
    if(strcmp("forward", token) == 0)
    {
        int inches;
        token = strtok(NULL, delim);
        inches = atoi (token);
        Navigator::travel(inches);
    }
    if(strcmp("back",token) == 0)
    {
        int inches;
        token = strtok(NULL, delim);
        inches = atoi (token);
        double value = fabs(0.0735 * fabs(inches) - 0.0550);
        myRobot.backward(1/*speed*/, value/*time*/);
    }
    if(strcmp("turn",token) == 0)
    {
        int degrees;
        token = strtok(NULL, delim);
        if(strcmp("left",token) == 0)
        {
            token = strtok(uinput, delim);
            degrees = atoi (token);
            double value = fabs(0.0041 * degrees - 0.0523);
            myRobot.turnLeft(1/*speed*/, value/*time*/);
        }
    }
    if(strcmp("turn",token) == 0)
    {
        int degrees;
        token = strtok(NULL, delim);
        if(strcmp("right",token) == 0)
        {
            token = strtok(uinput, delim);
            degrees = atoi (token);
            double value = fabs(0.0041 * degrees - 0.0523);
            myRobot.turnRight(1/*speed*/, value/*time*/);
        }
    }
    if(strcmp("stop",token) == 0)
    {
        myRobot.motors(0,0);
    }
}

在函数 manualDrive 中,我有一个 while 循环无限调用函数 parseInstruction。程序输出“在下面输入您的指示:”当我给出程序指令时,它会执行它们,然后再次输出“在下面输入您的指示:”,当我再次输入我的指示时,它不会执行它们并输出“输入您的指示”下面:“代替。我确定这是一个非常简单的修复程序,我只是 c++ 的新手。所以,如果你能帮帮我,告诉我为什么这个程序只接受第一组指示。谢谢

最佳答案

这听起来像是当您的 cin 命令从上一个输入中读入换行符时发生的常见问题。我看到您有 cin.ignore(),这通常是解决该问题的方法,但它仍然在发生。

尝试将忽略移动到 getline() 命令之后

关于c++ - 为什么我的 while 循环不接收新输入 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2625914/

相关文章:

c++ - 将 QString 转换为 const char* 时不可预测的运行时行为

c++ - 在没有模板的情况下声明函数模板实例化

html - 如何告诉浏览器输入的密码不是表单或登录名?

c - 如何标记 c 中的整行输入?

c++ - 虽然不断重复字母但不重复#'s

mysql - 如何从每个循环的 mysql_fetch_array 的 while 循环中获取行号?

c++ - C/C++ : Easily unzip to memory

c++ - Qt - 创建主窗口之前的非模态对话框

Android - 在用户启用输入法后关闭 IME 设置 Activity

android - 崩溃时进入Android应用