2013-08-05 128 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]' –