2013-02-08 91 views
-3

我在考慮以下代碼塊並確保它正常工作時遇到問題。C中的複雜邏輯故障

我有三個可能輸入詞彙,稱他們爲A,B和C

//The following if-else block sets the variables TextA, TextB, and TextC to the appropriate Supply Types. 
if(strcmp(word,TextB)!=0 && strcmp(word,TextC)!=0 && i==1 && strcmp("",TextB)!=0) { 
    strcpy(TextA,word); 
} 
else if(strcmp(word,TextA)!=0 && strcmp(word,TextC)!=0 && i==1 && strcmp("",TextC)!=0) { 
    strcpy(TextB,word); 
} 
else if(strcmp(word,TextB)!=0 && strcmp(word,TextA)!=0 && i==1) { 
    strcpy(TextC,word); 
} 

我希望有發生的是,如果TEXTA中有什麼(第一次就AKA當我= 1;這一切都在一個循環中),然後將單詞寫入TextA。但是,如果TextA確實有內容,請將單詞寫入TextB。如果TextB中有內容,則將TextC設置爲單詞。我可以將這些單詞重新複製到適當的位置,因爲只有3個選項。

+2

請將所有strcmp結果放入一些變量中。這些代碼幾乎不可讀。它也將幫助你弄清楚你的邏輯是否正確。 – nhahtdh 2013-02-08 19:28:31

+0

我不知道你是什麼意思把他們拉入變量? – user2055216 2013-02-08 19:30:31

+1

類似於'int wordEqualTextA =!strcmp(word,textA);' – nhahtdh 2013-02-08 19:33:41

回答

1

好吧,你正在做一個循環,但所有三個檢查有i==1,這意味着你只能進入這些塊之一。 (當i是1時)。

通常,當你有一個完整的if/else if條件塊相同的檢查(邏輯AND'd),你只需將其拉出塊:

if (i == 1){ 
    //do all the other checks 
} 

但仔細想想,如果真的就是你想根據你對你要解決的問題的描述來做......我認爲你根本不需要檢查i
如果你讀了你在這個寫了那麼問題的代碼實際上是從浮現:

如果TEXTA無關,在它然後寫出字來TEXTA
如果TEXTA確實有它的東西,寫字的TEXTB
如果TEXTB有它的東西,TextC設置爲字

這樣遵循邏輯的代碼:

if (strlen(TextA) == 0)  // if TextA has nothing in it, 
    strcpy(TextA, word);  // then write word to TextA 
else if (strlen(TextB) == 0) // else (if TextB doesn't have anything in it) 
    strcpy(TextB, word);  // write word to TextB 
else       // if TextA and TextB already have something 
    strcpy(TextC, word);  // then write word to TextC 
+0

這是行不通的,因爲它們可能會有重複的價值。例如,我可以在一行中有三個,然後是B. – user2055216 2013-02-08 20:25:38

+0

仍然在調試這個。任何人有任何提示如何解決這個問題?我需要很快完成。 – user2055216 2013-02-08 20:28:50

+0

@ user2055216 - 好的,您的要求並不完全清楚。你能給出一個確切的例子,說明你在循環的每次迭代期間的期望。什麼是你使用的真正的變量名稱?你什麼時候在「TextX」中存儲一個單詞?你說的不僅僅是因爲它是空的所以...什麼告訴我把它存儲在B而不是A或C? – Mike 2013-02-08 20:56:58