分享

用scanf()函数读取空白字符,回车符\r换行符\n等

 rookie 2016-06-20

C语言中scanf()函数是从标准输入流stdin中读取信息的,很多时候调用scanf()函数却得不到想要的信息,可以从这方便考虑解决问题。

fflush(stdin);

是个不错的方法。

 

想要用scanf()函数读入空白字符,回车符和换行符这些字符,就需要提到scanf()函数的格式说明符:

转换字符(就是%后跟的部分)

  a 读浮点值(仅适用于 C99)

  A 读浮点值(仅适用于 C99)

  c 读单字符

  d 读十进制整数

  i 读十进制、八进制、十六进制整数

  e 读浮点数

  E 读浮点数

  f 读浮点数

  F 读浮点数(仅适用于 C99)

  g 读浮点数

  G 读浮点数

  o 读八进制数

  s 读字符串

  x 读十六进制数

  X 读十六进制数

  p 读指针值

  n 至此已读入值的等价字符数

  u 读无符号十进制整数

  [ ] 扫描字符集合

  % 读 % 符号(百分号)

  附加格式说明字符表修饰符说明

  L/l 长度修饰符 输入"长"数据

  h 长度修饰符 输入"短"数据

  W 整型常数 指定输入数据所占宽度

  * 表示本输入项在读入后不赋值给相应的变量

上面提到的 扫描字符集合 []就是关键,它使得读入空白字符成为可能。如下所示:

#include <stdio.h>

#include <string.h>

 

int main()

{

    char str1[80], str2[80];

    memset(str1, 0, 80);

    memset(str2, 0, 80);    //这个地方可以设不同的值- -,显示的时候很有趣

 

    scanf("%[^\n]%*5c%[^\n]", str1, str2);

    printf("%s\n%s\n", str1, str2);

 

    return 0;

}

上面代码使得空格,制表符作为输入成为可能,其中 %[^\n] 表示除了换行符\n之外的字符都接收。

如想要接收换行符\n作为输入,只需要在扫描字符集中添加\n即可。

注意:

回车符是特殊字符,在scanf("%[^\n]", str)之后需要增加scanf("%c", newline),消除回车符。否则,只要接收到一个回车符scanf会不停止运行。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多