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()
循环