以下代码应从用户获取字符串(包含存储中的项目数据)。
我在使程序迭代到新行时遇到问题。当我按下“输入”时它会中止,但我需要它只将下一行作为输入。代码:
for (i; i < STORE_SIZE; i++) {
fgets(seq, MAX_STRING_LEN, stdin);
if (strcmp(seq, "stop")) {
break;
}
else {
init(seq, ptr);
*(storage + i) = ptr;
}
}
Run Code Online (Sandbox Code Playgroud)
当程序在下一行中得到字符串“stop”时,程序应该中止,而不是按下回车键。
fgets遇到换行符时,将始终将换行符添加到缓冲区。摆脱它的唯一方法是手动删除它,例如:
size_t len = strlen(seq);
if (len > 0 && seq[len - 1] == '\n')
seq[len - 1] = '\0';
Run Code Online (Sandbox Code Playgroud)
或者,更简洁但可能更令人困惑:
seq[strcspn(seq, "\n")] = '\0';
Run Code Online (Sandbox Code Playgroud)
该strcspn()函数在第一个参数内查找第二个参数中任何字符的第一次出现,并返回该字符的索引,如果没有找到任何字符,则返回字符串末尾的索引。
另外,请记住,strcmp()如果字符串相等,则返回 0。该函数用于在词法上比较字符串。
此外,您的 for 循环的第一部分毫无意义,您确定您的意思不是:
for (i = 0; ...)
Run Code Online (Sandbox Code Playgroud)