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