gpt4 book ai didi

c - 嵌套的 if-else 语句给我带来了问题

转载 作者:太空宇宙 更新时间:2023-11-04 07:02:37 24 4
gpt4 key购买 nike

我编写的代码应该计算字符指针列表中 a、c、t 和 g 的数量。然后如果输入的字符不是 a、c、t 或 g,则应该将无效字母添加到字符列表 invalidBase 中。相反,当我输入数据 agtcpoop 时,它会打印出 Invalid Base: 但当它应该打印出 poop 时,字符不存在。请帮忙!这是代码:

void countBase(char *p)
{
int aCount = 0, cCount = 0, tCount = 0, gCount = 0;
char invalidBase[100];
int i, j=0;
while(*p != '\0')
{
if(*p == 'A' || *p == 'a')
{
aCount++;
}
else if(*p == 'C' || *p == 'c')
{
cCount++;
}
else if(*p == 'T' || *p == 't')
{
tCount++;
}
else if(*p == 'G' || *p == 'g')
{
gCount++;
}
else
{
invalidBase[j] = *p;
}
j++;
p++;
}

for(i = 0; invalidBase[i] != '\0'; i++)
{
printf("Invalid Base: %c\n", invalidBase[i]);
}

printf(" A: %i\n C: %i\n T: %i\n G: %i\n", aCount, cCount, tCount, gCount);
}

最佳答案

Yoy 通过使用具有自动存储持续时间的未初始化变量的值调用了未定义的行为,这是不确定的。

改进:

  • 仅当数据存储到 invalidBase 时才增加计数器 j
  • 使用j 确定要打印的长度。

改进的代码:

void countBase(char *p)
{
int aCount = 0, cCount = 0, tCount = 0, gCount = 0;
char invalidBase[100];
int i, j=0;
while(*p != '\0')
{
if(*p == 'A' || *p == 'a')
{
aCount++;
}
else if(*p == 'C' || *p == 'c')
{
cCount++;
}
else if(*p == 'T' || *p == 't')
{
tCount++;
}
else if(*p == 'G' || *p == 'g')
{
gCount++;
}
else
{
if(j < (int)(sizeof(invalidBase) / sizeof(*invalidBase))) /* avoid buffer overrun */
{
invalidBase[j] = *p;
j++;
}
}
p++;
}

for(i = 0; i < j; i++)
{
printf("Invalid Base: %c\n", invalidBase[i]);
}

printf(" A: %i\n C: %i\n T: %i\n G: %i\n", aCount, cCount, tCount, gCount);
}

请注意,您可以使用 switch 语句代替这些许多 if-else 语句。

void countBase(char *p)
{
int aCount = 0, cCount = 0, tCount = 0, gCount = 0;
char invalidBase[100];
int i, j=0;
while(*p != '\0')
{
switch(*p)
{
case 'A':
case 'a':
aCount++;
break;
case 'C':
case 'c':
cCount++;
break;
case 'T':
case 't':
tCount++;
break;
case 'G':
case 'g':
gCount++;
break;
default:
if(j < (int)(sizeof(invalidBase) / sizeof(*invalidBase))) /* avoid buffer overrun */
{
invalidBase[j] = *p;
j++;
}
break;
}
p++;
}

for(i = 0; i < j; i++)
{
printf("Invalid Base: %c\n", invalidBase[i]);
}

printf(" A: %i\n C: %i\n T: %i\n G: %i\n", aCount, cCount, tCount, gCount);
}

关于c - 嵌套的 if-else 语句给我带来了问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36168854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com