如何将几个单词(中间有空格和任意数字)扫描成一个字符串,而不在最后得到“\n”字符?我知道有人问过类似的问题,但没有一个给出真正令人满意的答案。我希望能在一次发言中得到实现这种机制的答案。

最佳答案

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%是必要的。

关于c - 不用C语言就能获得多个单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51343741/

10-12 00:20