cin.get()并省略换行符

时间:2010-01-06 10:37:24

标签: c++

我有一个简单的小程序,带有菜单和子菜单。用户从1-9中选择并点击进入。我希望代码只读取数字1-9从stdin删除“\ n”。我试过这样的事:

#include <cstdio>
#include <iostream>

using std::cin;
using std::cout;
using std::endl;

class cProgram
{
  private:
    char W;

  public:
    char choice(void);
    void choice(int _W);

    void showSubeMenu1(void);
    void showSubeMenu2(void);
    void showMainMenu(void);
};

char cProgram::choice()
{  return W;  };

void cProgram::choice(int _W)
{  W = _W;  };

void cProgram::showMainMenu(void)
{
  cout << "MAIN MENU:" << endl
       << "[1] option 1" << endl
       << "[2] option 2" << endl
       << "<0> quit" << endl
       << "Your choice: ";
  choice(cin.get());
  getchar();
}

switch (choice())
{
  case '1': choice('n'); showSubeMenu1(); break;    
  case '2': choice('n'); showSubeMenu2(); break;
  case '0': break; // EXITS the program
  default: choice('n'); showMainMenu(); break;
}  

// choice('n'); sets W to neutral char (not 1,2 or 0)

一切正常,直到用户点击“\ n”而不是普通键。 “正常”我的意思不是“\ n”。因此,当用户点击进入时,必须再次按Enter键(连续两次)。其他方式程序表现得很奇怪。

1 个答案:

答案 0 :(得分:1)

我不确定你的问题,但我有一些提示给你。当您使用C ++时,您应该使用std::coutstd::cin进行输入和输出。它们来自库<iostream>。您也可以编写using namespace std;,然后无需编写std::。函数printf()来自C,类型不安全,所以你不应该在C ++中使用它。

此外,溪流提供了很多功能,可以获取有关成功或不成功的阅读/写作等信息。我真的推荐给你。

方法cin.get()只读取1个字符,也可以是白色字符('\ n','\ t','')。如果你想读取数字并忽略空格(默认情况下它们像分隔符一样使用),那么你可以使用这段代码:

int x;
cin >> x;
if ( cin.fail() ) cout << "Reading error. It is not a number." << endl;
// cin.eof() means end of file, in this case it is end of input stream

我知道当你想要阅读某些东西时,用户必须写下所请求的数据和'\ n'。字符'\ n'很重要。我从未尝试过,但我认为它可以重新定义。我在某处读到了它。

我希望我的提示有用