今就跟scanf,getchar,gets输入问题做个了断!

gets()函数

函数原型:char* gets(char*)

头文件:stdio.h

功能:从标准输入设备读取字符串,可以无限读取,不会判断上限,直至接收到换行符或EOF时停止(所以应该保证buffer的空间足够大,以免发生溢出),并将读取的结果存放在指定的字符数组(传入的作为参数的数组指针)中,换行符不作为读取的字符串的内容,gets()并不将换行符存入缓冲区,读取的换行符被转换为"\0"空字符,由此来结束字符串。

返回值:读入成功,返回参数数组的指针;读入过程中遇到EOF或发生错误,返回NULL指针。

TIPS:gets()读取到"\n"(我们输入的回车)停止读取,但是会舍弃\n,然而,与其对应使用的puts()函数,却在输出字符串的时候自动换行。如果输入的第一个字符就是换行符,则字符串就会被置为空串。

如果gets(s)函数中的参数指针为一个单个字符的字符串指针,编译链接不会有错误,但运行后内存溢出错误。

由于可以无限读取,所以在2011年12月,ANSI 采纳了 ISO/IEC 9899:2011 标准,标准中删除了 gets()函数,使用一个新的更安全的函数gets_s()替代。

回车不会留在输入缓冲区中。


scanf()函数

函数原型:int scanf("%s",字符数组名或字符指针)

头文件:stdio.h

功能:自不解释。

返回值:返回正确读入的数据的数量。

TIPS:在使用scanf()读入字符串的时候,scanf()在遇到空格,回车,TAB键都会认为输入结束,空格后的字符将作为下一项输入处理,所以读取的字符串中不能含有空格。字符串读入结束后自动加'\0',但是回车,空格,TAB键仍会留在输入缓冲区中

scanf()在读取数字的时候会舍弃换行符,因此可以用while()+getchar()来清空输入缓冲区。


getchar函数

函数原型:char getchar()

头文件:stdio.h

功能:当程序调用getchar()时,程序等待用户输入。用户输入的字符将被存放在输入缓冲区中,直到用户按回车键为止(回车字符也放在缓冲区中)。当用户键入回车,getchar才开始从stdin流中每次读入一个字符。getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1.且将用户输入的字符回显到屏幕。

TIPS:

与其相匹配的输出函数putchar() 其功能是在显示器上输出单个字符。其一般形式为: putchar(字符变量) 例如:
putchar('A'); 输出大写字母A
putchar(x); 输出字符变量x的值

putchar('\n'); 换行 对控制字符则执行控制功能,不在屏幕上显示。

putchar()这个函数不会检查要输出的字符的真正范围。 在使用的时候需要注意,输出变量的范围是不是一个字符的范围内,只有在一个字符的范围内才能正确输出,不然肯定会出错。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值