【问题标题】:Trouble getting an array in sets program (C)在集合程序中获取数组时遇到问题 (C)
【发布时间】:2013-08-06 05:21:26
【问题描述】:

我正在开发一个处理集合的 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()的函数。

谢谢你:)

【问题讨论】:

  • 那么现在该函数应该做什么呢? “它应该打印 ffffffftttttfffffff 但它打印 ffffff”对我们来说不是很有帮助......
  • puts("fffffftttttffffffffffffff")
  • 但据我所知,这段代码实际上会导致未定义的行为,因为setA(我认为)是一个只有 5 个元素的数组,但使用'l' - 'a' 的索引是索引 11,这显然超出了界限。
  • @H2CO3 该函数用于打印布尔数组;例如如果 setA[0] = true, setA[1] = false,它将打印 tf.数组的大小为 26。
  • @Dukeling 在布尔数组中,用户输入一个元素,然后为他们设置 true 标志。数组的大小为 26。因此,如果用户输入 h,i,j,k,l,将为这些字母设置 true 标志

标签: c arrays boolean set


【解决方案1】:

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

。 setA 的大小够大吗?

如果它是一个大数组。添加printf("intput c is :%c\n",element); 你应该检查一下 elem 到底是什么。

【讨论】:

  • setA的大小为26
【解决方案2】:

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

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

【讨论】:

  • 是的,您理解正确,但我不明白如何解决?
  • @Paul Filch,设置 sizeA const = 26 并且您需要 setA[] 的大小为 26,因为您正在使用 26 个元素
  • 问题是,sizeA是用户在程序的另一部分输入的。该程序首先会询问您希望在一组中包含多少个字母。另外,集合 A 的大小已经是 26,我先这样初始化它:setA[26]
  • @Paul Filch 你应该考虑改变你的功能逻辑。用户不应该提供集合的大小,因为它总是 26,直到发生一些英语语言的改革并且会出现额外的字母,这是非常不幸的))。只需要求用户输入空字符串或一些特殊符号以表明他已完成输入
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多