2013-08-05 171 views
0

我工作的一個C程序與套交易,我遇到麻煩值在我的C程序中的數組的數組。我在考慮下面的函數中有一個邏輯錯誤。麻煩的程序集(C)

SIZEA是26,和組A是一個布爾值集合大小的26

下面是函數應該如何變成如果SIZEA爲5:

Enter the first element in Set A: //user enters h 

Enter the next element of Set A: //user enters i 

Enter the next element of Set A: //user enters j 

Enter the next element of Set A: //user enters k 

Enter the next element of Set A: //user enters l 

fffffftttttffffffffffffff 

然而事實證明像這一點,如果SIZEA是5:

Enter the first element in Set A: //user enters h 

Enter the next element of Set A: //user enters i 

Enter the next element of Set A: //user enters j 

Enter the next element of Set A: //user enters k 

Enter the next element of Set A: //user enters l 

ffffff 

我想知道H.解決這個問題。

下面是代碼:

void getSetA(bool setA[], int sizeA) 
{ 
     letters element, letter; 
     int position = 0, num, i; 

     for(i = 0; i < sizeA; i++)  //sizeA is inputted before 
     { 
      setA[i] = FALSE;  
     } 
     printf("\nEnter the first element in Set A: "); 
     element = getcharNoBreaks(); 
     if (element >= 'a' && element <= 'z') 
     { 
       setA[element-'a'] = TRUE; 
     } 
     for(num = 1; num < sizeA; num++) 
     { 
      printf("\nEnter next element of Set A: "); 
      element = getcharNoBreaks(); 
      if(element >= 'a' && element <= 'z') 
      { 
         setA[element - 'a'] = TRUE;   
      } 
      else  printf("Element out of range"); 
     } 
     printf("\n"); 
     for(i = 0; i < sizeA; i++) 
     { 
      if(setA[i] == TRUE) printf("t"); 
      else    printf("f");  
     }  
} 

注意letters,是我定義的類型(如字母表中的所有字母),並且getcharNoBreaks()是一個函數,它等效於的getchar() 。

謝謝:)

+1

那麼現在**函數應該做些什麼? 「這應該打印ffffffftttttfffffff但它打印FFFFFF」是不是對我們非常有幫助... – 2013-08-05 13:24:44

+1

'看跌期權(「fffffftttttffffffffffffff」)' –

+0

但是,從我所知道的,這段代碼實際上將導致不確定的行爲,如'setA'(我認爲)是一個只有5個元素的數組,但是用'''' - 'a''索引是索引11,它顯然是*超出範圍。 –

回答

1

所以, 'H' - 'A'=(int)的7,並且如果 'Z' - 'A'= 25,對嗎?問題是:

。 setA的大小足夠大嗎?

如果一個大陣。添加printf("intput c is :%c\n",element);你應該檢查一下elem的確是真的。

+0

setA的大小是26 –

+0

@PaulFilch打印它 –

+0

哦,我現在明白了 –

1

void getSetA(bool setA[], int sizeA) - sizeA應該。 一切看起來不錯。

我瞭解你計劃與設定的英文字母A到Z的,用戶輸入一些字母,將啓用 - 對他們來說真正的標誌將被設置。

+0

是的,你理解正確,但我不明白如何解決它? –

+0

@保羅費爾奇,使SIZEA常量= 26並且需要尺寸26的組A []作爲您正在使用26個元素工作 –

+0

的問題是,SIZEA通過在程序中的其它部分的用戶輸入。該程序首先會詢問你想要在一組中有多少個字母。另外,A組已經是26號大小了,我首先像這樣初始化它:'setA [26]' –