2014-03-02 65 views
0

我編程使用重定向(UNIX)./calculator < expressions.txt在我的主要使用while循環來接收來自文件表達式計算器:以在用戶輸入

while(getline(cin, exp)) { 
    try { 
    return the evaluated expressions 
} 
catch (error) { ... } 
} 

此爲正常工作我並返回正確的值。 但是,我還希望我的程序在用戶輸入文件沒有重定向的情況下(它目前出錯和核心轉儲)。如果沒有提供文件並且避免while循環,如何接受用戶輸入。

謝謝。

+0

您的文件正在替代'stdin'。如果你只是自己執行命令,你將會輸入'。/ calculator',然後在下一行提供表達式。您可以通過'ctrl-D'終止表達式。你的意思是你試圖提供文件名作爲命令行參數,比如'./calculator expressions.txt'? – unxnut

回答

0

當你正在採取的輸入,而像這樣:

./calculator < expressions.txt 

這意味着你正在服用僅STDIN輸入。所以如果用戶沒有提供輸入文件,那麼代碼本身只會接受來自用戶的輸入。所以你不需要在代碼中單獨處理文件。只需從stdin輸入。

2

而不是重定向stdin爲什麼不建立你的程序來接受命令行參數,其中之一可能是文件名。然後

int main(int argc, char* argv[]) { 
    if(argc > 1) 
    { 
     // File name is provided. Open the file and read the data 
    } 
    else 
    { 
     // File name is not provided. Get input from user. 
    } 
    return 0; 
} 

這是有點微不足道,但我敢肯定,你明白這一點。對於任何更復雜的命令行arg解析,請使用庫。

+0

這是一個好主意!非常感謝你。 – IamDaniel

+0

@IamDaniel告訴我它是如何工作的。 – turnt