我正在进行一项学校项目,其中我们需要在保存为.txt文件的表格上执行某些操作(选择,最小值,最大值)。
问题是我们不能使用常见的函数,如fopen,fscanf,fclose。
该程序将从命令行启动,例如:.\project.exe select parameters <table.txt
您有想法如何在不使用fopen的情况下将.txt文件的内容获取到stdin吗?谢谢。
<table.txt
,你的标准输入将从该文件中读取数据而非键盘。你可以使用scanf
来读取数据,不必担心打开和关闭文件。>table_out.txt
重定向:你的printf
语句将写入一个文件而非屏幕,该文件将在程序退出时自动关闭。当然,如果你需要在输出重定向时将一些东西打印到屏幕上,你可以通过将其打印到stderr
(例如:fprintf(stderr, "Invalid table format\n")
)来实现。有几种方法可以实现这个。
我猜老师特别想要这个方法。这个方法的思路是读取标准输入而不是特定文件。 在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
您可以调用Windows中的"type"实用程序(不确定)或Linux中的"cat"实用程序作为子进程来读取某个特定文件。但这是一种“hack”,因此我不建议使用它。
./project select parameters <table.txt
吗? - Am_I_Helpfulprog < file
时将程序的标准输入连接到文件;这相当于unix中的cat file|prog
。也就是说,普通的scanf("%...)
现在将从文件中读取内容,而 prog 并不知道这一点。 - Peter - Reinstate Monicaopen
,read
和close
,但有等效替代方案。 - 5gon12eder