欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

学习笔记 | C 语言中的输入/输出

最编程 2024-04-10 14:37:30
...

printf

  • printf(print format) 按照指定格式打印
  • printf 并不会在行尾自动加上换行
  • printf 必须包含头文件

占位符

占位符,就是这个位置可以用其他值代入。

输出的文本中可以有多个占位符。

占位符以“%”开头,第二个字符表示“占位类型”。如 %d,表示整数占位符。

代码示例:

int main()
{
    int money = 5;
    printf("我要定个小目标,先赚个 %d 个亿\n",money);
    return 0;
}

代码执行结果

image-20231011001233204

占位符表格

占位符 描述
%a 十六进制浮点数,字母输出为小写。
%A 十六进制浮点数,字母输出为大写。
%c 字符。
%d 十进制整数。
%e 使用科学计数法的浮点数,指数部分的 e 为小写。
%E 使用科学计数法的浮点数,指数部分的 E 为大写。
%i 整数,基本等同于 %d 。
%f 小数(包含 float 类型和 double 类型)。
%g 6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e为小写。
%G 等同于 %g ,唯⼀的区别是指数部分的 E 为大写。
%hd 十进制 short int 类型。
%ho 八进制 short int 类型。
%hx 十六进制 short int 类型。
%hu unsigned short int 类型。
%ld 十进制 long int 类型。
%lo 八进制 long int 类型。
%lx 十六进制 long int 类型。
%lu unsigned long int 类型。
%lld 十进制 long long int 类型。
%llo 八进制 long long int 类型。
%llx 十六进制 long long int 类型。
%llu unsigned long long int 类型。
%Le 科学计数法表⽰的 long double 类型浮点数。
%Lf long double 类型浮点数。
%n 已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
%o 八进制整数。
%p 指针。
%s 字符串。
%u 无符号整数(unsigned int)。
%x 十六进制整数。
%zd size_t 类型。
%% 输出⼀个百分号。

限定宽度

%5d 表示限定宽度,若实际长度大于5时,按原样打印。

%5d 宽度不够 5 时,左边补齐空格,形成右对齐效果。

%-5d 宽度不够 5 时,右边补齐空格,形成左对齐效果。

所以,%nd,可以理解为限定最小宽度。

int main()
{
    printf("%d\n", 123);//打印 123
    printf("%5d\n", 123);//左边补齐2个空格,形成右对齐效果
    printf("%5d\n", 1234567);//实际长度大于5,原样打印
    // 观察左对齐
    printf("------我是分割线------\n");
    printf("%-5d", 123);//左对齐之后,右边有另个空格
    printf("%5d\n", 123);//右对齐之后,左边有两个空格
    // 加起来中间会有 4 个空格
​
    //打印数字为小数时
    printf("------我是分割线------\n");
    printf("%f\n", 123.45);
    printf("%12f\n", 123.45);
    return 0;
}

执行结果

image-20231011004157273

%+d 总是显示正负号

int main()
{
    printf("%+d\n", 123);
    return 0;
}

执行结果

image-20231011004258481

限定小数位

int main()
{
    printf("%f\n", 123.45); //默认打印小数点后六位
    printf("%.2f\n", 123.45);//2f 只打印小数点后两位
    printf("%6.2f\n", 12.45);//%6.2f 总共输出 6 位,小数点后保留 2 位。
    printf("%*.*f\n", 6,2,12.45);//同上,* 可以把参数传进去。
    return 0;
} 

执行结果

image-20231031214354165

输出部分字符串

int main()
{
    //printf(%.[m]s);
    printf("%.5s\n","Hello Word");//只输出前五个字符
    return 0;
} 

执行结果

image-20231031214657533

scanf

scanf必须提前知道数据类型,才可以进行数据处理

#define _CRT_SECURE_NO_WARNINGS 1
​
​
int main()
{
    int score = 0;
    //输入
    scanf("%d",&score);//&为取地址
    
    //输出
    printf("%d",score);
    return 0;
}

解决无法使用scanf函数问题解决如下(部分编译器会报错):

#define _CRT_SECURE_NO_WARNINGS 1 //在代码第一行添加#pragma warning(disable:4996) //任意行添加

注意事项:

1、scanf 不要随便加换行。

2、scanf 会自动过 滤空白字符、包括空格、制表符、换行等。

scanf 的返回值

scanf()的返回值是一个整数,表示成功读取的变量个数。

如果没有读取任何项或者匹配失败,则返回0

如果在成功读取任何数据之前,发生了读取错误或者遇到读取文件结尾,则返回常量 EOF 。EOF 的本质是 -1

int main()
{
    int a = 0;
    int b = 0;
    float f = 0.0;
    int r = scanf("%d %d %f",&a,&b,&f);
    
    printf("a = %d\n",a);
    printf("b = %d\n",b);
    printf("f = %f\n",f);
    
    printf("r = %d",r);
    return 0;
}

Ctrl + Z 可以终止读取。

scanf() 将字符串读入数组时,不会检测字符串是否超过数组长度。

执行结果

image-20231031214758018