21xrx.com
2024-12-22 21:22:14 Sunday
登录
文章检索 我的文章 写文章
简单高效的c++无回车输入技巧
2023-06-28 19:31:33 深夜i     --     --
C++ 无回车输入 简单 高效 技巧

在C++中,输入数据是编写程序的基本功能之一。输入函数cin是常用的输入数据方式,但在输入之后,需要按下回车键才能正常输入。然而,有时候我们可能需要一个无回车输入的方法,这种方法可以在代码运行时更加方便快捷,提高输入效率。下面就来介绍一种简单高效的C++无回车输入技巧。

技巧1:使用getchar()函数

getchar()函数可以读取单个字符并返回该字符的ASCII码,无需等待回车键。我们可以利用该函数一次读取一个字符,再依次组合成字符串或数字。例如:


#include <iostream>

using namespace std;

int main() {

  char c;

  int i = 0;

  char s[10];

  cout << "请输入一个字符串:" << endl;

  while ((c = getchar()) != '\n') {

    s[i++] = c;

  }

  s[i] = '\0';

  cout << "您输入的字符串是:" << s << endl;

  

  cout << "请输入一个整数:" << endl;

  i = 0;

  while ((c = getchar()) != '\n') {

    i = i * 10 + c - '0';

  }

  cout << "您输入的整数是:" << i << endl;

  return 0;

}

在这个例子中,我们通过getchar()函数读取用户输入的字符串和整数,然后分别将字符组合成字符串s和数字i,最终输出结果。这种方法虽然需要一次读取一个字符,但是它在输入短字符串或数字时相对快捷高效。

技巧2:使用读取流和无缓冲流

除了getchar()函数,C++还提供了istream类,它是一个输入流类,可以使用类似流式的方式读取用户输入数据。同时,C++还提供了无缓冲流(unbuffered stream)技术,它可以实现不用回车即可读取用户输入。以下是使用无缓冲流和istream的例子:


#include <iostream>

#include <cstdio>

#include <cstring>

#include <unistd.h>

using namespace std;

int main() {

  char buff[10];

  cout<<"输入不超过9位的字符串:"<<flush;  

  read(STDIN_FILENO, buff, 10);

  if(buff[strlen(buff)-1] == '\n') {

    buff[strlen(buff)-1] = '\0';

  }

  cout<<"您输入的字符串是:"<<buff<<endl;  

  cout<<"输入一个整数:"<<flush;

  int i;

  cin.unsetf(ios::skipws);

  while(cin>>i);

  cin.clear();

  cin.ignore();

  cout<<"您输入的整数是:"<<i<<endl;

  

  return 0;

}

在这个例子中,我们使用无缓冲流和istream配合使用,实现用户输入无需回车即可生效。在读取字符串时,我们使用read()函数读取过程,并使用标准输入流文件描述符,最终输出结果。在读取整数时,我们使用unsetf()函数取消cin流的skipws标志位,使cin在读取字符时不忽略空白字符。同时,我们使用clear()函数清空cin流的错误标志,ignore()函数清空缓冲区,最终输出结果。

总结:

无回车输入技巧在C++编程中很实用,可以提高编程效率。除了上述介绍的两种方法,还有其他一些方法,例如使用Windows API实现,或者使用第三方库。不过,任何技巧都没有固定的适用场景,需要根据具体需求来选择合适的方法。尽管无回车输入技巧看起来有些神秘,但只要掌握了原理,我们就可以在C++的世界里自如航行。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复