C++ 如何防止切换功能中的菜单重复自身?

C++ 如何防止切换功能中的菜单重复自身?,c++,C++,在这段代码中,a或b的一部分完成后,菜单将出现两次,如何防止这种情况发生?我怀疑这与cin有关。从第一个cout语句中获取空间。如果是这样的话,那么解决方案将是消耗空间的东西。我知道getline适用于字符串,但这是一种char数据类型。还有一个快速相关的问题,是否有一段代码像getline(cinPlacecin.get();aftercin.get(cSelection);清除换行符。Placecin.get();aftercin.get(cSelection);清除换行符。Placecin

在这段代码中,a或b的一部分完成后,菜单将出现两次,如何防止这种情况发生?我怀疑这与cin有关。从第一个cout语句中获取空间。如果是这样的话,那么解决方案将是消耗空间的东西。我知道getline适用于字符串,但这是一种char数据类型。还有一个快速相关的问题,是否有一段代码像getline(cinPlace
cin.get();
after
cin.get(cSelection);
清除换行符。

Place
cin.get();
after
cin.get(cSelection);
清除换行符。

Place
cin.get();
cin.get(cSelection)清除换行符。

cin.get();
放在
cin.get(cSelection)之后;
清除换行符。

使用
包括

之后

你可以加上:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.ignore(std::numeric_limits::max(),'\n');
带有
#包括

之后

你可以加上:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.ignore(std::numeric_limits::max(),'\n');
带有
#包括

之后

你可以加上:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.ignore(std::numeric_limits::max(),'\n');
带有
#包括

之后

你可以加上:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.ignore(std::numeric_limits::max(),'\n');

您的额外菜单点击是由于使用了仍在输入流中的换行符。可以通过多种方式使用它,如下所示。我还冒昧地修复了您的
while
条件,该条件未正确表达(您将
bool
传递给
toupper
,这显然不是您想要的。同样,我将
sSelection[0]
的用法更改为
cSelection
。实际上,您将调用未定义的行为:

有效地说,“尽可能多地跳过字符以查找换行符。如果找到换行符,请跳过它,然后返回。尽可能多地使用,如果需要,最多可使用EOF。”

它可能看起来有点神秘,但它并不罕见,而且相当有效


无论如何,希望它能有所帮助。

您的额外菜单点击是由于使用了仍在输入流中的换行符。可以通过多种方式使用它,如下所示。我还冒昧地修复了您的
while
条件,该条件未正确表达(您将
bool
传递给
toupper
,这显然不是您想要的。同样,我将
sSelection[0]
的用法更改为
cSelection
。实际上,您将调用未定义的行为:

有效地说,“尽可能多地跳过字符以查找换行符。如果找到换行符,请跳过它,然后返回。尽可能多地使用,如果需要,最多可使用EOF。”

它可能看起来有点神秘,但它并不罕见,而且相当有效


无论如何,希望它能有所帮助。

您的额外菜单点击是由于使用了仍在输入流中的换行符。可以通过多种方式使用它,如下所示。我还冒昧地修复了您的
while
条件,该条件未正确表达(您将
bool
传递给
toupper
,这显然不是您想要的。同样,我将
sSelection[0]
的用法更改为
cSelection
。实际上,您将调用未定义的行为:

有效地说,“尽可能多地跳过字符以查找换行符。如果找到换行符,请跳过它,然后返回。尽可能多地使用,如果需要,最多可使用EOF。”

它可能看起来有点神秘,但它并不罕见,而且相当有效


无论如何,希望它能有所帮助。

您的额外菜单点击是由于使用了仍在输入流中的换行符。可以通过多种方式使用它,如下所示。我还冒昧地修复了您的
while
条件,该条件未正确表达(您将
bool
传递给
toupper
,这显然不是您想要的。同样,我将
sSelection[0]
的用法更改为
cSelection
。实际上,您将调用未定义的行为:

有效地说,“尽可能多地跳过字符以查找换行符。如果找到换行符,请跳过它,然后返回。尽可能多地使用,如果需要,最多可使用EOF。”

它可能看起来有点神秘,但它并不罕见,而且相当有效


无论如何,希望它能有所帮助。

这不是
cout
中的空格。这是您与菜单选项字符一起输入的换行符。以这样或那样的方式使用换行符。这不是
cout
中的空格。这是您与菜单选项字符一起输入的换行符。以这样或那样的方式使用换行符。这不是空格在
cout
中,这是您与菜单选择字符一起输入的新行。以这样或那样的方式使用新行。这不是
cout
中的空格。这是您与菜单选择字符一起输入的新行。以这样或那样的方式使用新行。嘿,谁总是很有帮助!不管是谁,我都不愿意ke更改了while条件。您可以看到,给了我们一个代码来处理(这个类中没有人完全理解,因为我们甚至还没有涉及while条件中那些参数的章节),所以我不明白为什么会有cSelection[0]我假设它与原始非抽象内容中的其他内容有关。谢谢everyone@ZeeZeeZee写这篇文章的恶魔,虽然条件很好,但因为
touper
不会用
bool
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');