一:字符数据的非格式化输入
- getchar():读取用户的按键信息,他的返回值是用户按键的ASCII码;工作原理:调用getchar时,程序等待从缓冲区中取出第一个字符(用户输入的字符存放在键盘缓冲区,直到用户按回车键为止);如果用户输入的不止一个字符,那么其他的字符将留在键盘缓冲区,等待后续的getchar调用来读取。也就是说后续的getchar不会等待用户输入,自动在键盘缓冲区中读取字符,所以说再使用getchar应该先clear。
1 #include<stdio.h> 2 #include<conio.h> 3 4 void main() { 5 char c1, c2; 6 int a; 7 8 c1 = getchar(); 9 c2 = getchar(); 10 scanf("%d", &a); 11 printf("%c+%c+%d", c1, c2,a); 12 }
- getc():从流文件stream中读取一个字符信息,他的返回值是所读字符的ASCII码;
- getche():和getchar的功能基本相同,但是区别就是,getche能够直接获取用户当前输入的键盘按键值,不会在缓冲区中取值。
- getch():和getche也是差不多相同的,区别就是getch是回显的,就是现实输入的字符。
数组的赋值方法
- 逐一赋值或者循环赋值
- 使用memset赋值,void *memset(void *s,char ch,unsigned n)。第一个参数表示赋值的数组名称;第二个参数表示赋值内容,第三个表示数组申请的空间大小。
int a[10]; memset(a,0,10*sizeof(int));
- 使用memcpy赋值:void *memcpy(void *d,void *s,unsigned n);
int a[5]={1,2,3,4,5},b[5]; memcpy(b,a,5*sizeof(int));
关于在有局部变量的地方使用全部变量的方法:在变量名前加::。
变量的存储类型
- auto:在函数内的定义:int i <==> auto int i;
- extern:在函数外的全局定义:int j<==> extern int j;但是,extern不能定义在其他文件的全局静态变量。
- register:寄存器型;表示重复使用的变量使用register标识,可以减少内存开发。如for循环的控制条件 i;register i;
- static(静态型):static和extern是放在静态存储区的;auto和register是放在动态存储区的。static 在函数加载前就已经生成了,不赋值,会有默认值0,他的作用域根据作用的区域来判定。