C 如何读取数组直到新行“\n”?
因此,我将向这个函数传递一个字符串,其中数组的长度默认为50 我使用以下命令输入字符串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++) {
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++)