问题标签 [ifstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1052 浏览

c++ - ifstream::unget() 失败。MS 的实现有问题还是我的代码有误?

昨天我在相当简单的代码中发现了一个奇怪的错误,它基本上从 ifstream 中获取文本并将其标记化。实际失败的代码会执行许多 get()/peek() 调用来查找令牌“/*”。如果在流中找到标记,则调用 unget(),以便下一个方法查看以标记开头的流。

有时,似乎仅取决于文件的长度,unget() 调用会失败。它在内部调用 pbackfail() 然后返回 EOF。然而,在清除流状态后,我可以愉快地阅读更多字符,所以它不完全是 EOF..

深入研究后,这是可以轻松重现问题的完整代码:

当字符串长度接近典型的 multiple=of-2 缓冲区大小 4096、8192、12288 时,程序将失败,这是输出:

在 Windows XP 和 7 上进行测试时会发生这种情况,两者均在调试/发布模式下编译,动态/静态运行时,32 位和 64 位系统/编译,全部使用 VS2008,默认编译器/链接器选项。在 64 位 Debian 系统上使用 gcc4.4.5 测试时没有发现问题。

问题:

  1. 其他人可以测试一下吗?我真的很感激一些积极的合作形式。
  2. 代码中是否有任何不正确的地方可能导致问题(不讨论是否有意义)
  3. 或任何可能触发此行为的编译器标志?
  4. 所有解析器代码对应用程序都相当关键,并且经过大量测试,但是当然,在测试代码中没有发现这个问题。我是否应该提出极端的测试用例,如果是,我该怎么做?我怎么能预测这会导致问题?
  5. 如果这真的是一个错误,我应该在哪里最好地报告它?
0 投票
3 回答
15050 浏览

c++ - 构造函数中的 C++ std::ifstream 问题

我对这段代码有疑问:

G ++输出我这个:

将其更改为此后,它会编译(但这并不能解决问题):

有人可以解释我出了什么问题以及如何解决吗?谢谢。

0 投票
2 回答
4715 浏览

c++ - istream 在 DEV C++ 中不起作用

我在 DEV c++ 中使用 ifstream 和 ofstream 操作,但它们似乎无法正常工作。我一直在尝试编写一些素数生成器代码,但它不起作用:\ 当我在任何时候显示 fstream::tellg() 时,它显示-1:

(对不起,我只是无法将整个内容放在一个代码块中。我想 [code] 标签有问题吗?)

输出:

NOT OPEN-1 2 -1 3 -1 4 -1 5 -1 6 -1 7 -1 8 -1 9 -1 10 -1 11 -1 12 -1 13 -1 14 -1 15 -1 16 -1 17 -1 18 -1 19 -1 20 -1 21 -1 22 -1 23 -1 24 -1 25 -1 26 -1 27 -1 2 8 -1 29 -1 30 -1 31 -1 32 -1 33 -1 34 -1 35 -1 36 -1 37 -1 38 -1 39 -1 40 -1 41 -1 42 -1 43 -1 44 -1 45 -1 46 -1 47 -1 48 -1 49 -1 50 Press any key to continue . . .

0 投票
2 回答
115 浏览

c++ - 文件提取似乎没有前进到文件中的下一个单词

我想这曾经发生在我身上。这是A3.txt

即使我sourcefile >> reader在循环结束时使用,程序仍在输出"reader: MARK",这意味着该sourcefile >> reader;语句不起作用(即,它一遍又一遍地获得相同的输入,或者它没有获得任何输入)。

还有……题外话。编译器说switch语句不能与字符串一起使用,这是真的,还是我做错了什么?

0 投票
2 回答
950 浏览

c++ - ifstream 无法在递归调用中打开

我们在尝试解析输入文件时遇到了一个奇怪的问题。这个想法是这个文件可以包含其他文件,这些文件也必须被解析。我们在定义为的函数中递归地执行此操作

int parse_inp(const char* filename)

主文件解析没有问题,但递归调用无法打开它们的文件流。

递归文件永远不会解析。我环顾四周,大多数问题似乎要么是设置了失败位(这就是我们经常调用inp.clear()的原因),要么是我们对当前工作目录做出了错误的假设。

为了测试第二个理论,我们添加了:

而且我们的工作目录和文件名都是正确的。fopen(filename, "r")我们在使用--- 调用结果时看到相同的行为perror("fopen")

fopen: no such file or directory

编辑:填写更多代码

0 投票
2 回答
1066 浏览

c++ - isspace 的 C++ 版本(将代码转换为 C 到 C++)

我正在将代码从 C 转换为 C++。我目前正在使用 C 函数isspace,使用 ifstream 时的 C++ 等效项是什么?具体来说while (!isspace(lineBuffer[l]))

id 是第一个数字(2515、1676、279),name 是第一个“空格”(ABC、XYZ、FOO)之后的字母集。

示例 NewList.Txt

C代码

C++ 代码

0 投票
1 回答
3837 浏览

c++ - std::ofstream 对象不能正确关闭的任何原因?

我注意到在我的 C++ 代码中,每当我关闭一个std::ofstream对象时,我都无法重新打开我关闭的文件std::ifstreamstd::ifstreamopen功能总是会失败。

我可以做些什么“额外”来确保我的 std::ofstream 对象正确关闭?

可能有人会要求查看我的特定代码,所以为了保持这篇文章的篇幅较小,我将其粘贴在这里。在我的代码中运行 case a 或 d 后,所有std::ifstream打开的调用都失败了。(在发布这个问题之前,我有几个人在玩我的代码,除了std::ofstream由于未知原因而关闭失败之外,他们无法得出任何结论)

提前感谢收到的所有回复。

代码是

0 投票
2 回答
5847 浏览

c++ - 在 C++ 中从文本文件读取输入到数组

好吧,温柔点,因为我是编程新手。到目前为止,我只学习了 C++,并且正在运行 Visual Studio 2010 作为我的编译器。对于这个程序,我试图从文本输入文件中读取信息并将信息写入一组三个数组。一个数组将处理姓名列表,另外两个数组分别用于工作时间和小时工资率。我将使用后两者来计算一组收益,并将整个结果作为报告输出到另一个文本文件中。然而,我的问题是获取第一个数组的输入。我正在使用的输入文件的文本排列如下:

J. Doe* 35 12.50 J. Dawn* 20 10.00 .........

这些名称后面带有星号,因为我正在尝试使用 ifstream getline 来获取带有星号作为分隔符的名称,并将以下两个数字写入其他两个数组。后两个值由空格分隔,所以我认为它们不会引起任何问题。我确定还有其他需要处理的错误,但我需要先解决第一个错误,然后才能开始调试其余错误。

我的问题出现在我调用 inFile.getline 的行上,因为我收到以下错误:error C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std ::streamsize,_Elem)' : 无法将参数 1 从 'std::string' 转换为 'char *'。

从我在其他地方读到的内容来看,(我认为)问题源于试图将字符串写入 char 数组,因为它们具有不同的数据类型,所以这不起作用。我不确定是否存在其他可行的方法来获取名称,因为我需要分隔符将名称与数值分开。任何有关如何解决此问题的建议将不胜感激。

这是我写的源代码:

我已经包含了整个程序,让您了解我打算在哪里进行编码。在此先感谢您的帮助!

0 投票
2 回答
5974 浏览

c++ - c++ ifstream 函数和字段分隔符

对于这个程序,我只使用了 shell 脚本中数据文件的字段分隔符。但我正在尝试使用标准库函数 ifstream() 从数据文件中读取。唯一的问题是我得到这样的数据

A:KT5:14:行政台:

这是针对哈希表的,我需要为数据结构和事务类型分隔行中的值。我一直在网上四处寻找,并没有在字段分隔符上找到太多内容,而且我发现的内容非常令人困惑。

那么问题是,有没有办法用 ifstream 函数设置字段分隔符,还是我应该使用另一个标准库 i/o 函数?

谢谢。

0 投票
2 回答
5384 浏览

c++ - 字符串在 C++ 中没有换行符就不会打印

我正在打开一个文件,并从中获取行。第一行应该说明有多少变量,以及它们的名称。第二行应该是使用这些变量的逻辑方程。任务是让它打印出变量和方程的真值表。

如果我没有插入新的行字符,程序接收的第一行就不会打印。我尝试转换为字符串并同时使用 printf 和 cout。

输入所有内容的主文件:

样本输入:

输出:

我认为无论是什么原因造成的,都会在整个程序的其余部分给我带来问题。在我对 variableLine 进行标记后,它不会在没有换行符的情况下打印,并且在评估公式时找不到第二个变量。