没有fopen()的读文件(C语言)

时间:2014-10-18 12:30:00

标签: c file stdin fopen

我正在开展一个学校项目,我们必须在保存在.txt文件中的表上执行一些操作(select,min,max)。 问题是我们不能使用常见的函数,如fopen,fscanf,fclose。

该程序将从命令行启动,如下所示:.\project.exe select parameters <table.txt

您是否有一些想法如何在不使用fopen的情况下将.txt文件的内容转换为stdin? 感谢。

2 个答案:

答案 0 :(得分:6)

您无需打开文件 - 操作环境将为您执行此操作。

使用<table.txt调用程序时,标准输入将切换为从该文件而不是键盘读取。您可以使用scanf来读取数据,而不必担心打开和关闭文件。

同样适用于您的程序输出和>table_out.txt重定向:而不是打印到屏幕上,程序中的printf将写入文件,该文件将自动关闭节目的退出。当然,如果您需要在重定向输出时将某些内容打印到屏幕上,可以打印到stderr(例如fprintf(stderr, "Invalid table format\n"))。

答案 1 :(得分:0)

实现这一目标的方法很少。

读取STDIN

我想老师特别想要这种方法。想法是阅读标准输入而不是特定文件。 在C ++中,您只需读取stdin对象即可。这是一个例子:

#include <stdio.h>
#include <string.h>

int main(void)
{
  char str[80];
  int i;

  printf("Enter a string: ");
  fgets(str, 10, stdin);

  /* remove newline, if present */
  i = strlen(str)-1;
  if( str[ i ] == '\n')
      str[i] = '\0';

  printf("This is your string: %s", str);

  return 0;
}

来源:http://www.java2s.com/Code/C/Console/Usefgetstoreadstringfromstandardinput.htm

使用system utils

你可以在Linux中调用“type”util @ Windows(不确定)或“cat”util作为读取某些partticular文件的子进程。但这是一个“黑客”,所以我不建议使用这个。