第二章 输入与输出(上)——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
这样的表述,我们可以这样理解。
- n表示输出宽度,当n大于0,向右缩进n个空格,如果字符数>n,按实际位数输出;当n小于0,向左缩进n个空格,也仅仅只是对空格起作用。
- 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
时,用%lf
,float
时,用%f
。但如果是scanf那就不一样了,对于double
类型的变量用%f
会发生warning,对于float
类型的变量用%lf
也会发生warning。
本文来自博客园,作者:Mryan2005,转载请注明原文链接:https://www.cnblogs.com/Mryan2005/p/17872805.html
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现