2013-10-03 18 views
0

對於作業,我的程序的一部分要求我可以從文件中接收2個數字或手動輸入數字。我可以很容易地從文件中做讓他們:初學者C++以多種方式接收輸入

int n1,n2; 
cin>>n1>>n2; 

這樣一來,與內容簡單地讀取類似文件「7 13」將在就好了閱讀的數字。然而,我的老師要我們有一個格式,我們有每輸入一個數字之前提示,東西是這樣處理的:

int n1,n2; 
cout<<"Number 1: "; 
cin>>n1; 
cout<<"Number 2: "; 
cin>>n2; 

但是,使用此代碼不再簡單地讀2號的能力從文件中。我怎樣才能使這兩種方法的工作?我不能將它們合併成一個程序,因爲那樣我會有兩個相同的提示。這甚至有可能嗎?

在一個旁註,我有數字讀通過鍵入命令行:prog.exe < numberfile>

+0

這不是一種或另一種或兩種情況。你想永遠做對嗎? – ChiefTwoPencils

回答

1
cin>>n1>>n2; 

... 

cin>>n1; 
cin>>n2; 

他們是相同的。打印出cout的東西不會影響cin

操作>> reutrn(在這種情況下cin)到ostream參考,你可以在一個鏈使用>>

+0

是的,這些是相同的,但兩者之間的文本輸出不是。如果我嘗試在文件中讀取文件,我會收到一條錯誤消息。 – user1804208

+0

什麼錯誤信息? – deepmax

0

可以做這樣的事情:

int n1,n2,method; 

cout << "Enter 1 for file method or 2 for prompts: "; 
cin >> method; 

if(method == 1) 
{ 
    cin >> n1 >> n2; 
} 
else if(method == 2) 
{ 
    cout << "Number 1: "; 
    cin >> n1; 
    cout << "Number 2: "; 
    cin >> n2; 
} 
0

我不認爲COUT應該影響CIN,試着在每行的末尾添加ENDL也許這將是一個簡單的解決。

0

您可以像這樣將它們組合起來:

int n1, n2; 
if (argc > 1) 
{ 
    std::ifstream input(argv[1]); 
    if (input) 
    { 
     input >> n1 >> n2; 
    } 
    else 
    { 
     // Handle error 
    } 
} 
else 
{ 
    // Prompt and read from stdin 
} 
1

如果你真的想使用相同的代碼爲兩個流,比我建議:

int n1, n2; 
istream* in = NULL; 
if (argc > 1) { 
    in = new ifstream(); 
    in->open(argv[1]); 
} 
else { 
    in = &cin; 
} 

(*in) >> n1 >> n2; 

if (argc > 1) { 
    delete in; 
} 

歡呼聲,