C++版本的scanf是什么?

3
例如...
char* foo;
scanf("%[^\n\r]", foo);

我如何在不包含C库的情况下使用C++实现这个功能?

3个回答

3
除了 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代码同样有效。这不总是“正确”的解决方案,但也绝不完全错误。


@BenVoigt:C++98,与STL标准化相同的版本。 - Remy Lebeau
@BenVoigt:std::istringstreamstd::basic_istringstream<char> 的一个 typedef。请参阅 C++98(ISO/IEC 14882:1998)§27.7.2,“模板类 basic_istreamstream”。 - Remy Lebeau
让我们在聊天中继续这个讨论 - Remy Lebeau
@Remy: 我刚刚在暗示你第一条评论中的错别字。 - Ben Voigt
1
@BenVoigt:如果你一开始就直接说了,而不是浪费我的时间去为你查找参考资料,我会很感激的。哎,算了。 - Remy Lebeau
显示剩余2条评论

2

scanf的C++版本是std::scanf,可以在<cstdio>头文件中找到。是的,这是同一个函数 - 因为C函数也可以在C++中使用。


是的,C++中也可以使用Yes和printf...但是没有人使用它。我只是想问是否有另一种方法来做到这一点——不使用C库。 - Felipe Endlich
无论你做什么,最终可能都会包含一些“C”库,即使你不自己编写。 - Mats Petersson

0

有两种简单的方法可以替换scanf

  1. std::cin可在标准库中找到。

  2. std::getline(std::cin, line);将用户输入(不包括换行符)读入到一个std::string类型的变量line中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接