scanf 使用方法详解
scanf("格式控制","变量地址")
如:
scanf("%d",&n);
其中n为变量,在定义完成一个变量后,系统会为该变量分配内存空间
该空间在内存中的地址称为变量的地址。为了得到变量的地址可以使用取地址操作"&"
scanf的格式符如下:
数据类型 | 格式符 |
---|---|
int | %d |
long long | %lld |
double | %lf |
floag | %f |
char | %c |
字符串(仅限于char组成的字符串) | %s |
此处值得说明的一部分是,数组名本身就是代表数组第一个元素的地址
所以对数组的输入并不需要加&
如:
scanf("%c",str);
scanf对输入控制的详解:
scanf的双引号内的内容其实就是整个输入,只不过把数据换成他们对应的格式符并把变量地址按次序写在后面而已。
//类似读入2020:1:20
scnaf("%d:%d:%d",&a,&b.&c);
不过值得注意的是,如对 3 4的输入可以不加空格:
scanf("%d%d",&a,&b);
这是因为scanf在除%c输入下,其他方式遇到空格或者换行符,都会终止输入。所以,3 4在输完第一个3以后,scanf遇到了空格,于是马上终止输入,转而进行第二次输入,读取b的数据。但是对于字符%c输入是必须区分空格和换行的
printf使用方法详解
printf("格式控制",变量名称)
printf 直接输入操作的是变量名称,并不需要变量地址,注意与scanf的区别
格式控制表:
数据类型 | 格式符 |
---|---|
int | %d |
long long | %lld |
float | %f |
double | %f |
char | %c |
字符数组 | %s |
下一个制表位\t
换行符\n
如:printf("%d\n",a);//输出整形变量a的值并换行
以下介绍刷题中最实用的三种printf输出格式控制:
第一种:%md
控制输出位数
满足m位的数保持不变,不满足m为的向右对齐,高位空格代替;
第二种:%0md
与第一种惟一的区别就是不足的高位换成0
第三种:%.mf
这种是控制输出小数点位数,浮点数保留m位小数,此处保留位四舍六入五成双保留精度。
四舍六入五成双规则:
(1)被修约的数字小于5时,该数字舍去;
(2)被修约的数字大于5时,则进位;
(3)被修约的数字等于5时,要看5前面的数字,若是奇数则进位,若是偶数则将5舍掉,即修约后末尾数字都成为偶数;若5的后面还有不为“0”的任何数,则此时无论5的前面是奇数还是偶数,均应进位。
刷题中不限制读入数据数量的情况
1.while…EOF方法
scanf的进一步介绍。
scanf是有返回值的,返回值内容为成功读入数据的个数。
例如:
scanf("%d,%d",&n,&M);//读入成功将返回2
如果读入失败,将返回-1;
C语言使用EOF(end of file)代表-1
实例:
while(scanf("%d",&n)!=EOF){
cout<<n;
}
当在小黑窗里输入数据时,并不会触发EOF状态,如果要手动触发EOF,可以按Ctrl+Z,这是就会显示^Z,按Enter就可以结束while输入循环
对于字符串的读入,有两种:
while(scanf("%s",str)!=EOF){
}
while(gets(str)!=NULL){
}
2.while break输入
当达到题目要求是结束输入,是在第一种读到文件末尾输入方式的一种拓展,添加达到要求break的语句即可。
3.while(T–)输入
这种方式是在题目给定了输入数据的组数,即要输入多少组数据是给定的。
题后话,注意循环进行清零,意思注意记得每次循环保持参数状态相同,不要使得每次循环是初始状态被改变了。