【问题标题】:What's the C++ version of scanf?scanf 的 C++ 版本是什么?
【发布时间】:2015-06-20 00:59:42
【问题描述】:

例如...

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

如何在不包含 C 库的情况下在 C++ 中执行此操作?

【问题讨论】:

    标签: c++ formatted-input


    【解决方案1】:

    相当于您发布的内容 [除了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
    • @BenVoigt:C++98,与标准化 STL 的版本相同。
    • @BenVoigt:std::istringstreamstd::basic_istringstream<char> 的类型定义。请参见 C++98 (ISO/IEC 14882:1998) §27.7.2,“模板类 basic_istreamstream”。
    • @BenVoigt:如果您在前面这么说并且没有浪费我的时间为您查找参考资料,我将不胜感激。哦,好吧。
    【解决方案2】:

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

    【讨论】:

    • 是的,printf 也可以在 C++ 中使用……但没有人使用它。我只是问是否有另一种方法可以做到这一点--'...不使用 c 库。
    • 你可能最终会 [即使你自己不这样做] 包括一些“c”库,无论你做什么。
    【解决方案3】:

    替换scanf有两种简单的方法。

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

    2. std::getline(std::cin, line); 将用户的输入(最多但不包括换行符)带入std::string 变量line

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 2011-04-30
      • 1970-01-01
      • 2011-03-02
      • 2015-07-15
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多