【发布时间】: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不能正常工作?