gpt4 book ai didi

c++ - 从文件 : C to C++ 读取

转载 作者:太空宇宙 更新时间:2023-11-04 06:30:17 24 4
gpt4 key购买 nike

我一直在尝试读取 C/C++ 中的文件并且能够为 C 这样做但我在使用 C++ 时遇到了一些问题.

背景:我试图读取的文件具有以下结构

i = %3d; j = %3d; a = %3d; b = %3d;
i = %3d; j = %3d; a = %3d; b = %3d;
...

我的代码在 C 中有效是以下内容:

#include <stdio.h>
#include <fstream>
#define MAXSIZE 32

int main()
{
FILE* inputfile = fopen("temp.txt","r");
int i,j,a,b;

while (!feof(inputfile))
{
fscanf(inputfile,
"i = %3d; "
"j = %3d; "
"a = %3d; "
"b = %3d;\n",
&i, &j, &a, &b);

printf("%3d %3d %3d %3d\n", i,j,a,b);
}

fclose(inputfile);
return 0;
}

当试图在 C++ 中编写此程序时我试过:

int main()
{
ifstream inputfile( "temp.txt" ,ios::in);
int i,j,a,b;

while (!std::cin.eof())
{
inputfile >> "i = " >> i >> "; j = " >> j >> "; a = " >> a >> "; b = " >> b >> ";\n";
printf("%3d %3d %3d %3d\n", i,j,a,b);
}
return 0;
}

但我不太确定应该如何格式化
inputfile >> "i = " >> i >> "; j = " >> j >> "; a = " >> a >> "; b = " >> b >> ";\n";
任何帮助将不胜感激。谢谢!

编辑: 我面临的问题是最后一行的格式不正确。因为我的文件是问题中所述的形式,所以我不能写 inputfile >> i >> j >> a >> b; .

最佳答案

只用原来的代码。它在所有方面都更好:

  • 有效(除非文件以空行结尾,见下文)。
  • 经过测试。
  • 它运行得更快。
  • 它在 C 和 C++ 中都完全有效。
  • 编译速度更快。

不过,我会提供一个改进:

while (4 == fscanf(inputfile,
"i = %3d; "
"j = %3d; "
"a = %3d; "
"b = %3d;\n",
&i, &j, &a, &b))
{
printf("%3d %3d %3d %3d\n", i,j,a,b);
}
if (!feof(inputfile)) {
// read failed and the reason wasn't hitting the end of the file
// maybe you've been keeping track of line numbers and
// can report where the invalid input was found
}

在尝试读取之前测试 EOF 还为时过早。 EOF 标志仅在读取到达文件末尾后才会设置。如果最后一次成功读取确实找到了 '\n',那么 EOF 将不会被设置。除了处理中间文本的问题外,iostreams 代码也有同样的错误。


Nota Bene:您永远不会注意到用户输入的速度差异,甚至是输出到终端的速度差异。但是对于文件 I/O(包括重定向的标准输入或标准输出),stdio.h 函数比 iostreams 好很多。

关于c++ - 从文件 : C to C++ 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21520432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com