2015-08-20 52 views
0

我正在C中嘗試I/O重定向。我重定向標準輸入,以便可以在控制檯上打印包含在txt文件中的數字。如何在Mac上使用C I/O重定向?

int main() { 
    int number; 
    scanf("%d", &number); 
    printf("The number is %d.", number); 
} 

在Xcode中,我去Products文件夾,然後雙擊可執行文件來啓動控制檯。我發出此行:

./main.c < number.txt 

控制檯打印出一個數字,但不是正確的。如果您願意,請下載這個簡單的項目here。我在這裏做錯了什麼?

更新

  • 我遇到了CSV文件相同的問題;
  • 我檢查的scanf()的返回值,它是等於0
  • 中包含的文件數是4(我把它改爲5最近),但外殼的輸出The number is 1726119990.
+1

「包含數字的CSV文件」?如果它只是一個數字,那麼它不是一個csv。它只是一個帶有數字的文本文件。顯示這個.csv文件中的內容 –

+0

感謝您對@MarcB的評論。不能有一個CSV文件只有1行/列?我剛剛使用txt文件測試了該程序,並且shell仍在打印相同的數字。我感謝您的幫助。 – Cesare

+0

你的可執行文件真的叫做'main.c'嗎?並檢查你的'scanf()'調用的返回值。它是'1'嗎? – cremno

回答

1

看起來你正在沿着開始你的程序和得到一個空白行(這是scanf()從標準輸入讀數)開始,然後你寫./main.c < number.txt這意味着你沒有用你的程序管道文件的值,而是scanf是閱讀字符串,因爲它沒有找到一個數字,它返回0.

你需要做的是創建一個控制檯窗口,所以你看到前面的$,然後去所在的目錄,你的EXE是寫./main < number.txt

+0

謝謝!我打開了Terminal.app,輸入'cd'加上包含exe文件的目錄(又名Debug文件夾)。正如你所建議的,我發佈了'./main Cesare

+0

在同一目錄下創建文件'number.txt'文件或在命令行上提供現有number.txt的完整路徑,例如'./main

+0

非常感謝。這工作像一個魅力。取而代之的是'main',我改爲輸入可執行文件名(本例中爲'StackOverflow_Question')。 – Cesare