老莫的笔记本  
  
请选择 进入手机版 | 继续访问电脑版
查看: 1139|回复: 0

C的 scanf 使用简介

[复制链接]

662

主题

878

帖子

5113

积分

超级版主

Rank: 8Rank: 8

积分
5113
发表于 2019-2-17 23:36:19 | 显示全部楼层 |阅读模式
本帖最后由 周大胖子 于 2019-2-17 23:37 编辑

先总结,后开始BB
1.在 scanf 的“输入参数”中,变量前面的取地址符&不要忘记。
2.scanf 中双引号内,除了“输入控制符”外什么都不要写。
3.“输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。
4.“输入控制符”的类型和变量所定义的类型一定要一致。对于从键盘输入的数据的类型,数据是用户输入的,程序员是无法决定的,所以在写程序时要考虑容错处理,这个稍后再讲。
5.使用 scanf 之前先用 printf 提示输入。


==============开始BB================================

先理解第一个道理:

                我们从键盘输入的全部都是字符。比如从键盘输入 123,它表示的并不是数字 123,

                %d的含义就是要将从键盘输入的这些合法的字符转化成一个十进制数字【 就是 通过%d 将字符123 转为数字123】,%d 属于: 输入控制符
               
使用scanf 输入数据:

        再加一个输入的提醒:在 printf 中,所有的“非输出控制符”都要原样输出。同样,在 scanf 中,所有的“非输入控制符”都要原样输入。
        
        警钟长鸣:【所以在 scanf 的使用中一定要记住:双引号内永远都不要加“非输入控制符”。】

        警钟长鸣:【给多个变量赋的值之间一定要用空格、回车或者 Tab 键隔开,用以区分是给不同变量赋的值。而且空格、回车或 Tab 键的数量不限,只要有就行。一般都使用一个空格。】

// & 该符号叫做 取地址符号 , &a 表示  变量a 的地址

%d,%f,%lf        以“空白字符”为间隔
%c  没有间隔 ,逐个字符读取

键盘输入 -》 遇到“回车符”  -》 输入缓存区【回车符也被输入到 “输入缓存区”】;

空白字符包括: 空格。制表符(        )、 回车符



char 变量的输入
scanf("%c",&c);  //输入100  实际值读了字符 1  我总算明白了 因为 字符类型  1 就是一个字符类型 所以 它输出的不是长度问题 而是匹配的第一个字符[空白字符也是字符]
printf("%c\n",c);  //输出 1
printf("%d/n",c);  // 输出 49 ,字符'1'的输入ASCII值为49

int 变量的输入
int a ;
scanf("%d",&a);  // 输入100
print("a=%d\n",a); //输出a=100
scanf("%d",&a);  // 输入a ,不是整数,输入失败!a 依旧保持原来的值
printf("a=%d\n",a);        //输出a= 100



char 变量使用%d输入【ERROR】
char a,b;
scanf("%d",&a); // 输入256,按4个字节存储,第2个字节保存到b的变量中 !
printf("a=%d,b=%d\n",a,b); // 输出a=0,b=1


float 浮点变量的输入
scanf("%f",&x);                // 输出3.14
printf("x=%f",x);        // 输出x=3.140000

double 双精度浮点变量的输入
scanf("%lf",&x);                //输入3.14
printf("x=%f",x);        // 输出 x=3.140000
printf("x=%lf",x);        // 输出 x=3.140000

输入double 类型变量的值,必须使用lf 而不是f,否则 输入失败;
输出double类型变量的值,则可以勇士lf或者f, 没有区别;

===========================BB 结束,搞个小列子 ===================
  1. #include <stdio.h>

  2. int main(void){
  3.         int aa;
  4.         int b;
  5.         // 第一种情况
  6.         // 当在 这个时候 输入  100 555 时,由于 存在 空白的字符 ,所以 输入缓存区中 有 三个值【 100 555 回车符 】 ;
  7.         // 那么 aa 读取一个值后, 输入缓存区 还剩2个, 则  b 的值则读取  剩下的 555  哈哈 终于明白了;
  8. //        scanf("%d",&aa);
  9. //        scanf("%d",&b);

  10.         
  11.         // 第二种情况  【不建议这么用, 该程序会去 输入缓存中  找逗号  没有逗号 就无法对它进行赋值】
  12. //        scanf("%d,%d",&aa,&b);  //这种情况下, 用户输入时 也要加 , 逗号 否则 b 读取不到  
  13.         

  14.         // 如何判断 scanf 输入的正确性
  15.         // scanf("%d%d",&aa, &b);  这句话不需要
  16.         int ret;
  17.         ret = scanf("%d%d",&aa, &b);   //  = 是赋值  返回的是输入的正确数目
  18.         
  19.         // 举个例子 【 假设输入的是 100 h 200 】
  20.         // ret = scanf("%d%d%c",&aa, &b ,&c);
  21.         // 那么 ret = 1 [输入错误 后面就不读取了]
  22.                
  23.         printf("ret的值为:%d \n",ret);
  24.         printf("aa的值为:%d \n",aa);
  25.         printf("b的值为:%d \n",b);

  26.         return 0;
  27. }


复制代码

参考文献:http://c.biancheng.net/view/160.html


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表