C语言基本知识复习浓缩版:scanf函数
1 scanf()函数用于读取用户的键盘输入
2 scanf()函数的基本形式:scanf("参数列表1",参数列表2):
参数列表1:用户键盘输入的数据的类型,用占位符表示。
参数列表2:用户键盘输入的数据需要存储的变量的地址
例如
int a;
scanf('%d", &a);
从键盘输入一个输,scanf函数会将输入的数放到变量a所在的位置
3 控制台输入的时候,要按照列表1的格式在控制台输入数据
例如
lint a;
scanf("a=%d", &a);
正确输入方式a=10
控制台输入的内容必须和参数列表1中的内容一致。
scanf中参数列表2中,必须放地址,&a表示是变量a的地址
#include <stdio.h>
int main(){int a;scanf("a=%d", &a);printf("input is %d\n", a);
}
4 scanf和指针使用
int main()
{
int a=0;
int* pa=&a;
scanf("%d", pa);
return 0;
}
这样是错误的,应该写:
scanf("%d", pa);
5 scanf()限制输入长度
输入数:12345678910
scanf("%2d%3d%4d", &a, &b, &c);
a值12 b值345 c值6789
有如下程序,输入数据12345M6768 回车后
#include <stdio.h>
int main()
{
int x;
float y;
scanf(%3d%f", &x, &y);
}
最后x的值是:
123
y的值是45.000000
总结
scanf函数,跟预想的不一样,竟然是按照%d格式来读取数据并赋值,比如下面的代码
# include <stdio.h>
int main(){int a, b , c;scanf("%2d%3d%3d", &a, &b, &c);printf("a=%d b=%d c=%d", a, b, c);getchar();int x;float y ;scanf(" %3d%f", &x, &y);printf("x=%d y=%f", x, y);
}
输入12345678910111213
输出:a=12 b=345 c=678x=101 y=11213.000000
这就挺难理解的,换句话说,对我来说,我的理解是先敲一行数字,这行数字被abc解析并赋值,然后再敲一段数字,这段数字被x和y解析并赋值。
而现在,尽管两段赋值代码是分开的,而且中间有printf语句和getchar();分隔,但是两者还是对同一句输入进行了解析.....果然c语言是最低端的一种高级语言,它是一点多余的处理都不做!