在C语言中如何获取多个单词而不获取\n?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (92)

如何将几个单词(中间有空格和任意的数字)扫描成字符串,但最后没有得到‘\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;
int  rc;

if ((rc = scanf(" %255[^\n]%[\n]", buffer)) <= 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%是必要的。

扫码关注云+社区

领取腾讯云代金券