2014-10-18 73 views
4

我正在学校项目中,我们必须在保存在.txt文件中的表上执行一些操作(select,min,max)。 问题是我们不能使用fopen,fscanf,fclose等常用函数。没有fopen的读文件()(C语言)

该计划将通过命令行启动这样的:.\project.exe select parameters <table.txt

你有一些想法如何让.txt文件到标准输入的内容,而无需使用的fopen? 谢谢。

+0

是不是应该是'./project select parameters 2014-10-18 12:33:19

+0

当您调用'prog 2014-10-18 12:35:21

+1

@shekharsuman你试图问的问题是”应该不是......“。答案是“不是,如果它是Windows” – GreenAsJade 2014-10-18 12:35:27

回答

6

你不需要打开文件 - 操作环境将为你做。

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

您的程序输出和>table_out.txt重定向也是如此:您的程序中的printf将不会打印到屏幕上,而是写入文件,该文件将在程序退出时自动关闭。当然,如果你需要在你的输出重定向到打印内容到屏幕上,你可以通过打印到stderr(这么做如fprintf(stderr, "Invalid table format\n")

+0

谢谢。我在CodeBlocks中启动程序,它不工作,因为它应该。在命令行中试过并且完美地工作 – 2014-10-18 12:46:36

0

有几种方法可以acomplish这一点。

阅读STDIN

我想老师要尤其在该方法的思路是读标准输入,而不是特定的文件 在C++中,你可以简单地读取标准输入对象下面是一个例子:。

#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

使用系统utils的

你可以称之为 “类型” UTIL @的Windows(不知道它)或 “猫” 中的util Linux作为一个子读一些partticular文件。但这是一个“黑客”,所以我不建议使用这个。

+0

该文件被重定向到标准输入,所以他不需要打开,因为它已经打开 – Pradheep 2014-10-18 12:39:06