【问题标题】:Using freopen to read file使用 freopen 读取文件
【发布时间】:2015-03-17 06:02:24
【问题描述】:

我有一个任务,我在其中实现二进制搜索和线性搜索。 “困难”部分已完成,这两种方法都已实施并有效。 我的教授希望我们测试具有大量整数的数组。他给了我们一个 .in 文件,其中包含他想要的样式的输入,我正在尝试使用 freopen 来读取文件。

int main(int argc, const char * argv[]) {

freopen("input.in", "r", stdin);  // <-----

int n , s;

scanf("%d %d", &n, &s);

int myAr[n];
int i = 0;
while (i < n) {
    scanf("%d",&myAr[i]);
    i++;
}

int myAr2[s];
int j = 0;
while (j < s) {
    scanf("%d",&myAr2[j]);
    j++;
}
...

文件以一行中的 2 个数字、列表中的元素数以及您在第一个列表中查找的元素数开始。

然后它读取包含列表 1 中所有数字的一行,然后下一行读取列表 2 中的所有数字

我无法让 freopen() 正常工作,我想知道是否有任何建议。

示例 input.in 文件:

10 2
2 4 6 7 9 10 24 26 29 33
26 35

我的代码稍后会告诉我找到了 26 而没有找到 35。我的主要问题是在 main 中读取输入文件,而不是在终端中手动输入。请帮忙。

【问题讨论】:

  • 在文件末尾添加 '\n' 应该会有所帮助。
  • 如果可以用C++,看ifstream,如果不行,每个OS都提供文件IO功能,比如linux open and read... 坦白说,我不明白你的意思。
  • 当您在调用程序时只能使用文件重定向时,为什么还要与 freopen 作斗争。例如 a.out
  • 正如您所说,您的代码无法获得最后一个数字(35)。这可能是由于scanf 不理解 eof 状态 - 它等待更多数字进入。如果您在文件末尾添加换行符,那么 scanf 应该正确读取 '35'。
  • 你怎么知道freopen不能正常工作?

标签: c stdin freopen


【解决方案1】:

我通过简单地使用fscanf() 读取了 input.in 文件中的所有整数。

这是我的代码。

int j;
FILE *fp;
fp = fopen("input.in", "r");
while( fscanf(fp,"%d",&j) > 0 )
{
    printf("%d\n", j);
}
fclose(fp);

输出是。

【讨论】:

  • 感谢您的意见!我喜欢如何在文件内部使用另一种方法来执行此操作,而不是在终端中读取文本。这样我就可以调试了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 2016-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
相关资源
最近更新 更多