为什么 (foobar>>x) 优于 (!foobar.eof() ) [重复]

2024-01-04

可能的重复:
为什么循环条件内的 iostream::eof 被认为是错误的? https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong
eof() 不好的做法? https://stackoverflow.com/questions/5837639/eof-bad-practice

我的老师说我们不应该使用 EOF 来读取文本文件或二进制文件信息,而应该使用 (afile>>x)。他没有解释为什么,谁能给我解释一下。有人还可以解释一下这两种不同的阅读方法有什么区别吗

//Assuming declaration 
//ifstream foobar



( ! foobar.eof() )
{
    foobar>>x; // This is discouraged by my teacher

}


 while (foobar>>x)
{
  //This is encouraged by my teacher

}

因为在您尝试读取文件之前,该文件尚未结束。

operator>>返回对处于当前状态的流的引用after已尝试读取并且成功或失败,并且流的计算结果为true如果成功或者false如果失败了。测试eof()首先意味着文件中可能没有有用的数据,但尚未达到 EOF,然后当您从中读取时,它已处于 EOF 并且读取失败。

另一个重要的细节是operator>>对于流跳过所有leading空格,而不是尾随空格。这就是为什么文件不能在读取之前处于 EOF 且在读取之后处于 EOF。

此外,当文件中的下一个数据是无法读入整数的数据时(例如,下一个数据是x),不仅仅是在 EOF 时,这一点非常重要。

Example:

考虑代码:

int x, y;

f >> x;

if (!f.eof())
    f >> y;

假设f是一个包含数据的文件123␣(␣表示空格),第一次读取会成功,但之后文件中就没有更多的整数了,not在EOF。第二次读取将失败,文件将位于 EOF,但您不知道,因为您在尝试读取之前测试了 EOF。然后你的代码会继续导致未定义的行为,因为y未初始化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 (foobar>>x) 优于 (!foobar.eof() ) [重复] 的相关文章

  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • Python中获取总物理内存

    如何以与分布无关的方式获取 Python 中的总物理内存 我不需要已用内存 只需要总物理内存 跨平台解决方案的最佳选择是使用psutil https github com giampaolo psutil包 可在PyPI https pyp
  • Helvetica 在 Windows 操作系统上呈现为 Arial

    在我的网站上 http helvetitee com http helvetitee com 我有以下字体堆栈 font family helvetica neue helvetica nimbus sans Nimbus Sans 一种网
  • 用 Coq 重写假设,保留蕴涵

    我正在做 Coq 证明 我有P gt Q作为假设 并且 P gt Q gt Q gt P 作为引理 如何将假设转化为 Q gt P 当我尝试apply它 我只是产生新的子目标 这没有帮助 换句话说 我想从以下开始 P Prop Q Prop
  • 清除 woocommerce 中的结账字段

    我正在尝试删除各个结账字段中自动加载的用户信息 但似乎找不到任何方法来访问字段值 我已经尝试了以下清除格式 删除 字段等的操作 但我找不到任何内容显示如何仅删除该值 有谁知道如何访问这个 add filter woocommerce che
  • 如何使用 ADB 生成 Android 中的捏合等多点触控事件? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想通过 ADB 命令行在 Android 中生成多点触控 捏合 的输入事件 现在我可以使用以下命令生成触摸屏滑动事件 input t
  • 每个项目类型都有单独的资源字典

    我已经在我的共享项目中创建了一个 ResourceDictionary 没有任何问题 然而 我的一些样式对于 Windows Phone 8 1 来说非常特殊 并且不会在 Windows 8 1 中使用 由于Windows Phone项目中
  • OwinContext.Request.Path 和 PathBase 是如何填充的?

    我正在根据 Katana 项目中的其他示例为 OpenID Connect 授权代码流程编写自己的 OWIN 中间件 作为此过程的一部分 我必须构造几个 URI 例如重定向 URI 和返回 URL Katana 中的其他示例通过连接当前请求
  • 通过适应度函数从群体中选择个体

    我一直在研究一种算法 我需要从大小为 k 的群体中选择 n 个个体 其中 k 比 n 大得多 所有个体都有适应度值 因此选择时应优先考虑较高的适应度值 然而 我不想简单地选择最好的n个人 最差的人也应该有机会 自然选择 因此 我决定找到人群
  • 如何在 Ninject 中使用 Provider

    我有以下代码 public class Something Inject public Configuration config get set singleton Inject public Provider
  • 按分隔符分割字符串

    我实在找不到这个答案 我在 XCode 中有一个名为 myString 的多行 NSString 它是一个 HTML 代码 我需要按行导航字符串 例如 myString 如何逐行访问 喜欢 LineOne myString Lines 0
  • 未绑定断点?

    在构建并运行代码后 我在运行一些断点时遇到了问题 我的项目是在 ASP NET 上的 我正在使用 VS 2022 到目前为止我已经尝试过以下操作 重启VS并删除我所有的断点 清理我的解决方案 构建 gt 清理解决方案 Delete vs f
  • 向上滚动不适用于 Listview 中的 SwipeRefreshLayout

    我想用 listView 实现滚动刷新功能 此外 同一布局文件中还有其他视图元素 如果列表为空 则会显示这些元素 这是我的布局文件 问题是 当我向下滚动然后尝试向上滚动时 而不是一直滚动到顶部然后刷新它只是在那里刷新并且向上滚动不起作用
  • 合并 IdentityDbContext 和 DbContext ASP.NET MVC

    我希望我的 ASP NET MVC 项目中只有一个 DbContext 我应该如何将默认的 IdentityDbContext 与我自己的代码首先 DbContext 合并 他们使用相同的数据库 public class Applicati
  • 套接字在 Python 中不工作

    我一直在尝试 Python 中的 socket 模块 但每当我尝试运行此代码时 import socket import sys host 192 168 1 1 port 23 try s socket socket socket AF
  • notepad++ 反向正则表达式替换(除字符串之外的所有内容)

    我本质上希望匹配每一行DOES NOT包含这个字符串 Hello Example sdfsdoifdoskf fdgokfdghodfkg hello fdojgohdfgjkdfg gfobjobhkdfokgdfg dofjkdsf h
  • 将函数置于后台

    我有以下功能 def update contacts data Update a user s contacts from Google to be run as a background task from users google oa
  • 关联使用了错误的列

    我正在使用现有的数据库 该数据库没有创建外键 但我可以使用 sql 查询连接两个表 但无法在后续中连接它们 有两种型号 用户 module exports sequelize DataTypes gt var User sequelize
  • 如何更改 git 子模块以指向子文件夹?

    浏览子模块教程 https git wiki kernel org index php GitSubmoduleTutorial 我创建了一个子模块博托项目 https github com boto boto 然后 我发现我实际上只需要这
  • 如何在主面板中拖动面板

    如何允许在主面板中拖放面板 我有一个面板 其中包含一个面板 目前 或一些面板 我希望允许拖放来组织面板 像这样的例子 http examples extjs eu freedrag html http examples extjs eu f
  • 为什么 (foobar>>x) 优于 (!foobar.eof() ) [重复]

    这个问题在这里已经有答案了 可能的重复 为什么循环条件内的 iostream eof 被认为是错误的 https stackoverflow com questions 5605125 why is iostreameof inside a