阶段笔记 scanf

暑假学习阶段笔记

scanf的进一步了解
刚开始用scanf的时候只知道其基本的功能,对其内部的具体过程一无所知,后来看了林老师的视频https://blog.csdn.net/vincent040/article/details/83575886,才有了进一步的认识,我没买,我是粤嵌的学生,嘻嘻
用户从键盘输入,驱动程序传给kernel,kenrnel再传到一个缓冲区,最后,scanf函数从缓冲区里搬运
scanf函数较为傲娇,只搬自己想搬的,不匹配就遛了,注意这里,不匹配就遛了,不带走一丝云彩,你写了半天,他也不管所以,当我们有多个scanf语句依次执行的时候,经常喜欢出现这种情况,前面的第一个函数的内容刚刚输完,第二个还没数,就跳到第三个去了,这不是系统的问题,而是,scanf从内存区中拿到了自己想要的东西,已经结束了。
当我们想要输入一个"字符串"的时候,我们使用scanf(“%s”,a),我们会遇到输入空格就停止的问题,对的,
关于scanf的一片博客
scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:

① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
如果你还是坚持使用scanf,那么它提供了这么一种方法


#include <stdio.h> 
int main() 
{ 
    char str[80]; 
    scanf("%[^\n]",str); //读到'\n'结束读取
    printf("%s",str);
    return 0; 
}

利用正则表达式来解决问题(我猜的,哈哈)
面对字符串的输入,我还是建议 gets(),

 char *gets(char *s);
 
 linux man手册中的解释
  gets()  reads a line from stdin into the buffer pointed to by s until either a terminating
  newline or EOF, which it replaces with a null byte ('\0').  No check for buffer overrun is
  performed (see BUGS below).


英语六级还在考,大致翻译一下,gets()从标准输入(stdin)写给缓冲区(buffer)的内容中读取一行。这行内容以文件终止符(end of file)或者 换行符(teminating newling)结束,并且最后的内容会被加上’\0’,具体就是,你只管输入,输完了,按一下enter键它就开始读内容,最后在字符串末尾加上’\0’,
完美,就用它了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值