附加格式说明符
修饰符 | 功能 |
---|---|
m | 输出数据域宽,数据长度<m,左补空格,否则按实际输出 |
.n | 对实数,指定小数点后位数 / 对字符串,指定实际输出位数 |
- | 输出数据在域内左对齐(缺省右对齐) |
+ | 指定有符号数在正数前显示正号(+) |
0 | 输出数值时指定左面不使用的空位自动填0 |
# | 在八进制和十六进制数前显示0,0x |
1 | 在d, o, x, u前,指定输出精度为long型 |
1 | 在e, f, g前,指定输出精度为double型 |
输入
-
getchar(); 从键盘读一字符
-
scanf(“格式控制串”, &地址表);
输入数字时,多个同时输入(%d%d%d)可用空格分隔 -
格式输入函数:scanf函数支持的格式说明符可以带一下修饰符,当使用对应类型的变量时需要加上修饰符
修饰符 | 功能 |
---|---|
h | 用与d, o, x前,指定输入为short型整数 |
1 | 用于d, o, x前,指定输入为long型整数 |
1 | 用于e, f前,指定输入为double型实数 |
m | 指定输入数据宽度,遇空格或不可转换字符结束 |
* | 抑制符,指定输入项读入后不赋给变量 |
- 字符输入问题:
//使用输入函数可能留下垃圾
int x;
char ch;
scanf("%d", &x);
scanf("%c", &ch);
printf("x=%d,ch=%d", x, ch); //第一次输入时的换行键会被第二个scanf读取
//解决办法:(1)用格式串getchar()清除;(2)用格式串中空格或%*c清除
int x;
char ch;
scanf("%d", &x);
putchar();
scanf("%c", &ch);
printf("x=%d,ch=%d", x, ch);
int x;
char ch;
scanf("%d", &x);
scanf("%*d%c", &ch);
printf("x=%d,ch=%d", x, ch);
int x;
char ch;
scanf("%d", &x);
scanf(" d%c", &ch);
printf("x=%d,ch=%d", x, ch);
- 开方的写法
#include<math.h> // 包括所有初等函数
sqrt();
//gcc默认指定头文件对应的库文件中不包括math库,即math库不是gcc默认指定的库文件,编译时需要将gcc手动指定到math库
//在进行编译时可以直接加上-lm选项,-l为指定库,m为math库。
//该问题及其解决方式引用至https://blog.csdn.net/wangqingchuan92/article/details/115261070《编译错误“ undefined reference to ‘sqrt‘ ”解决方法小结》
全局变量
- 在函数体外声明的变量,定义方式与局部变量一致,存储位置在数据段,在main函数运行之前就声明了,在软件运行结束之后才销毁,不可设置过多。
- 变量存储类型auto,register:
(1)都只能用于声明局部变量
(2)局部变量加了auto和不加没有区别,为缺省值
(3)auto变量存储于内存条,register存在cpu的寄存器。register访问时速度更快,但一般没有必要使用register
(4)cpu寄存器无指针概念
extern
- 一般情况下函数为后面可调用前面,前面不可调用后面。通过体现声明可实现前面调用后面。此时全局变量放在声明后,函数前(若要将全局变量放在后面也可提前声明)
extern为声明前缀,是缺省值
void f1();
void f2();
viod f3(int a, int b);
int x;
void f1()
{
f2();
}
void f2
{
}
void f3(int a, int b)
{
}
int x = 50;
int main()
{
f1();
f2();
f3(int a, int b);
return 0;
}
- 头文件组件项目
(1)创建一个.c文件就要 创建一个.h文件,比如创建one.c就要创建one.h,然后.c文件中导入h文件,比如one.c中导入one.h
(2).h文件的写法,把所有函数和全局变量都声明。声明使用如下结构包裹起来
#ifndef ONE_H
#define ONE_H
extern int jian(int a, int b);
#endif
(3).c文件要访问别的.c文件终端函数或全局变量就要导入相应的.h文件
(4)main函数所在的文件,假设文件名为main.c
I.不必要写一个对应的.h文件,只需要把除main函数以外的函数和全局变量声明在最前面
II.也可以写一个对应的.h文件,然后声明除main函数之外的函数和全局变量,然后在main.c中导入main.h
III.编译时所有的.c文件(注意所在相对目录)
- 导入头文件问题:
<xxxx.h>:直接从系统中找
“xxxx.h”:先从用户写的文件中找,找不到就从系统中找。引号终端文件是文件的相对路径(当前文件所在目录),如果存放在子目录,应写文件目录。