2014-10-02 168 views
-2

我對C++很陌生,但我知道Java。我得到了一項任務,其中程序要求輸入「主動軍事(是/否):」並根據輸入做出決定。我試圖通過驗證輸入來防止程序表單混淆。我目前正在使用意大利麪代碼,因爲我無法弄清楚。請不要判斷。我也不以此爲榮。C++驗證用戶輸入爲字符或字符串

lable1: 
cout << "Active Military (Y/N): "; 
cin >> strMilitary; 

//Check for valid input 
if(strMilitary == "Y") 
{ 
    goto lable2; 
} 
if(strCounty == "N") 
{ 
    goto lable2; 
} 

cout << "Invalid Input" << endl; 
goto lable1; 

//Continue 
lable2: 

lable3: 
cout << "Mecklenburg or Cabarrus (C/M): "; 
cin >> strCounty; 

//Check for valid input 
if(strCounty == "C") 
{ 
    goto lable4; 
} 
if(strCounty == "M") 
{ 
    goto lable4; 
} 

cout << "Invalid Input" << endl; 
goto lable3; 

//Continue 
lable4: 

有什麼辦法可以使用while循環嗎?我真的想要簡化這一點。正如我所說的,我並不爲現在的狀態感到自豪。

+0

您還在使用goto嗎? – taocp 2014-10-02 18:09:24

+2

所以......你在Java中使用了'goto'?真的,同時有兩種語言之間有許多差異,基本流程結構幾乎相同(分支,循環等) – crashmstr 2014-10-02 18:10:55

+0

@crashmstr他說他知道Java的,不是說他知道編程。只知道一門語言只是冰山一角。 – 2014-10-02 18:31:50

回答

2

我建議不要使用goto語句。

下面是如何使用while循環來獲取軍事上輸入:

#include <iostream> 

using namespace std; 

int main() 
{ 
    char military = '\0'; // any initial value that's not Y or N 
    while(military != 'Y' && military != 'N') { 
    cout << "Active Military (Y/N): "; 
    cin >> military; 
    } 

    cout << "You have entered: " << military << endl; 

    return 0; 
} 
+1

我建議使用'std :: toupper'或'std :: tolower',這樣你就可以用一個if語句來處理大寫和小寫。 – 2014-10-02 18:43:51

2
  1. 嘗試使用字符變量而不是字符串(因爲你只使用字符)

以下代碼會產生類似的效果

#include<iostream> 
using namespace std; 

int main() 
{ 
    char military = '\0', county = '\0'; 

    while(1) 
    { 
    cout << "Active Military (Y/N): "; 
    cin >> military; 
    if(military == 'Y' || military == 'N') 
    { 
     // maybe call a method to do something, depending on the input   
     break; 
    } 
    cout << "Invalid Input!!"; 
    }  

    while(1) 
    { 
    cout << "Mecklenburg or Cabarrus (C/M): "; 
    cin >> county; 
    if(military == 'M' || military == 'C') 
    { 
     // call a method to do something, depending on the input   
     break; 
    } 
    cout << "Invalid Input!!"; 
    }  

return 0; 

} 
+1

如果用戶輸入「y」或「n」作爲第一個提示,並且類似地選擇「c」或「m」作爲第二個提示,則代碼將失敗。請閱讀'std :: toupper'和'std :: tolower'。 – 2014-10-02 18:45:31