scanf的作用是从缓冲区中按格式字符串的格式,读入相应的内容,按后面的参数表放到相应的地方。scanf的格式控制的一般形式为:%[*][宽度][F|N][h|l]类型字符,方括号内的含义都是可选项,类型字符的含义是编译器对对应信息的处理方式,1看成char型,然后传给int变量的话,只会覆盖其最低的一字节。
缓冲区buffer存放待操作的信息,%c因为要读入所有的char型数据,包括空白字符(空格,tab,回车),所以它是即时读取的,而%d等,%s等都是以空白字符为读取信号,每输入了一个空白字符,就将缓冲区中的数据向scanf中输送一次。
若非空白字符与模式字符串不匹配,则在此处结束scanf函数(这个未成功匹配的字符将留在缓冲区)
模式字符串中的空白字符作用是读掉所有缓冲区中的空白字符(也可以没有)。如scanf("[^\n]\n");这种放在末尾的\n必须要再输入一些其他字符,才可以判断出该结束了。
星号的作用:在%c,%d之间加上星号,表示从缓冲区里按该种类型读取一个内容,但是不输入到特定的某处,%[^\n]%*c可以用来读一个句子,同时读掉缓冲区里剩下的那个回车
另外,避免读char型数据读到回车,最好的办法是scanf(" %c",&c);理由如上