Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何读取数组直到新行“\n”?_C_Arrays_String_Class - Fatal编程技术网

C 如何读取数组直到新行“\n”?

C 如何读取数组直到新行“\n”?,c,arrays,string,class,C,Arrays,String,Class,因此,我将向这个函数传递一个字符串,其中数组的长度默认为50 我使用以下命令输入字符串 void inputDNA(char *dnaSequence) { printf("Enter the sequence."); scanf("%s", dnaSequence); } 因此,我认为/n将位于数组的最后一个位置,如果它小于50。所以我有这个循环 for(i = 0; i<length || dnaSequence[i] == '\n'; i++) {

因此,我将向这个函数传递一个字符串,其中数组的长度默认为50

我使用以下命令输入字符串

void inputDNA(char *dnaSequence)
{
    printf("Enter the sequence.");
    scanf("%s", dnaSequence);
}
因此,我认为/n将位于数组的最后一个位置,如果它小于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或到达数组的末尾。它对我输入的字符串正确地执行了该操作,但是它只是从数组的剩余部分中抛出随机字符,如果它们是无效的,则调用它们

所以,为了说明我所说的,这里是行动

有什么帮助吗?

为dnaSequence保留的内存脏了。scanf将读取的字符放在开头,但结尾保持不变。您应该在for循环中检查c字符串的结尾

为dnaSequence保留的内存已脏。scanf将读取的字符放在开头,但结尾保持不变。您应该在for循环中检查c字符串的结尾


你在for语句中的逻辑是错误的。当for循环的条件部分返回false时,for将结束

请记住,for的语法是: 用于初始化;有条件的增量

您的条件应该使用And,而不是Or,因为我 试一试


你在for语句中的逻辑是错误的。当for循环的条件部分返回false时,for将结束

请记住,for的语法是: 用于初始化;有条件的增量

您的条件应该使用And,而不是Or,因为我 试一试


agwaraen的回答同样适用,您的输入可能是脏的。对于记录,C数组的空终止符字符是\0,而不是\n。因此,如果您想保护数组的结尾,请尝试我刚才编辑的代码。agwaraen的答案也适用,您的输入可能会变脏。对于记录,C数组的空终止符字符是\0,而不是\n。如果你想保护数组的结尾,试试我刚刚编辑的代码。啊,好的,谢谢!虽然我不知道它是怎么工作的。如果for循环直到结束才停止,为什么它不检查并打印出所有无效的基,直到50个字符的数组结束?声明时,null字符不会在数组末尾抛出,它只是将抛出的数据与数组中的空白分隔开来?@Carson在读取输入中\n以外的所有字符后,scanf插入\0字符。您必须分配足够的空间来存储所需的所有字符加上一个\0。如果你想存储50个字符,你需要为51个字符预留空间。啊,好的,谢谢!虽然我不知道它是怎么工作的。如果for循环直到结束才停止,为什么它不检查并打印出所有无效的基,直到50个字符的数组结束?声明时,null字符不会在数组末尾抛出,它只是将抛出的数据与数组中的空白分隔开来?@Carson在读取输入中\n以外的所有字符后,scanf插入\0字符。您必须分配足够的空间来存储所需的所有字符加上一个\0。如果要存储50个字符,需要为51个字符预留空间。
for(i = 0; i<length && dnaSequence[i] != '\n' && dnaSequence[i] != '\0'; i++)
for(i = 0; i < length && dnaSequence[i] != '\0'; i++)
for(i=0; i<length && dnaSequence[i] !='\0'; i++)