如何读取数组直到新行' \ n'?

时间:2015-03-12 01:16:56

标签: c arrays string class

所以我将一个字符串传递给这个函数,其中数组的长度默认为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

任何帮助?

2 个答案:

答案 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++)