
scanf("输入格式%格式",&变量名地址);
printf("你要输出的内容 %格式 ",变量名);
了解了数据类型,我们就开始进行怎么存入内存和怎么输出内存里的东西。
先了解下scanf和printf,这两个也是函数,他们的函数内容已经在stdio.h头文件里就已经做好了。我们只要带上这个头文件,就可以直接使用scanf和printf。他们的真实样子其实是这样子
scanf();
printf();
而我们平常的函数时 int main(void); 或是void text(void);等等,是不是一样?只不过他们没有数据类型,因为他的数据类型也是已经在头文件里声明了。
printf(“%格式”,变量名);
然后我们要输出一个变量名里的东西,是这样。int a=5; printf("%d ",a); 输出了一个5字。其实这个也跟我们平常创建的函数一样,我们创建的其它函数 void text(int a) 是不是一样?一个函数名和一个形参。而我们刚才printf("%d ",a);里的 a 就是我们给的实参。 %d这个就像 数据类型 定义。我们平常定义一个变量名,int a=10,提前在内存开辟一个int 4字节的空间存放10的数值。而printf里的%d也差不多,%d就像int一样,提前跟内存打个招呼,内存大哥,我提个东西给我主人看,就提个有符号的十进制的数值把,内存一听,明白了,你要提什么呢?我们给了一个int类型变量名a给内存,内存核对了密码,哦。是那个4字节里的东西,明白了,给你。就这样,我们输出了一个十进制的10.
相同的,printf里的格式字符要和scanf输入的格式字符要一样。为什么?不然你scanf里来个%f浮点型的flaot类型的东西(你在输入时,scanf里的格式字符要和数据类型对应,不然你无法输入。),然后让printf %d拿出int类型10进制的东西,我告诉你。能提的出来,但它在内存里已经乱了,拿出来的东西也就乱了。就比如说char。
而格式字符有很多种,%a %c %d % e%f %g %p 其实就是26英文字母里的英文字母,你只要会被26个英文字母,也就差不多都能记得住。也就 a c d e f g i o p s u x 就这几个。%a这个我们第一章其实用来计算指数位时可以用,只不过你们看了会乱。
scanf("%格式"&变量名地址);
scanf函数和printf函数差不多,但它有一个很重要的一点是要用到&符号,&符号很多人认为它是开辟地址存入,其实我深入了解了一下,它更像是指针指向地址,因为只有指针可以修改变更函数的值(这个已经关系到堆和栈的这些问题了,后面会说)。printf还可以像搜索一样,找到a再去查询a的地址有什么,它只管把东西拿出来,什么都不管,但scanf是个很认真而又细腻的小孩,它会详细的&找到地址,然后在地址上一个一个的存入二进制。哪怕是单精度双精度,他都要很认真的详细的安排存入符号位,指数位,尾数位,不像printf,眼睛一扫,是什么东西,就直接搬到显示器。scanf的细腻,我们可以拿一个 int 值 2022来做例子,scanf在内存上存入2022它是分开存的,他不知道什么是二千零二十二,它自始自终他只认一个字符,就是我们通常叫贰仟零二十二,scanf却叫他 2,0,2,2。它是一个一个认过去的。重要的一个问题,比如int.float这些类型数据,他可以直接转二进制存储,但char类型数据,它是一个一个的看成阿斯克码值(ASCLL)转化二进制存入。比如hello ,我们叫哈罗,scanf叫 h,e,l,l,o。它也分开一个个用阿斯克码值存入。
其实在输入函数中,scanf的作用也是有限,只不过我们前期还用不到那么多其它输入函数,先用scanf了解个概念。类似的其它输入函数还有getchar();和fgets();等等,他们有着其它特殊功能,比如只输入一个字符的,或是可以输入空格的的输入函数。
加深了解
以下都printf什么?
a:printf("%c",'a'); 答:输出的是 a
b:printf("%d",'b'); 答:输出的是98,字符类型可以用整数类型展示,展示的是ascll值。
c:printf("%s","福川"); 答:输出的是福川
d:printf("%f",3.1415); 答:输出的是3.1415,如果用的%d,会找不到数据类型,显示垃圾数值。
以下value值要用什么类型存入?
a:scanf("",&value);存入一个字符。 答:用%c
b:scanf("",&value);存入一串字符。 答:用%s
c:scanf("",&value);存入2023数字。 答:用%d
d:scanf("",&value);存入2023.2023。 答:用%f
来来来,出个题。