2013-09-24 24 views
1
int f =0; 
    std::cout << " do you want to use 1. component y or n " << std::endl; 
    std::cin >>f; 
    if(f == 'y' || f =='n'){ 
     if (f =='y'){ 
      this->decisionvector[0] = 1; 
     }else 
      this->decisionvector[0] = 0; 

    } 

    std::cout << " do you want to use 2. component y or n " << std::endl; 
    std::cin >>f; 
    if(f == 'y' || f=='n'){ 
     if (f =='y'){ 
      this->decisionvector[1] = 2; 
     }else 
      this->decisionvector[1] = 0; 
     f= 0; 
    } 
    std::cin.clear(); 
    std::cout << " do you want to use 3. component y or n " << std::endl; 
    std::cin >>f; 
    if(f == 'y' || f =='n'){ 
     if (f =='y'){ 
      this->decisionvector[2] = 4; 
     }else 
      this->decisionvector[2] = 0; 
     f= 0; 
    } 
    std::cin.clear(); 
    std::cout << " do you want to use 4. component y or n " << std::endl; 
    std::cin >>f; 
    if(f == 'y' || f =='n'){ 
     if (f =='y'){ 
      this->decisionvector[3] = 8; 
     }else 
      this->decisionvector[3] = 0; 
     f= 0; 
    } 

爲什麼我只能在第一個if語句中設置f,程序不會停止在其他程序中?這部分C++代碼有什麼問題?

+7

在第二個塊中,您正在讀入'k',但比較了'f'。這顯然是錯誤的。 –

+0

我編輯過的代碼仍然是同樣的問題 – Engine

+0

用調試器遍歷代碼,看看發生了什麼。 –

回答

3

你應該改變int fchar f

+0

好吧,但爲什麼? – Engine

+0

我只是猜測,但它的第一件事是關於char和int的物理尺寸(8位,16位是unicode,4位是int)。是的,你可以用一個數字來檢查一個字符,比如'c'== 35,但是我不認爲用int變量做安全和正確。 – IssamTP

+1

@Engine'std :: cin :: operator >>(int&)'將解析字符序列爲一個整數值。 'std :: operator >>(istream&is,char&c)'將提取該字符並將其值存儲爲*。 – zakinster

0

在你讀數來說,K,但用y中的第二塊...

std::cin >>k; 
if(k == 'y' || k=='n'){ 
    if (f =='y'){ 
     this->decisionvector[1] = 2; 
    }else 
     this->decisionvector[1] = 0; 
    f= 0; 
} 
2
int f =0; 
std::cin >>f; 

std::cin讀取和解釋字符的序列。

如果fint,它將使用提取運算符operator>>int超負荷。該運算符將嘗試將輸入格式化爲整數。

如果用戶通過字符'y',操作員將無法將其解釋爲整數並將存儲0f。您可以使用cin.fail()檢查流的錯誤狀態。

如果你想讀一個字符,你必須使用一個char