将文本文件逐行读入数组并打印它们,使用C语言实现。

4
我有以下的C#代码片段
string[] lines = File.ReadAllLines(@"C:\test.txt");
for(int i=0; i<lines.Length; i++)
    Console.WriteLine(lines[i]);

你能帮我把它转换成C语言吗?

谢谢!


4
了解,这并不是真正的“逐行阅读”- 它会一次性读取所有内容...但这并不重要... - Marc Gravell
你应该展示一下你已经做了什么,以便获得帮助。 - Remo.D
我在C#中编写的程序完美运行,但我对C语言非常陌生。我的操作是获取一个包含300万个文件的ASCII文件,其中每行由三个用空格分隔的浮点数组成...... 我还有另一个大约相同大小的文件。它们在外部和内部循环中运行,因此总共有3百万* 3百万次循环...... - asel
如果在C#中它能够完美运行,为什么要将其转换为C语言?而且为什么要在不了解C语言的情况下进行转换呢? - Chris Lutz
6个回答

2

2
C语言是大小写敏感的,因此所有字母都需要小写。 - Jerry Coffin

1

看一下fopenfgets函数。

fgets特别适合逐行读取文本文件,因为它会一直读取直到遇到换行符。


0

你可以用C++简单地完成它。

ifstream input("test.in");
string line;
while(getline(input, line)) {
  //Your code for the current line
}

你似乎犯了一个错误。你声明了一个 string line 但是却调用了 getline(input, s)。也许应该是 s == line - Chris Lutz

0

使用fgets会引发棘手的边缘情况:

  • 如果一行的长度大于固定宽度缓冲区的大小怎么办?
  • 如果文件没有以换行符结尾怎么办?
  • 如果最后一行恰好适合缓冲区而不会导致设置文件结束状态怎么办?

在我的博客上,我发布了一个使用fgets进行健壮处理的示例


0

这个过程应该基本按照预期工作:

打开文件,找出编码(ReadAllLines会为您完成此操作),使用猜测的编码读取输入,将其重新编码为目标格式 - 可能是UTF16 - 并将其打印到stdout...


0

仅供参考,如果您只是从一个流复制数据到另一个流,就不需要担心逐行操作--行由数据中的换行符(或回车符和/或回车符/换行符组合)决定。

如果只是简单地复制数据而不改变它,则行将被保留。为了最大化速度,您可能希望以二进制模式打开文件,并使用fread/fwrite每次复制相当大的数据块(例如4兆字节)。


我在C#中编写的程序完美运行,但我对C语言非常陌生。我的操作是获取一个包含300万个文件的ASCII文件,其中每行由三个用空格分隔的浮点数组成... 我还有另一个大约相同大小的文件。它们在外部和内部循环中运行,因此总共有3百万* 3百万次循环... - asel
@asel:你用那个叉积在做什么? - Jerry Coffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接