【问题标题】:How std::cin.get(c) sets c when the input is EOF?当输入为 EOF 时,std::cin.get(c) 如何设置 c?
【发布时间】:2021-09-15 12:39:46
【问题描述】:

根据我的经验,我不应该将返回值 intstd::getcharstd::cin.get()std::cin.peek() 分配给 char,因为它非常危险且容易出错。

  • 所以我可以使用:std::cin.get(c);,但不能使用c = std::cin.get()

现在如果我发出这个:

char ch;
std::cin.get(ch); // Ctrl+D 

而用户输入文件末尾EOF (-1) 函数std::cin.get(c) 怎么设置为ch?或ch 的值为\0?谢谢。

【问题讨论】:

  • 任何来自 cin 的非空返回值都是有效的。所以,是的,NULL 返回是 EOF。
  • @moi 这是不正确的。 EOF 在 EOF 上返回,EOF 返回的值不等于任何 char_type 类型的有效值。
  • EOF 给出负返回值,错误返回 NULL 值,任何正返回值都意味着 cin 成功。 @NathanOliver 是这样吗?
  • @moi 不。任何错误都会返回EOF

标签: c++ eof


【解决方案1】:

请学习阅读文档:

std::basic_istream<CharT,Traits>::get - cppreference.com

  1. 读取一个字符并将其存储到ch(如果有)。 否则,不修改 ch 并设置 failbiteofbit。请注意,与格式化字符输入运算符>>不同,此函数不会在有符号字符和无符号字符类型上重载。

【讨论】:

    【解决方案2】:

    来自https://en.cppreference.com/w/cpp/io/basic_istream/get

    basic_istream&get(char_type&ch); (2)

    (2) 读取一个字符并将其存储到 ch 如果可用。否则,不修改 ch 并设置 failbit 和 eofbit。

    当输入为 EOF 时,std::cin.get(c) 如何设置 c?

    这种情况下函数不设置。

    我可以使用:std::cin.get(c);但不是 c = std::cin.get()。

    您仍然可以使用它。只需检查流状态。

    char c;
    if (!std::cin.get(c)) {
         std::cout << "You typed EOF!\n";
    } else {
         std::cout << "You typed: " << c << '\n';
    }
    

    函数 std::cin.get(c) 是如何设置为 ch 的?

    没有,在这种情况下它不会修改c

    ch 的值为 \0?

    对于EOF,在您的代码中ch 未初始化,因此它具有“不确定”值。它可以是'\0',也可以是任何其他值。

    【讨论】:

      猜你喜欢
      • 2021-10-21
      • 2022-01-15
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      • 2021-05-30
      • 1970-01-01
      • 2022-12-05
      相关资源
      最近更新 更多