如果按Enter键,如何在c ++中退出循环?

时间:2018-07-27 14:20:55

标签: c++ c++11

如果要在代码块(c ++)中按Enter,我想退出循环。 这是我的代码

{{1}}

2 个答案:

答案 0 :(得分:1)

当您仅使用getline()或简单地使用std::cin()来获取整个字符串时,我不知道为什么这很重要,但是在这里:

#include <iostream>
#include <cstring>
#include <string>

int main(int argc, char const *argv[]) {
  std::string s = "";
  std::string ch;

  while(true) {
    std::cout << ">>> ";
    getline(std::cin, ch);

    if(ch.empty()) break;
    s += ch;
  }

  std::cout << s << std::endl;
  return 0;
}

答案 1 :(得分:0)

在您的用例中,cin存在一个普遍问题! cin总是被缓冲,因为如果按下“ enter”,控制台只会将输入传递给程序。因此,您无法直接看到字符。如果要从用户那里获取单个字符作为类型,则必须关闭控制台缓冲。这不是便携式的!我的解决方案仅适用于posix。 (示例的第一部分)如果不需要立即获取字符,则不需要切换缓冲,但是在这种情况下,对输入的单个字符运行自己的循环确实没有任何意义。

要摆脱循环,您只需使用break语句,请参见下面的代码。 但是,与单个字符值进行比较也不是可移植的,因为如果按下回车键,系统会给您CRCRLF两个字符。

void IoBufferOff()
{
    struct termios t;
    tcgetattr(STDIN_FILENO, &t); //get the current terminal I/O structure
    t.c_lflag &= ~ICANON; //Manipulate the flag bits to do what you want it to do
    tcsetattr(STDIN_FILENO, TCSANOW, &t); //Apply the new settings
}



int main()
{
    IoBufferOff();

    std::string s="";
    char ch;

    while(1)
    {
        std::cin.get(ch);
        if ( ch == 0x0a ) break;
        s+=ch;
    }

    std::cout << s << std::endl;
    return 0;
}

如果您只想从控制台读取一行,如果在按下Enter键时应该读取该行,则应使用getline而不是使用自己的非便携式解决方案!

int main()
{   
    std::string s="";
    std::getline( std::cin, s );
    std::cout << s << std::endl;

    return 0;
}