标题使用%c格式符输入数据时存在的问题
前面我们介绍了如何用scanf函数以c格式输入字符型数据,用scanf以字符型输入数据的时候,需要注意哪些问题呢?
首先来看这个程序,这个程序,就是要求用户分别输入一个整形数,字符型数据和浮点型数据,并且依次把他们向屏幕来输出,就是我们希望得到的运行结果应该是这样的
首先给出这样的一个提示信息,
Please input an integer:12→
用户输入了一个整型数据之后呢,就向屏幕输出这个整型数据
integer:12
接下来提示用户输入一个字符型数据,用户输入了一个字符型数据之后,就向屏幕输出这个字符型数据,
Please input an character :a→
character:a
在接下来提示用户在键盘上输入一个浮点型数据,用户输入了一个浮点型的数据之后呢。
就像屏幕输出这个浮点型数据
Please input a float number :3.5→
float:3.500000
这是我们希望得到的运行结果,
但是事与愿违,这个程序,实际得到的运行结果并不是这个样子的。
实际运行结果是这个样子的,
首先向屏幕输出了一个这样的提示信息,提示用户输入一个整型数据,假设我们用户输入的整型数据是12,然后屏幕确实输出了整型数据12,但是接下来,
Please input an integer:
integer:12
但是接下来程序应该让用户输入一个字符型数据,然后在输出字符型数据,但是我们看到实际上这个程序并没有等待用户从键盘上输入这个字符型数据,就直接输出了字符型数据,并且输出的字符型数据是一个换行
在接下来,提示用户输入一个浮点型数据
假设用户输入的是3.5,然后程序输出用户从键盘输入的这个浮点型数据3.5,从这个运行结果
,我们发现,用户在读入数值型数据,例如整型数据,和浮点型数据,能够保证正确的输入和输出,但是在以C格式符输入和输出的时候,就出现了错误,那么这里scanf函数以c格式读给变量b的值是什么呢?它是在我们输入12之后,按的回车键子。也就是scanf函数以c格式读入字符型数据的时候,它会把用户输入的空白字符,包括空格,回车键子,tab键子,都当有效字符来读入。
那么如何来避免scanf,函数以c格式符,以字符型读入空格回车这些空白字符呢?