2014-10-18 78 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