gpt4 book ai didi

c - 使 fgets() 忽略新行

转载 作者:行者123 更新时间:2023-12-01 11:26:36 26 4
gpt4 key购买 nike

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

我在使程序迭代到新行时遇到问题。当我按下“输入”时它会中止,但我需要它只将下一行作为输入。代码:

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

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

最佳答案

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

size_t len = strlen(seq);
if (len > 0 && seq[len - 1] == '\n')
seq[len - 1] = '\0';
或者,更简洁但可能更令人困惑:
seq[strcspn(seq, "\n")] = '\0';
strcspn() 函数在第一个参数内查找第二个参数中任何字符的第一次出现,并返回该字符的索引,如果没有找到任何字符,则返回字符串末尾的索引。
另外,请记住 strcmp() 如果字符串相等,则返回 0。该函数用于在词法上比较字符串。
此外,您的 for 循环的第一部分毫无意义,您确定您的意思不是:
for (i = 0; ...)

关于c - 使 fgets() 忽略新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36903528/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com