文章目录
数据类型 | 格式符 | 举例 |
---|---|---|
int | %d | scanf("%d",&n) |
long long | %lld | scanf("%lld",&n) |
float | %f | scanf("%f",&f1) |
double | %lf | scanf("%lf",&db) |
char | %c | scanf("%d",&c) |
char数组 | %s | scanf("%d",str) |
str:数组名称本身代表了数组第一个元素的地址,所以不用加取址运算符。
例子:
- 输入13:45:20这种hh:mm:ss
int hh,ss,mm;
sacnf("%d:%d:%d",&mm,&ss,&mm);
- 输入3 4以空隔分开的2个数字
int a,b;
sacnf("%d%d",&a,&b);
不加空格的原因是除了%c,sacnf的输入是以空格,换行为结束标志的。
- 输入3 c以空隔分开的字母和字符
int a; char c;
scanf("%d %c",&a,&c);
- %s读入时以空格,换行为结束标志
#include <cstdio>
int main(){
char str[10];
scanf("%s",str);
printf("%s",str);
return 0;
}
输入:abc ef
输出:abc
- %c读入时是可以读入空格和换行的
#include <cstdio>
int main(){
int a; char c;char x='b';
scanf("%d%c",&a,&c);
printf("%d%c%c",a,c,x);
}
输入:4回车
输出:
4
b
输入:4空格回车
输出:
4 b
下面这个例子特别重要
#include <cstdio>
int main(){
int a;
char c,str[10];
scanf("%d%c%s",&a,&c,str);
printf("a=%d,c=%c,str=%s",a,c,str);
return 0;
}
输入:1 a bcd
输出:a=1,c= ,str=a
- getchar和putchar
#include <cstdio>
int main(){
char c1,c2,c3;
c1=getchar();
getchar();
c2=getchar();
c3=getchar();
putchar(c1);
putchar(c2);
putchar(c3);
return 0;
}
输入:abcd
输出:acd
'a’被c1接收,'b’虽然接收但没有将它存储在某一个变量中,'c’被c2接收,'d’被c3接收,所以最后输出acd
getchar可以识别空格和换行符
输出
- printf函数
printf(“输入格式”,变量名称),例如printf("%d",a);
数据类型 | 格式符 | 举例 |
---|---|---|
int | %d | printf("%d",n) |
long long | %lld | printf("%lld",n) |
float | %f | printf("%f",f1) |
double | %f | printf("%lf",db) |
char | %c | printf("%d",c) |
char数组 | %s | printf("%d",str) |
特别的输出要求
- %md:不足m位的int型右对齐输出,高位用空格补齐,变量本身超过m位时,保持原样。
#include <cstdio>
int main(){
int a=123;int b=1234567;
printf("%5d\n",a);
printf("%5d\n",b);
return 0;
}
输出:
123
1234657
- %0md:不足m位的int型右对齐输出,高位用0补齐,变量本身超过m位时,保持原样。
(舍入规则:四舍六入五成双)
#include <cstdio>
int main(){
int a=123;int b=1234567;
printf("%05d\n",a);
printf("%05d\n",b);
return 0;
}
输出:
00123
1234657
- %.mf:浮点型保留m位小数。
#include <cstdio>
int main(){
double d1=3.1415926;
printf("%.0lf\n",d1);
printf("%.1lf\n",d1);
printf("%.2lf\n",d1);
printf("%.3lf\n",d1);
printf("%.4lf\n",d1);
return 0;
}
输出:
3
3.1
3.14
3.142
3.1416
字符数组的输入与输出
字符数组是由若干个char型的元素组成,数组的每一位都是一个字符。在一维数组中(或者是二维数组的第二维)的末尾都有一个空字符\0表示存放字符的结尾。gets和scanf会自动添加在输入字符的后面并且占用一个字符位,所以要注意数组定义的大小。puts和printf通过\0为结尾来来输出的。getchar 要在输入的每个字符串后加\0
下面是二维数组存储两个字符串“Ni Hao ,”和"Kao Yan."
N | i | H | a | o | , | \0 | ||
---|---|---|---|---|---|---|---|---|
K | a | o | Y | a | n | . | \0 |
- scanf输入,printf输出
%s通过空格或换行结束
#include <cstdio>
int main(){
char str[10];
scanf("%s",str);
printf("%s",str);
return 0;
}
输入:abc ef
输出:abc
- getchar 输入,putchar输出
#include <cstdio>
int main(){
char str[20];
int i,k=0;
for(i=0;i<10;i++){
str[i]=getchar();
}
str[5]='\0';
while(str[k]!='\0'){
putchar(str[k++]);
}
return 0;
}
输入:abc defghi
输出:abc d
- gets输入,puts输出
gets识别换行符\n作为输入结束(所以sacnf完一个整数时,如果想用gets,必须getchar接收整数后的换行符)。
#include <cstdio>
int main(){
char str[20];
int a;
scanf("%d",&a);
getchar();
gets(str);
puts(str);
return 0;
}
输入:
6
abc
输出:6abc
#include <cstdio>
int main(){
char str1[20];
char str2[5][10];
gets(str1);
for(int i=0;i<3;i++){
gets(str2[i]);
}
puts(str1);
for(int i=0;i<3;i++){
puts(str2[i]);
}
return 0;
}
输入:
woaini
love you
like you
qaq
输出:和输入一样