【发布时间】:2021-12-31 15:02:27
【问题描述】:
我正在尝试使用std::cin.read() 函数从键盘读取字符串。
发生的情况是,当我键入字符串时,它看起来正在被读取,但 [Return] 字符被视为正常的换行符,而不是终止符。
这个函数的终结符是什么?可以修改吗?
#include <iostream>
char* text;
char text_length = 0;
int main() {
std::cout << "Text length: ";
std::cin.get(text_length);
std::cout << "\nText length: " << text_length << std::endl;
text = new char[1024];
std::cout << "\n\nText: ";
std::cin.read(text, text_length);
std::cout << "\n\nText: " << text << std::endl;
return 0;
}
测试代码:GCC 11,clang 13。操作系统:Linux。
【问题讨论】:
-
std::basic_istream::read是一个未格式化的输入函数。它不会查看它正在复制的字符。要终止输入,您需要让控制台告诉应用程序它已到达输入的末尾。在 Windows 上是 ctrl-C;在 Unix 系统上它是 ctrl-D。要看到这一点,您可以尝试将输入输入到文件中,并将程序的输入重定向到从该文件中读取。 -
read没有终结符;它会尝试读取您要求的尽可能多的字节。您可能正在寻找getline -
@PeteBecker 在 Windows 控制台上,EOF 指示符是
Ctrl+Z(不是Ctrl+C,它将调用信号处理程序例程,默认情况下将调用ExitProcess)。但在 Windows 上Ctrl+Z的问题在于它必须是单独行的第一个字符(即,您必须按Enter然后按Ctrl+Z,否则Ctrl+Z将不会被识别为 EOF )。这意味着换行符也将在 EOF 之前读取。 -
@heapunderrun — ctrl-Z 很好。
标签: c++ iostream cin carriage-return