如何将几个单词(中间有空格和任意数字)扫描成一个字符串,但最后没有得到'\n‘字符?我知道有人问过类似的问题,但他们都没有给出真正令人满意的答案。我希望在一句话中就能得到实现这种机制的答案。
发布于 2018-07-15 06:10:35
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%必要的。
https://stackoverflow.com/questions/51343741
复制相似问题