【发布时间】:2015-06-20 00:59:42
【问题描述】:
例如...
char* foo;
scanf("%[^\n\r]", foo);
如何在不包含 C 库的情况下在 C++ 中执行此操作?
【问题讨论】:
标签: c++ formatted-input
例如...
char* foo;
scanf("%[^\n\r]", foo);
如何在不包含 C 库的情况下在 C++ 中执行此操作?
【问题讨论】:
标签: c++ formatted-input
相当于您发布的内容 [除了char *foo 没有分配内存,可能会导致写入 NULL 或内存中的某个随机位置] 将是
std::string foo;
std::getline(std::cin, foo);
但对于更复杂的情况,您可以阅读多个项目,cin >> x >> y >> z; 或 std::getline(std::cin, str); std::stringstream ss(str); ss >> x >> y >> z; - 或它们的某种组合。
但是有效的 C 代码在 C++ 中也有效。这并不总是“正确”的解决方案,但也肯定不是完全错误的。
【讨论】:
std::stringstream解析输入时,你应该使用std::istreamstream。
std::istringstream 是std::basic_istringstream<char> 的类型定义。请参见 C++98 (ISO/IEC 14882:1998) §27.7.2,“模板类 basic_istreamstream”。
scanf 的 C++ 版本是 std::scanf,可以在 <cstdio> 标头中找到。是的,它是同一个函数——因为 C 函数也可以在 C++ 中使用。
【讨论】:
替换scanf有两种简单的方法。
std::cin 可以在标准库中找到。
std::getline(std::cin, line); 将用户的输入(最多但不包括换行符)带入std::string 变量line。
【讨论】: