随笔 - 31  文章 - 0  评论 - 0  阅读 - 3282

第二章 输入与输出(上)——scanf()函数和printf()函数

就是scanf()函数、printf()函数、getchar()函数和putchar()函数,它们都要引入stdio.h

printf()函数

日常使用

# include <stdio.h>
void main {
printf("hello world!");
}

结果就是hello world!

如果我要换行输出

先看看这样可不可以

# include <stdio.h>
void main {
printf("hello ");
printf("world!");
}

但是,它的结果还是hello world!
很显然,这样是不行的。
这时,我们得要用\n

# include <stdio.h>
void main {
printf("hello\nworld!");
}

结果就是
hello world!

要打印 Tab(跳位)呢?用\t

# include <stdio.h>
void main {
printf("hello\tworld!");
}

结果就是
hello world!

要打印%\呢?

将他们双写。
为什么这两个要双写呢?
看下面列表

字元说明
\转义字元,常用于双引号、\n 等要跳脱的序列上,放于转义的东西之前
%它和 d、f、c、s 等相结合,打印出变量。

那我要打印某个变量的数值该怎么办?

其实可以总结为以下的东西

符号作用
%d可以联想到dec,十进制有符号整数
%ld可以联想到long dec,十进制有符号长整数
%x, %X可以联想到hex,以十六进制表示的整数
%lx可以联想到long hex,以十六进制表示的长整数
%o可以联想到oct,以八进制数形式输出整数
%lo可以联想到long oct,以八进制数形式输出长整数
%f单精度浮点数
%lf双精度浮点数
%e以指数形式输出的浮点数
%le以指数形式输出的浮点数
%s字符串
%c字符
%u以十进制表示无符号整数
%g自动选择合适的表示法

对于像%n.mf这样的表述,我们可以这样理解。

  1. n表示输出宽度,当n大于0,向右缩进n个空格,如果字符数>n,按实际位数输出;当n小于0,向左缩进n个空格,也仅仅只是对空格起作用。
  2. m是用于调整显示小数点后m位。

然后,代码要这样写
基本格式:printf("<文本><格式化规定符>",<变量>);

#include <stdio.h>
int main(){
char text = 'a';
printf("%c",text);
return 0;
}

scanf()函数

调用形式

scanf("<格式说明字符串>",<变量地址>);

一般情况下的用法

int number = 0;
scanf("%d", &number);

进阶情况下的用法

int a = 0;
int b = 0;
scanf("%d %d", &a,&b);

在命令行中,你就得要输入类似于1 1才可以满足,同时你就一下子赋值了两个变量

逆天的情况

出现以下两种情况:

int a = 0;
int b = 0;
scanf("%d %d\n", &a,&b);
int a = 0;
int b = 0;
scanf("%d %d ", &a,&b);

在命令行中,你就得要输入类似于1 1,然后还要再输入一个值才可以满足它。

总之,只要出现在scanf里面,你就得要面临着输入东西的结果,如果没输入够,它就不会停。

那如果我要输入这样的东西呢?

2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1

我们都知道scanf函数有一个日常,就是会吞掉空格、回车和制表符。
但是我们写scanf("%d %d ", &a,&b);时候就不会,这是为什么?
因为这个时候,它把空格当成了要输入的部分。
所以,我们只要把空格当成要输入的部分就好了
看下面代码

#include <stdio.h>
int main() {
char ch;
int a[10] = {0};
for(int i = 0; i < 10; i++) {
scanf("%d%c", &a[i], &ch);
}
}

这样我们就可以让scanf认为空格是要输入的东西了,到时候它就只认回车了。

危险操作

int a;
scanf("%d",a);

一定在注入的变量之前加&

输入一串文本

无论输入,还是输出,都要用%s

#include <stdio.h>
int main () {
char c[100];
scanf("%s",&c);
printf("%s\n",c);
}

可输入不包含空格和回车的字符串,一旦输入空格,则空格之后的不存在。

输入浮点数

一般情况下,是这样的

scanf("%lf",&value);

此时,这个value的类型是double
也可以这样

scanf("%f",&value);

此时,这个value的类型是float
其实,对于printf来说,%lf%f的区别并不是很大,但还是要做到一一对应——double时,用%lffloat时,用%f。但如果是scanf那就不一样了,对于double类型的变量用%f会发生warning,对于float类型的变量用%lf也会发生warning。

posted on   Mryan2005  阅读(12)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示