所以我将一个字符串传递给这个函数,其中数组的长度默认为50.
我使用此
输入字符串void inputDNA(char *dnaSequence)
{
printf("Enter the sequence.");
scanf("%s", dnaSequence);
}
所以我想/如果它小于50,那么它将位于数组的最后位置。所以我有这个用于循环......
for(i = 0; i<length || dnaSequence[i] == '\n'; i++)
{
switch(dnaSequence[i])
{
case 'A': aCount++;
break;
case 'a': aCount++;
break; //do this for g,c,t but for readability I removed them for this post.
default:
{
printf("Invalid Base %c\n", dnaSequence[i]);
break;
}
}
}
读取字符串并计算所有a,g,t,c但打印出任何无效的碱基。它执行此操作直到找到/ n或它到达数组的末尾。它为我输入的字符串正确地执行了它,但是它只是在后半部分从数组的其余部分引入随机字符,并且如果它们那么调用它们都是无效的。
所以只是为了说明我在说什么,这里就是在行动。 Image
任何帮助?
答案 0 :(得分:4)
为dnaSequence
保留的内存很脏。 scanf
将读取的字符放在开头但结尾保持不变。您应该在for
循环中检查c-string的结尾。
for(i = 0; i<length && dnaSequence[i] != '\n' && dnaSequence[i] != '\0'; i++)
编辑:值得一提的是scanf
没有读取行尾字符\n
。所以检查它是不必要的。
for(i = 0; i < length && dnaSequence[i] != '\0'; i++)
答案 1 :(得分:2)
你的陈述中的逻辑很糟糕。当for循环的条件部分返回false时,你的for将结束。
请记住,语法是: for(初始化;条件;增量)
你的条件应该使用And而不是Or,因为我
尝试
for(i=0; i<length && dnaSequence[i] !='\0'; i++)