2017-03-27 47 views
0

我是C新手,這真的給我帶來麻煩。請注意,我花了10天的時間搜索,閱讀和嘗試。將外部文件的輸出存儲在變量中

我有什麼...

  • 根據命令
  • 號碼對(鍵/值)
  • 例如生成隨機生成的無符號整數,從命令行外部的C程序我可以簡單地鍵入./getNum -g 100以產生100的鍵/值對的列表, - 克[INT 1] [INT 2]
  • 我有程序,其存儲密鑰/值對在陣列

我的問題:我聽說,我可以使用下面的命令來獲得整數從外部文件輸出到我的程序存儲:

./myProgram < file_with_command.txt 

注:file_with_command.txt包含以下命令: ./getNum -g 100

我在以前的文章中看到了下面的代碼,但是我無法讓事情奏效。

int main(void) { 

    char *buffer = malloc(bufferSize); 
    int length = 0; 
    int c; 

    while ((c = getchar()) != EOF) 
    { 
     if (length == bufferSize) 
     { 
      bufferSize *= 2; 
      buffer = realloc(buffer, bufferSize); 
     } 

     buffer[length++] = c; 
    } 

    for (int j = 0; j < length; j++) 
    { 
     putchar(buffer[j]); 
    } 

    free(buffer); 
    return 0; 
} 

如何從file_with_command和變量中生成值存儲到我的數組中?

任何幫助將不勝感激,最簡單的解決方案是最好的。

+0

上面的代碼是什麼問題? –

+0

「我聽說我可以使用以下命令從外部文件輸入整數到我的程序中進行存儲」 - 您聽到錯誤,或者誤解了您所聽到的內容。您提供的命令不會產生運行文本文件內命名的程序的效果。將該文件中捕獲的程序的*輸出*提供給commad'。/ myProgram'是合適的。 –

回答

0

爲了擴大在我的評論,你寫

我的問題:我聽說,我可以使用下面的命令來獲得 從外部文件整數輸出到我的程序爲 存儲:

./myProgram < file_with_command.txt

注:file_with_command.txt包含以下命令:./getNum -g 100

您提出的命令不適合您的目的。它將文件file_with_command.txt內容重定向到標準輸入./myProgram,但內容不構成數字列表。相反,它們是您想要生成數字的命令。如果在這樣的文件中記錄該命令的輸出,那麼,你建議,你可以使用結果:

./getNum -g 100 > file_with_command.txt 
./myProgram < file_with_command.txt 

如果您想使用相同的數字列表的./myProgram每次運行,那麼您可以並且應該僅通過第一個命令填充文件一次。

如果你想生成的數字爲./myProgram每次運行一個新的列表,那麼你就需要在每次運行getNum,但那麼這將是更清潔和更傳統的管道號碼到你的程序:

./getNum -g 100 | ./myProgram 
+0

偉大的反饋約翰。我認爲我提到我在帖子中看到的代碼段可能不太好。從來沒有,你爲我清除了大部分事情。我還有一個問題。實際上,我確實想將文件的內容--file_with_command.txt重定向到./myProgram的標準輸入。在這樣做的時候,我應該可以直接使用myProgram調用命令,並通過popen()讀取流的內容。我對麼?如果是這樣,我最大的挑戰將是如何讀取輸入流。如果這是直接的,現在擔心。我會圍繞谷歌。 – UberDataGeek

+0

爲什麼你很難,@UberDataGeek?既然你依靠I/O重定向,只要適當地使用它;結果會更加靈活。但是,您可以*從標準輸入(通過文件重定向)讀取命令,或者直接打開文件並讀取文件,甚至從命令行參數中讀取命令。完成之後,是的,您可以使用'popen()'運行該命令並將其輸出讀入程序。要從標準輸入中讀取命令,我會建議'fgets()'函數。 –

+0

好@JohnBollinger,關於fgets的最後一個問題。你一直是一個很大的幫助。如果我使用fgets來讀取字符串,我沒有問題。但是,我將如何使用fget來獲取單個字符字符和一對整數。程序流如下: g [INT 1] [INT 2] 要得到我需要做的確切字符: char the_call [1]; fgets(the_call,1,stdin); 這將允許我,如果我想要,打印以下屏幕: printf(「呼叫是,%s \ n」,the_call); 但是,我將如何以相同的確切方式得到這對整數。我對基本問題表示歉意。 謝謝 – UberDataGeek

相關問題