天天看点

C语言中scanf函数

C语言中scanf函数

在学习C语言的过程中遇到了scanf函数的输入格式问题

  • 在《C++ primer plus》这本书中对scanf函数输入说明如下
scanf()函数每次读取一个字符,跳过所有的空白字符,直至遇到第1个非空白字符才开始读取。
因为要读取整数,所以 scanf()希望发现一个数字字符或者一个符号(+或-)。
如果找到一个数字或符号,它便保存该字符,并读取下一个字符。
如果下一个字符是数字,它便保存该数字并读取下一个字符。scanf()不断地读取和保存字符,直至遇到非数字字符。
如果遇到一个非数字字符,它便认为读到了整数的末尾。然后,scanf()把非数字字符放回输入。
这意味着程序在下一次读取输入时,首先读到的是上一次读取丢弃的非数字字符。
最后,scanf()计算已读取数字(可能还有符号)相应的数值,并将计算后的值放入指定的变量中。
           

例如

scanf("%d%d", &rows, &cols)

scanf("%d %d", &rows, &cols)

两个%d中间的空白数量不影响赋值

输入的数据格式如

2 3

或者

2 3

(中间很多空格)都可正确识别并赋值,自动忽略空格并分割数据。

但如果格式如下

scanf("%d,%d", &rows, &cols)

输入的数据格式必须以,分割,如

2, 3

才能正确识别,同时也可忽略其中的空白符,

  • 2, 3 ,

    格式输入等同于

    2, 3

    ,即将,等同于空白进行忽略
  • 2 3

    输入会报错,因为没有找到

    ,

    ,scanf认为

    2 3

    是一个整体赋值给了rows。