不用C语言就能获得多个单词

时间:2018-07-14 22:05:12

标签: c scanf newline fgets

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

1 个答案:

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