【问题标题】:Read input without using conio.h library不使用 conio.h 库读取输入
【发布时间】:2014-08-22 10:51:01
【问题描述】:

首先,我阅读了一些参考资料并在 Google 上进行了搜索。但是如果不使用getch(),我找不到任何不按回车键的方式来读取输入。而getchar() cin>> and getline() 需要回车才能读取输入。我正在练习与在线评委一起做题,他们不接受 conio.h 库。有没有办法做到这一点?谢谢。

顺便说一句,我的目标是让每个按下的数字进入一个数组。

【问题讨论】:

  • 在线评委有3种类型的输入:argc/argv(无需阅读,直接)、标准输入(基于行)和文本文件(也基于行)。这就是你不需要 "conio.h library" 的原因。顺便说一句,没有标准的 conio.h,所以评委们甚至都不知道你用的是哪一个。 std::getline 顾名思义就是标准的getline。
  • 哦,我明白了。我认为这个问题是基于行的。所以没有办法将每个数字作为单个输入?前任。 123 变成 arr[3] = {1,2,3};因为 getline 只返回 123 作为 1 个数字。
  • 嗯,你已经提到了cin >>。从某种意义上说,这仍然是基于行的,因为它在输入时需要一个行结束,并且它不会超过该行结束,但您可以一次读取整个数字。如果您正在读取浮点数,cin>> 甚至会读取 123.45
  • arr 的元素类型是什么?

标签: c++ getch


【解决方案1】:

istream& getline (istream& is, string& str),用法:

#include<iostream>
int main(){
    std::string output;
    std::getline(std::cin, output);
}

取自std::cin 的一行存储在output 中。您可以使用output[i] 读取每个output 的字符,其中i 是您想要获取的字符数,或者使用output.data(),它返回相同的数据,存储在char[]

每种方法都可以让您将char 读取为一个字符。看来您想将数字作为数字而不是字符。

char 也是数字。每个字母都有自己的代码。

char  code
 '0'==48
 '1'==49
 '2'==50
 '3'==51
 '4'==52
 '5'==53
 '6'==54
 '7'==55
 '8'==56
 '9'==57

如您所见,数字是一个接一个的漂亮设置,数字更多关于n 的代码也更多关于n。如何使用它?很简单:只需将char 放在char 之后,每个都减少48'0' 以获得更好的可读性,将数字作为数字。

【讨论】:

  • 输入将是 A 和 B。1
  • 你可以写int arr[]=new int[nr_of_digits]; /*using array here*/ delete[] arr;
  • 是的,当我使用 getch();它也返回了 int,所以我也将它减少了 48。但是关于 getline();请原谅我,但我仍然不明白如何使用 getline(cin,input) 获取每个数字。当您键入“123 45”时“输入”。数组将是 [1,2,3,-16,4,5]。 (空间为 32-48)。谢谢
  • @user3411184 still don't understand how to get each number by using getline(cin,input) - 我不确定你想要实现什么...如果你不想在一个数组中包含所有数字,只需在你发现分隔符开始写入另一个目的地。
【解决方案2】:

要读取数字,只需使用std::cin,我不明白您为什么不想按Enter确认传递的数字。

当你在字符后读取字符时,如果你想纠正部分输入的数字,你必须编写额外的代码 - 你必须处理 Backspace、箭头、Delete,以及与箭头结合时可能的 HomeEndShift 行为......这是很多工作。

【讨论】:

  • 那是因为我需要将 '1' '2' '3' 作为单独的数字放入数组中。如果我使用 cin>>input 并且输入是 123。它只会返回 '123'
  • 想象一下,你要玩蛇游戏,每次改变方向时都必须按 Enter。我不明白为什么在 C++ 中没有标准的方法来做到这一点。
  • @nwp 是的,这很烦人,但也没有标准的方式来将文本光标移动到任何地方,改变文本颜色和背景,所以我不认为有人想要写蛇没有这个:) 当然,有一些库在做,但其中一些还包含getch() 之类的东西,这可能是可移植的解决方案;)
  • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • @Syon 是的,问题很不清楚,我在阅读一些 cmets 之前写了这个答案,我在想他想要 stdin 中的几个数字,例如 ints . 不澄清问题不好。
猜你喜欢
  • 2019-02-22
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-07
  • 2017-03-17
相关资源
最近更新 更多