StdC--04 数组/scanf/printf
Highlight:
1. 输入缓冲区特点
2. 程序的输出可以到达屏幕的条件
3. sizeof来确定数组大小
4. 数组初始化清零操作
5. 二维数组
6. C99可变长数组
1.输入缓冲区特点:
只有当其中的数据读走的时候,才会清除这个数据。
scanf(数据类型) 和 缓冲区中的数据类型不一致的时候,便无法读走数据,可能会导致死循环
解决办法:
scanf("%*[^\n]");
* 忽略读到的内容
[^\n] 任何非\n的字符
将\n之前的所有字符读走
scanf("%*c");
从缓冲区读取一个字符 忽略掉
scanf调用失败(主要原因:类型不匹配) 返回0 所以,我们可以将之前的代码改变为:
=============================================================
1 #include <stdio.h> 2 3 int main(){ 4 int a,b; 5 if(scanf("%d",&a)==0){ 6 scanf("%*[^\n]"); //remove all charaters which is in front of \n 7 scanf("%*c"); //remove \n 8 } 9 if(scanf("%d",&b)==0){ 10 scanf("%*[^\n]"); 11 scanf("%*c"); 12 } 13 printf("a=%d, b=%d\n",a,b); 14 return 0; 15 }
=============================================================
2. 程序的输出可以到达屏幕的条件:
<1> \n
<2> 程序结束
<3> 输出缓冲区满(4Kb)
<4> 人工刷新(fflush)
3. sizeof来确定数组大小
sizeof(数组) = sizeof(数组的元素)*元素的个数
int a[]={0};
sizeof(a) = sizeof(a[0]) * 10;
通过sizeof计算数组的大小:
数组的长度 = sizeof(数组)/sizeof(元素)
int b = sizeof(a)/sizeof(a[0]);
4. 清零操作,在使用数组前有必要进行清零操作
1 #include <stdio.h> 2 3 int main() 4 { 5 int a[10]; 6 a[0]=100; 7 a[5]=500; 8 a[9]=900; 9 int i; 10 for(i=0;i<10;i++) 11 { 12 printf("a[%d]=%d\n",i,a[i]); 13 } 14 return 0; 15 }
---- 除了a[0] a[4] a[9] 这三个确定赋值之外的其他元素的数值,都是随机数组,并没有什么规律。所以,以后我们在使用数组的时候,有必要进行清零操作。
---- 初始化一位数组(清零操作) 一般可以写成
a[nums]={0}
5. 二维数组
....
6. C99 可边长数组
1 #include <stdio.h> 2 3 int main() 4 { 5 int n; 6 printf("pls enter one number: "); 7 scanf("%d",&n); 8 float s[n]; 9 int i=0; 10 for(;i<n;i++) 11 { 12 printf("please enter %d's", i+1); 13 scanf("%f",&s[i]); 14 }