问题标签 [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.
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 测试时没有发现问题。
问题:
- 其他人可以测试一下吗?我真的很感激一些积极的合作形式。
- 代码中是否有任何不正确的地方可能导致问题(不讨论是否有意义)
- 或任何可能触发此行为的编译器标志?
- 所有解析器代码对应用程序都相当关键,并且经过大量测试,但是当然,在测试代码中没有发现这个问题。我是否应该提出极端的测试用例,如果是,我该怎么做?我怎么能预测这会导致问题?
- 如果这真的是一个错误,我应该在哪里最好地报告它?
c++ - 构造函数中的 C++ std::ifstream 问题
我对这段代码有疑问:
G ++输出我这个:
将其更改为此后,它会编译(但这并不能解决问题):
有人可以解释我出了什么问题以及如何解决吗?谢谢。
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
. . .
c++ - 文件提取似乎没有前进到文件中的下一个单词
我想这曾经发生在我身上。这是A3.txt
:
即使我sourcefile >> reader
在循环结束时使用,程序仍在输出"reader: MARK"
,这意味着该sourcefile >> reader;
语句不起作用(即,它一遍又一遍地获得相同的输入,或者它没有获得任何输入)。
还有……题外话。编译器说switch语句不能与字符串一起使用,这是真的,还是我做错了什么?
c++ - ifstream 无法在递归调用中打开
我们在尝试解析输入文件时遇到了一个奇怪的问题。这个想法是这个文件可以包含其他文件,这些文件也必须被解析。我们在定义为的函数中递归地执行此操作
int parse_inp(const char* filename)
主文件解析没有问题,但递归调用无法打开它们的文件流。
递归文件永远不会解析。我环顾四周,大多数问题似乎要么是设置了失败位(这就是我们经常调用inp.clear()
的原因),要么是我们对当前工作目录做出了错误的假设。
为了测试第二个理论,我们添加了:
而且我们的工作目录和文件名都是正确的。fopen(filename, "r")
我们在使用--- 调用结果时看到相同的行为perror("fopen")
:
fopen: no such file or directory
编辑:填写更多代码
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++ 代码
c++ - std::ofstream 对象不能正确关闭的任何原因?
我注意到在我的 C++ 代码中,每当我关闭一个std::ofstream
对象时,我都无法重新打开我关闭的文件std::ifstream
。std::ifstream
的open
功能总是会失败。
我可以做些什么“额外”来确保我的 std::ofstream 对象正确关闭?
可能有人会要求查看我的特定代码,所以为了保持这篇文章的篇幅较小,我将其粘贴在这里。在我的代码中运行 case a 或 d 后,所有std::ifstream
打开的调用都失败了。(在发布这个问题之前,我有几个人在玩我的代码,除了std::ofstream
由于未知原因而关闭失败之外,他们无法得出任何结论)
提前感谢收到的所有回复。
代码是
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 数组,因为它们具有不同的数据类型,所以这不起作用。我不确定是否存在其他可行的方法来获取名称,因为我需要分隔符将名称与数值分开。任何有关如何解决此问题的建议将不胜感激。
这是我写的源代码:
我已经包含了整个程序,让您了解我打算在哪里进行编码。在此先感谢您的帮助!
c++ - c++ ifstream 函数和字段分隔符
对于这个程序,我只使用了 shell 脚本中数据文件的字段分隔符。但我正在尝试使用标准库函数 ifstream() 从数据文件中读取。唯一的问题是我得到这样的数据
A:KT5:14:行政台:
这是针对哈希表的,我需要为数据结构和事务类型分隔行中的值。我一直在网上四处寻找,并没有在字段分隔符上找到太多内容,而且我发现的内容非常令人困惑。
那么问题是,有没有办法用 ifstream 函数设置字段分隔符,还是我应该使用另一个标准库 i/o 函数?
谢谢。
c++ - 字符串在 C++ 中没有换行符就不会打印
我正在打开一个文件,并从中获取行。第一行应该说明有多少变量,以及它们的名称。第二行应该是使用这些变量的逻辑方程。任务是让它打印出变量和方程的真值表。
如果我没有插入新的行字符,程序接收的第一行就不会打印。我尝试转换为字符串并同时使用 printf 和 cout。
输入所有内容的主文件:
样本输入:
输出:
我认为无论是什么原因造成的,都会在整个程序的其余部分给我带来问题。在我对 variableLine 进行标记后,它不会在没有换行符的情况下打印,并且在评估公式时找不到第二个变量。