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