C输入输出处理

Scanf

常见%格式说明符

格式说明符 作用
c 读入单个字符(后面不会加上空字节)
s 读入一个的字符序列,后面会加上空字节,遇到空白字符(空格等)完成读取。
d 读入可选有符号十进制整数
  • %lld -- long long类型

使用scanf来处理特殊的输入:

1
2
//例如:02:13:00 - 12:00:57
scanf("%d:%d:%d - %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2);

printf

printf的格式控制字符串组成如下:

1
%[flags][width][.prec][length]type

也就是

1
%[标志][最小宽度][.精度][类型长度]类型

1)标志--flag

flags规定输出样式,取值和含义如下:

字符 名称 说明
- 减号 结果左对齐,右边填空格。默认是右对齐,左边填空格。
+ 加号 输出符号(正号或负号)
space 空格 输出值为正时加上空格,为负时加上负号
# 井号 type是o、x、X时,增加前缀0、0x、0X。 type是a、A、e、E、f、g、G时,一定使用小数点。默认的,如果使用.0控制不输出小数部分,则不输出小数点。 type是g、G时,尾部的0保留。
0 数字零 将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用“-”)

2)width--最小宽度

用十进制整数来表示输出的最少位数。若实际位数多于指定的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。width的可能取值如下:

xxxxxxxxxx #include<bits/stdc++.h>using namespace std;​int bits;​//将int型转化为二进制string getBitStr(int num){ string ans = ""; int msk = 1; for(int i = 1 ; i <= bits ; i ++){ ans = (num&msk ? '1':'0') + ans; msk = msk << 1; } return ans;}​void GrayCode(const int &bits){ int x = pow(2,bits)-1; int num = 0; cout<<getBitStr(num)<<""; for(int i = 1 ; i <= x ; i++){ if(i % 2 != 0){ num = num^1; } else{ num = num^( ((num&( (~num) + 1)) << 1) );            //Brian Kernighan 算法 } cout<<getBitStr(num)<<""; }}​int main(void){ cin>>bits; GrayCode(bits); return 0;}c++

输出:001000

3)precision--精度/字符串长度

主要用于浮点数和字符串,例如:

1
2
3
4
5
6
7
8
9
10
printf("%.8d\n",1000);          //不足指定宽度补前导0,效果等同于%06d
printf("%.8f\n",1000.123456789);//超过精度,截断
printf("%.8f\n",1000.123456); //不足精度,补后置0
printf("%.8g\n",1000.123456); //最大有效数字为8位
printf("%.8s\n",“abcdefghij”); //超过指定长度截断
//00001000
//1000.12345679
//1000.12345600
//1000.1235
//abcdefgh

sprintf

sprinf用于将其他类型转化成cstr字符串类型

用法和printf类似

例如:

1
2
3
char cstring[100];
sprintf(cstring,"%02d:%02d:%02d",h,m,s);
string s(cstring);

sscanf

sscanf用于将已有字符串转化为其他类型,用法和scanf类似

例如:

1
2
3
char cstring[100];
strcpy(cstring,"Saturday March 25 1989");
sscanf(cstring, "%s %s %d %d", weekday, month, &day, &year );

C输入输出处理
https://czwcugb.github.io/算法/未分类/C输入输出处理/
作者
ChenZhiwei
发布于
2025年1月13日
许可协议