如何将几个单词(中间有空格和任意数字)扫描成字符串,而最后不得到'\ n'字符?我知道有人问过类似的问题,但没有一个给出令人满意的答案。我希望能在一个陈述中得到答案,以实现这种机制。
答案 0 :(得分:3)
char buffer[256];
if (scanf(" %255[^\n]", buffer) != 1)
…oops — EOF or something dramatically awry…
扫描集不会跳过前导空白(%c
或%n
都没有),因此我添加了前导空白以跳过前导空白。如果您也想要前导空格,请在格式字符串中放置该空格,但是您有责任确保输入中的下一个字符不是换行符(如果您刚刚读过一个数字,通常会这样,例如)。到达换行符或到达EOF时,或已读取255个字符时,转换(扫描集)将停止。如果下一个字符是换行符,则可以添加%*[\n]
来读取换行符。但是,您永远不会知道是否匹配。如果您必须知道,则需要:
char buffer[256];
char nl[2];
int rc;
if ((rc = scanf(" %255[^\n]%[\n]", buffer, nl)) <= 0)
…oops — EOF or something dramatically awry…
else if (rc == 1)
…no newline — presumably the input line was longer than 255 characters…
else
…data in buffer is a complete line except for the newline, but the newline was read…
请注意使用255和256:这不是偶然的情况,但有100%的必要。