0

我正在开发一个处理集合的 C 程序,但在我的 C 程序中获取数组的值时遇到了麻烦。我认为下面的函数存在逻辑错误。

sizeA 是 26,而 setA 是一个大小为 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 

我想知道如何解决这个问题。

这是代码:

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() 的函数。

谢谢 :)

4

2 回答 2

1

所以,'h' - 'a' = (int) 7 并且如果 'z' - 'a' = 25。对吗?问题是:

. setA 的大小够大吗?

如果是大阵。添加printf("intput c is :%c\n",element);您应该检查 elem 确实是什么。

于 2013-08-05T13:33:00.140 回答
1

void getSetA(bool setA[], int sizeA)-sizeA应该是26。其他一切看起来都很好。

据我了解,您的程序使用一组英文字母 a..z,用户输入一些将启用的字母 - 为他们设置真正的标志。

于 2013-08-05T13:29:42.913 回答