使fgets()忽略一个新行

时间:2016-04-28 01:12:06

标签: c

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

我无法让程序迭代到新行。当我推进"进入"但我需要它只是将下一行作为输入。代码:

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

程序应该在收到字符串时中止&#34;停止&#34;在下一行,而不是按Enter键。

1 个答案:

答案 0 :(得分:4)

FileOutputStream将始终将换行符添加到遇到它的缓冲区中。摆脱它的唯一方法是手动删除它,例如:

fgets

或者,更简洁但也许更容易混淆:

size_t len = strlen(seq);
if (len > 0 && seq[len - 1] == '\n')
    seq[len - 1] = '\0';

strcspn()函数查找第一个参数内第二个参数中第一个出现的任何字符,并返回该字符的索引,如果没有,则返回字符串结尾的索引找到了人物。

另外,请记住,如果字符串相等,strcmp()将返回0。该函数用于词法上比较字符串。

此外,你的for循环的第一部分没有意义,你确定你不是这个意思:

seq[strcspn(seq, "\n")] = '\0';