我正在处理一个处理集合的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()的函数。
谢谢:)
答案 0 :(得分:1)
void getSetA(bool setA[], int sizeA)
- sizeA
应 26 。
其他一切看起来都不错。
据我所知,你的程序使用一组英文字母a..z,用户输入一些将启用的字母 - 对于它们,将设置真正的标记。
答案 1 :(得分:1)
所以,'h' - 'a'=(int)7如果'z' - 'a'= 25.对吗?问题是:
。 setA的大小是否足够大?
如果它是一个大阵列。添加printf("intput c is :%c\n",element);
您应该检查确实是什么元素。