【发布时间】:2017-03-23 20:43:32
【问题描述】:
所以我似乎无法重定向输入以便我的程序读取它。
它在作业中说程序不应该打印任何东西来提示用户输入。由于必须从标准输入读取许多数字来测试您的程序,因此您应该使用 INPUT REDIRECTION 从文件中读取输入。
我有这个主要功能:
int main(int argc, char const *argv[])
{
int arr[100];
for (int i = 0; i < SIZE; i++)
{
values[i] = 0;
hashMapLinear[i] = 0;
}
FILE* file = fopen("file_name.txt", "r");
int index = 0;
int k = 0;
while (!feof(file))
{
fscanf(file, "%d", &k);
arr[index] = k;
index++;
}
fclose(file);
file = fopen("file_name.txt", "r");
int i = 0;
fscanf(file, "%d", &i);
float size = i;
fscanf(file, "%d", &i);
int thresh_hold = i;
int load_factor = size / 2;
int j = 0;
if (size <= 0)
{
printf("\nSize of file can not be zero or negative integer:\n");
}
else
{
while (!feof(file))
{
if (num_keys <= load_factor)
{
int check_valid_input= fscanf(file, "%d", &i);
if (check_valid_input != 0 || check_valid_input== -1)
{
insert_into_hashtable(i, size);
}
else
{
printf("\n invalid input:\n");
exit(1);
}
}
else
{
printf("\nError in inserting more numbers:\n");
exit(1);
}
}
fclose(file);
printHashMap(arr,size, thresh_hold);
}
}
如何编辑这个 main 函数,以便将 seq.1 或任何其他文本文件重定向到 C 程序?任何帮助将不胜感激!
【问题讨论】:
-
使用fscanf的stdin-reading兄弟scanf
-
您将其更改为从
stdin读取,它在您的程序启动时已经打开。您根本不必致电fopen。当您键入./a.out < seq.1时,重定向由 shell 在程序外部完成。 -
永远不要使用
feof()来控制while()循环,该函数不能像发布的代码所期望的那样工作。还需要避免数组溢出建议:while ( index < 100 && 1 == fscanf(file, "%d", &k) ) { -
由于代码关闭和重新打开同一个文件都使用“r”模式,强烈建议将第一次调用
fclose()和第二次调用fopen()替换为调用@987654330 @ -
编译时,始终启用所有警告,然后修复这些警告。 (对于
gcc,至少使用:-Wall -Wextra -pedantic我也使用:-Wconversion -std=gnu11)