在没有 getline 的情况下,在 C++ 中读取字符串直到换行

托马斯·史密斯

我一直在尝试制作一个程序,该程序要求我读取符号直到换行。我看到很多人getline()在类似问题中提出了建议,但我想知道是否还有其他方法可以做到这一点,主要是因为我的代码到目前为止的工作方式。

#include <iostream>
#include <string>

int main()
{
    std::string str;
    while(true)
    {
        std::cin >> str;
        std::cout << str << " ";
        //some actions with token
    }
}

我觉得这段代码有趣的是,它首先读取所有输入,然后当我按下 Enter 键时,它会将它们全部写入,例如,如果我输入

1 2 3 a b c

按回车得到输出那么有没有一种方法可以利用它来发挥我的优势并且只接受一行输入?

杰普

您看到输入后的输出行为,很可能是由于缓冲区被刷新。在我知道的大多数情况下,这只是您与stdout终端交互方式的产物,根本不应该改变stdin读取方式。

你最好的选择绝对是istream::getline,它在C++ 参考中有一个很好的例子

// istream::getline example
#include <iostream>     // std::cin, std::cout

int main () {
  char name[256], title[256];

  std::cout << "Please, enter your name: ";
  std::cin.getline (name,256);

  std::cout << "Please, enter your favourite movie: ";
  std::cin.getline (title,256);

  std::cout << name << "'s favourite movie is " << title;

  return 0;
}

有关缓冲区刷新的更多信息,我发现了一个不错的问题:刷新缓冲区是什么意思?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在没有CGO的情况下将C字符串转换为Go字符串

如何在C#中没有System.Web dll的情况下进行UrlDecode

在没有测试框架的情况下使用C ++在Appveyor中运行测试

没有Moq的情况下如何在C#中实例化FormFile的实例?

如何在不使用getline的情况下在C ++中读取带空格的字符串

在没有任何明确搜索条件的情况下从长字符串中获取字符串

在C中没有pthread的情况下测量开销

在C中没有日期的情况下比较时间(小时和秒)的最佳方法?

C#RegEx仅在字符串中没有其他文本的情况下替换匹配项

如何在现代C ++中没有宏的情况下实现系统特定的功能

在没有C ++的情况下将字符串转换为双精度

为什么在c ++中可以在没有#include线程的情况下使用std :: thread?

如何在没有*或-运算符的情况下取反C中的正整数?

在C#中没有锁语句的情况下确保线程安全

如何使用C ++在没有readline的情况下显示字符串中的多个单词?

在没有最大缓冲区长度的情况下从C中的stdin读取

终端不允许我在没有末尾换行符的情况下将指针打印到字符串-C

在没有驱动程序的情况下从C#中读取DBF文件

c-如何在没有输入且没有字符串的情况下中断scanf

在C ++中没有任何内置函数的情况下从数组中删除元素

在没有(sprintf/printf 库)的情况下,在 C 中将整数转换为十六进制字符串

在没有线程句柄的情况下从 C/C++ 中的线程内终止线程

如何在没有新数组的情况下读取字符串数组并返回字符串

如何在C中没有孔的情况下获取文件大小

c# - 如何在没有SPLIT的情况下从字符串中获取单词

如何在没有换行符的情况下使用 getchar() 读取字符?

试图在没有字符串函数的情况下反转字符串但不能在 c 中工作

试图在没有字符串函数 strrev 但在 c 中不起作用的情况下反转字符串

C++ - 在没有 getline 的情况下读取一行