【发布时间】: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 标志