2011-06-22 84 views
0

我有一個簡單的本地C++控制檯應用程序。
我想留下來是這樣的:與控制檯應用程序中的字符串相比較

Quit? (Y/N) 

,並能夠在Y或N鍵入告訴程序做什麼? 到目前爲止,我有這樣的代碼:

std::string whetherToQuit; 
std::cout<<"Quit? (Y/N): "; 
std::cin>>whetherToQuit; 
if(whetherToQuit == "Y"){ 
     exit(EXIT_SUCCESS); 
} 
else if (whetherToQuit == "N"){ 
     break; 
} 

MSVC++給我一個警告,我覺得應該有更好的方式來做到這一點。
如果有問題,我正在使用Windows。
有什麼建議嗎?

+4

什麼警告? – StevieG

+1

不要退出(),使用return。退出()繞過RAII。 –

+0

VS2010和W4不會在我的機器上發出警告。 – mkaes

回答

0

有三點值得一提的是:

  1. 你爲什麼要使用字符串?用char代替:

    char ans;如果(ANS == 'Y'){// 運 } 否則,如果(ANS == 'N'){// 運 }

  2. 你爲什麼要使用 「突破」 裏面否則,如果 。 break語句只能在switch或loop中使用。

  3. [新增]使用return而不是Exit。出口繞過RAII。

最終代碼看起來應該像

char ans; 
std::cout << "Quit? (Y/N): "; 
std::cin >> ans; 
if (ans == 'Y') { 
    return 0; 
} 
else if (ans == 'N') { 
    // No op; 
} 
+0

不,作爲已經提到的評論者,您不應該在C++中退出(),因爲它會繞過RAII。而不是返回。 –

+0

正如一個旁註:一旦你用退貨取代退出,我會刪除我的downvote。但鼓勵退出真的不好。 –

0

警告信息說什麼?

你可以這樣做:

const std::string strYes = "Y"; 
const std::string strNo = "N"; 

,然後用此常數進行比較。

2

爲什麼不使用char代替:

char ans; 
std::cout << "Quit? (Y/N): "; 
std::cin >> ans; 
if (ans == 'Y') { 
    return 0; 
} 
else if (ans == 'N') { 
    break; 
}