gpt4 book ai didi

c++ - 从 stdio 读取两个文件

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

我想读取两个文件,一个包含三列 float ,另一个包含两列整数。我有以下代码可以从标准输入读取:

int main() {
while (scanf("%lf %lf %lf\n",&x,&y,&z) != EOF) {
// do stuff
}

puts("foo");

int a,b;
while (scanf("%d %d\n",&a,&b) != EOF) {
puts("bar");
}
}

然后我用 cat ortho.dat pairs.dat | 调用程序./angles,ortho.dat 和 pairs.dat 是两个文件。然而,输出只是 foo 表示第二个文件从未被读取,大概是因为它读取了 EOF 并立即终止了第二个循环。这是正确的吗?

我如何读取这两个文件,而不是在程序中实际打开它们,而只是从标准输入中读取它们?

最佳答案

问题:

How could I read the two files, without actually opening them in the program, merely reading them from stdin?

一个解决方案:

在两个文件的内容之间插入虚拟的、无效的内容。用它来分离第一个文件和第二个文件的数据。

文件“dummy”的内容:

===Separator===

将您的代码更改为:

int main() {
while (scanf("%lf %lf %lf\n",&x,&y,&z) == 3) {
// do stuff
}

// Skip the line that contains the separator.
scanf("%*[^\n]");

puts("foo");

int a,b;
while (scanf("%d %d\n",&a,&b) == 2) {
puts("bar");
}
}

更改调用:

cat ortho.dat dummy pairs.dat | ./angles

更新

C++ 版本:

int main() {
while ( std::cin >> x >> y >> z ) {
// do stuff
}

// Skip the line that contains the separator.
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

puts("foo");

int a,b;
while ( std::cin >> a >> b ) {
puts("bar");
}
}

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

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