C 使fgets()忽略新行

C 使fgets()忽略新行,c,C,下面的代码应该从用户那里获取字符串(包含存储中项目的数据) 我无法使程序迭代到新行。当我按下“回车”键时,它会中止,但我需要它将下一行作为输入。代码: for (i; i < STORE_SIZE; i++) { fgets(seq, MAX_STRING_LEN, stdin); if (strcmp(seq, "stop")) { break; } else { init(seq, ptr); *(stor

下面的代码应该从用户那里获取字符串(包含存储中项目的数据)

我无法使程序迭代到新行。当我按下“回车”键时,它会中止,但我需要它将下一行作为输入。代码:

for (i; i < STORE_SIZE; i++) {
    fgets(seq, MAX_STRING_LEN, stdin);
    if (strcmp(seq, "stop")) {
        break;
    }
    else {
        init(seq, ptr);
        *(storage + i) = ptr;
    }
}
用于(i;i

当程序在下一行中获得字符串“stop”时,程序应该中止,而不是按enter键。

fgets
遇到换行符时,总是将换行符添加到缓冲区。清除它的唯一方法是手动将其删除,例如:

size_t len = strlen(seq);
if (len > 0 && seq[len - 1] == '\n')
    seq[len - 1] = '\0';
或者,更简洁但可能更令人困惑的是:

seq[strcspn(seq, "\n")] = '\0';
函数在第一个参数中查找第二个参数中第一次出现的任何字符,并返回该字符的索引,如果未找到任何字符,则返回字符串结尾的索引

另外,请记住,如果字符串相等,则返回0。该函数用于按词汇比较字符串

此外,for循环的第一部分毫无意义,您确定不是指:

for (i = 0; ...)

我不应该设置为0吗?请查看匹配时返回的内容。它不是您认为的代码中显示的那样。另外,请检查1)如果缓冲区以换行符结尾,请将其删除。2) 如果缓冲区现在为空,请再次调用
fgets
。调用
fgets()
时,请始终检查返回值以确保操作成功。一种方法是:`for(i;ifor()循环