scanf函数使用注意

使用 scanf 函数需要注意的点

  1. 缓冲区问题
    scanf 在使用的时候,回车符也会留在缓冲区,因此在用 %c 的时候可能会读到回车符。可以加上 fflush(stdin) 刷新缓冲区

  2. 空白符问题

    scanf("%d\n",&a); 这种 scanf 会跳过空白符去读下一个字符。空白符号包括:空格、制表符、换行符、回车符和换页符。

  3. 输入不匹配问题

    1
    2
    scanf("%d%c", &a, &c);
    scanf("%d%c", &a, &c);

    对于scanf,在输入的时候,如果和第一个参数类型匹配,则继续从缓冲区中读取数据和第二个参数进行匹配,依次进行下去,直到匹配完所有的参数;

    如果其中有一个参数不匹配,那就从这个地方跳出,忽略这个 scanf 后面所有的参数,而去执行下一条语句。

  4. 输入字符串中空格问题

    %[...] 表示只提取与 [ ] 中相匹配的内容,碰到其他内容则终止提取;注意:方括号两边不能空格,否则空格也会算到里面的。

    %[^...](注意异或符’^’)表示提取内容,碰到[]中相匹配的内容则终止提取;可以解决 scanf 的输入中不能有空格的问题。例如: scanf("%[^\n]",strings) 就可以在输入的时候忽略空格。