scanf()函数的介绍

scanf()函数的介绍

1、scanf()函数的功能一句话概括就是:通过键盘给程序中的变量赋值
2、两种格式

  • scanf("输入控制符”,输入参数);

    • 功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。

    • 例子:

      #include <stdio.h>
       int main(void)
       {
      		int i;
          scanf("%d",&i);//&i表示变量i的地址,&是取地址符
      		printf("i = %d\n",i);
      	
      		return 0;
      	}
      
    • 注意:我们从键盘输入的全部都是字符。

      • 比如输入的123,其实是字符‘1’,‘2’,‘3’。
      • 操作系统在接收键盘数据时都将它当成字符来接收的,这时就需要用“输入控制符”将它转化一下;
      • %d的含义就是要将从键盘输入的这些合法的字符转化成一个十进制经%d转化后,字符123就是数字123了。
      • &i:表示变量i的地址,又称“取地址i”,相当于将数据存入以变量i的地址为地址的变量中,也就是变量i。
    • 综上:scanf语句的意思就是:从键盘输入字符123,然后%d将这三个字符转化为十进制数123,最后通过“取地址i”找到变量i的地址,再将数字123放到以变量i的地址为地址的变量中, 即变量i中,所以最终的输出结果是i=123。

  • scanf(“输入控制符非输入控制符”,输入参数);

    • 例子:

      #include <stdio.h>
      int main(void)
      {
      	int i;
      			
      	scanf("i = %d",&i);
      	printf("i = %d\n",i);
      				
      	return 0;
      }
      
    • 注释:

      在printf中,所有的“非输出控制符”都要原样输出,同样,在scanf中,所有的“非输入控制符”也要原样输入,所以在输入的时候i= 必须要原样输入。上面例子从键盘给变量i赋值123,要输入i=123才正确,少一个都不行,否则就是错误。所以在scanf中%d后面没有必要加\n,因为在scanf中\n不起换行作用,不仅不起作用还需要原样输入一遍。

    • 注意:所以在scanf的使用中一定要记住:双引号内永远不要加“非输入控制符”,除了“输入控制符”外,什么都不要加,否则是自找麻烦。

3、一次给多个变量赋值

  • 例子:

    #include <stdio.h>
    int main(void)
    {
      int i, j;
      
      scanf("%d%d",&i, &j);
      printf("i = %d, j = %d\n", i, j);
    
      return 0;
     }
    
  • scanf中双引号内除了“输入控制符”外不要加任何“非输入控制符”,通过键盘给多个变量赋值与给一个变量赋值是一样的。比如:两个变量赋值就写两个%d,然后对应写两个“取地址变量”,三个变量赋值就写三个%d,然后对应写三个“取地址变量”。

  • 注意:虽然 scanf 中没有加任何“非输入控制符”,但是从键盘输入数据时,给多个变量赋的值之间一定要用空格、回车或者 Tab 键隔开,用以区分是给不同变量赋的值。而且空格、回车或 Tab 键的数量不限,只要有就行。一般都使用一个空格。

  • 此外强调:当用scanf从键盘给多个变量赋值时,scanf中双引号内多个“输入控制符”之间千万不要加逗号“,”。多个“输入控制符”之间添加逗号在实际编程中这种写法是绝对不允许的,原因有两个:

    • 首先逗号要原样输入的,有几个就要输入几个,少一个或多一个都不行。
    • 其次,最主要的原因是输入法的问题,在scanf中是在英文输入法下写的逗号,如果输入的时候是中文输入法也是错的,所以用逗号很容易出错。

4.使用scanf的注意事项

  • 参数的个数一定要对应
    “输入控制符”和“输入参数”无论在“顺序上”还是在“个数上”,一定要一一对应。
    例如:

    ​ scanf("%c%d", &ch); ——错误的格式

  • 输入的数据类型一定要与所需要的数据类型一致。
    在printf中“输出控制符”的类型可以与数据的类型不一致,

    如:
    int i = 97;
    printf(“i = %c\n”,i);
    但是在scanf中,对于从键盘输入的数据的类型、scanf中“输入控制符”的类型、变量所定义的类型,这三个类型要一致,否则会出错。
    如:

    ​ int i;
    ​ scanf("%d",&i);
    ​ printf(“i = %d\n”,i);
    从键盘输入a a为字符型 不是整型 所以是错误的。

  • 按回车键时scanf开始进入缓冲区取数据,从前往后依次取;scanf中%d只识别“十进制整数”,对==%d而言,空格,回车,Tab键都是区分数据与数据的分隔符==。

  • 如果%d遇到字母,不会跳过也不会取用,而是直接从缓冲区跳出。

  • 如果将%d换成%c,那么任何数据都会被当做一个字符,不管是数字还是空格,回车,Tab键它都会取回。

  • 使用==%c时==,输入变量全部输入完毕后再按回车,数据与数据之间不要按回车。

  • 如果使用%d时,输入1 a 2,由于a是字符不会被取出,并且挡在2的前面,所以后面的2也无法取到,这时需要先将a弄走,也就是需要“清空缓冲区”。

5.在使用scanf之前使用printf提示输入

​ 在使用scanf之前,最好用printf提示用户以什么样的方式输入。
​ 如:

​ int i, j;
​ printf(“请输入两个值,中间以空格分隔:”);
​ scanf("%d%d", &i, &j);
​ printf(“i = %d, j = &d\n”, i, j);

6.小结

  • 在scanf的“输入参数”中,变量前面的取地址符&不要忘记。
  • scanf中双引号内,除了“输入控制符”外什么都不要写。
  • “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应,输入控制符也同样。
  • “输入控制符”的类型和变量所定义的类型一定要一致。
    (对于从键盘输入数据的类型是用户输入的,程序员是无法决定的,所以在写程序时要考虑容错处理)
  • 使用scanf之前先用printf提示输入。
  • 13
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值