2013-03-31 48 views
4

我有一個輸入的下一個字符一個問題,我希望用戶僅輸入xX。如果不是,用戶必須再次輸入。此外,我想用一個結構來完成它。這是我的代碼:在C中使用getche在struct中輸入char?

typedef struct chu{ 
    char c; 
}; 

int main(){ 
    chu input; 
    char temp; 
    do{ 
     printf("\nInput: "); 
     temp=getche(); 
     if((temp!='x')||(temp!='X')) 
      printf("\nWrong input (only 'x' or 'X')"); 
     else 
      input.c=temp; 
    }while((temp!='x')||(temp!='X')); 
} 

當我輸入xX,我不應該再次輸入。

回答

3

你如果條件是錯了,它應該是:

if((temp!='x') && (temp!='X')) 
      ^&& if not both 

我換成||&&因爲任何一種技術被接受,因此,如果溫度不等於兩個THEN條件錯誤信息應打印

秒的時間條件應該是:

while(!((temp =='x') || (temp=='X'))); 
    ^

,你說當我輸入x或X,我不應該再次輸入所以,如果temp或者是xX然後(temp =='x') || (temp=='X') == 1並且由於!它給while(0)和環打破

此外,您的結構定義應該是這樣的:

typedef struct { 
    char c; 
}chu; 

我糾正你的代碼,你可以找到from here,並嘗試你的機器上。

1

的問題在於您的病情:

} while((temp!='x')||(temp!='X')); 

這意味着:重複,而它要麼是不等的 'X' 或 'X'。 (這始終是真實的,因爲它只能是一個或另一個 替換爲這樣:。

} while(temp != 'x' && temp != 'X'); 

重複,同時它也不「X」或「X」 同樣的問題是在你的if進一步起來(我似乎已經忽略了周圍這是第一次,我的壞)

你的代碼可以重建是這樣的:

int main(){ 
    chu input; 
    char temp; 
    while(true) { 
     printf("\nInput: "); 
     temp=getche(); 
     if(temp != 'x' && temp != 'X') 
      printf("\nWrong input (only 'x' or 'X')"); 
     else { 
      input.c=temp; 
      break; 
     } 
    } 
} 

此代碼將永遠循環下去(如while(true)所示)但只要輸入'x'或'X',它就會將變量設置爲您的結構體並且不受循環的影響。

約語義的小信息:作爲第一個條件返回true

任何由OR(||)連接停止被評估,一旦。那一刻,無論如何,整個構造將返回true

相反,只要第一個條件返回false,您連接的任何東西都會停止評估,因爲它無論如何都會使整個構造false

要回到你的榜樣,這是你的編譯器做什麼,假設我們輸入「X」

if(temp != 'x') {  //Okay, it's not 'x'. Let's try the next one. 
    if(temp != 'X') { //Oh wait, it IS X. I can't stop yet! 
     //Stop looping 
    }     //This will be executed 
} 
//Loop me! 

而且這是它與&&

if(temp == 'x') {  //Hmm...not 'x'. 
    if(temp == 'X') { //Oh wait! It IS 'X'. 
     //Stop looping //This gets executed. 
    } 
} 
//Loop me! 

做你可能已經注意到,我在這裏將!=更改爲==。我可以做到這一點,因爲二進制算術。 NOT(x OR X)等於(NOT x AND NOT X)。

+0

,而條件是正確的,我認爲檢查什麼OP需要 –

+0

@GrijeshChauhan我的理解是,他想程序停止一次X || X是輸入,是不是正確的?然而,這個程序設置的方式,無論你輸入什麼,它都會無限循環。 –

+0

抱歉,延遲響應:可以找到爲什麼這是錯誤的(t​​emp!='x'&& temp!='X'); ** **提示**嘗試兩次temp ='X'和temp temp ='a ' –