学习c时经常遇到字符串的输入问题,使用scanf输入时总是会或多或少的遇到错误,总结一下我遇到过的情况
同时输入字符和字符串
刚开始编写时可能大多数会这样写:
(ch1为字符类型的数组,数组名即数组的首地址,所以不要&)
当输入 字符 回车时会出现下面情况:
还没有输入字符串输入就结束了。当我们需要调用scanf输入的时候,输入的字符送到键盘缓冲区,然后scanf从中读取所规定的字符,例如 输入格式为%d,输入为777a2,实际上输入进去的时777,输入77 777,实际上输入进去的是77,因为空格和回车也会被scanf认为是字符。
当我们输入c回车时,scanf从缓冲区把c提走赋予ch,但回车还在缓冲区并未提走,输入字符串时因为回车也是字符所以被赋予给ch1。
使用scanf输入可以这样做:
1.
结果是:
getchar() 是从控制台接收字符,注意只会接收一个字符,此时回车被getchar提走了
2.
结果是:
常用的是这两种方式,当然也可以直接使用gets()来输入字符串,它会把回车一起提走但不会把回车输入数组里,也可以使用fflush(stdin),是将缓冲区清空。