目录
int printf(const char *format,...)
int scanf(const char *format, ...);
如何取好变量名
驼峰命名法
大驼峰
FirstNum(所有单词首字母都大写)
小驼峰
firstNum(第一个单词首字母小写,其他单词首字母大写)
内核命名法
变量名带下划线_
first_num
其他注意事项:变量名要见名知意、尽量不使用拼音(用英语单词的简写)、同一个代码中变量名风格最好一致
输入输出
输入——>计算机——>输出
(内存)
C语言本身并不提供输入输出功能,使用的是C语言函数库的“标准输入输出”函数
C语言函数库提供的输入输出函数
getchar/putchar 操作一个字符
gets/puts 操作一个字符串
scanf/printf 格式化的输入输出函数
#include<stdio.h>头文件
在调用标准输入输出库函数 时,文件开头应该有以下预编译命令:
# include<stdio.h> 或者# include "stdio. h"
stdio 是standard input & output 的缩写,它包含了与标准 I/0 库有关的变量定义和 宏定义以及对函数的声明。
int getchar(void);
功能:从键盘获得一个字符
参数:void表示为空、使用时不需要给实参
返回值:表示获取到的字符的ASCII码
int ret;
ret = getchar();//表示获取到getchar读取的字符的ASCII码的值
printf("ret = %c:%d",ret,ret);
getchar()清除缓冲区
指的是getchar从缓冲区中读取字符并丢弃,直到遇到特定的条件。
当我们在终端输入字符时,字符首先会被存储到缓冲区中等待程序读取。在某些情况下,需要清除缓冲区中的所有字符,确保后续的输入操作不受之前的输入的影响。这个时候可以重复调用getchar()实现。
int putchar(int c);
功能:输出一个字符
参数:表示要输出的字符
返回值:失败返回-1;成功返回输出的字符的ASCII值
#include<stdio.h>
int main(void)//实现从键盘输入一个小写英文字母转换成大写英文字母输出
{
char c;
c = getchar();
c = c-32;
putchar(c);
return 0;
}
int printf(const char *format,...)
格式化输出函数
printf("格式控制字符串",输出参数列表)
格式控制字符
普通字符
原样输出
占位符
匹配后面的输出参数
占位符和输出参数的关系:一一对应
整型
%d 输出为有符号十进制形式
%u输出为无符号十进制形式
%o输出为八进制形式
%x输出为十六进制形式(小写abcdef)
%X输出为十六进制形式(大写ABCDEF)
#include<stdio.h>
int main(void)
{
int a = 77;
printf("%d\n",a);//77
printf("%u\n",a);//77
printf("%o\n",a);//115
printf("%x\n",a);//4d
printf("%X\n",a);//4D
int b =-77;
printf("%d\n",b);//-77
printf("%u\n",b);//4294967219
printf("%o\n",b);//37777777663
printf("%x\n",b);//ffffffb3
printf("%X\n",b);//FFFFFFB3
return 0;
}
浮点型
%f 输出转换为十进制的小数,保留六位小数
%e科学计数法输出
%E科学计数法输出
%g以一种更简洁的方式输出,不输出无意义的0
#include<stdio.h>
int main(void)
{
float a = 123.45;
printf("%f\n",a);//123.449997
printf("%e\n",a);//1.234500e+02
printf("%E\n",a);//1.234500E+02
printf("%g\n",a);//123.45
return 0;
}
字符型
%c输出字符
%s输出字符串
辅助控制符
使用位置举例:%[辅助控制符]d
#
%#o输出带前缀的八进制数
%#x输出带前缀的十六进制数
#include<stdio.h> int main(void) { int a = 77; printf("%#o\n",a);//0115 printf("%#x\n",a);//0X4d return 0; }
m(数字)
表示要输出的数据的宽度
如果数据本身的宽度>m:按实际宽度输出
如果数据本身的宽度<m:按m的宽度输出、默认右对齐、空出来的位置空格补齐
-m:表示左对齐
0m:表示空出来的位置用0补齐
int a = 123; printf("%2d\n",a); printf("%5d\n",a); printf("%-5d\n",a); printf("%05d\n",a);
.n(n为数字)
%.nf输出保留n位小数
%.ns输出保留前n个字符
float a = 123.45; printf("%.2f\n",a); printf("%.2e\n",a); printf("%.2g\n",a); printf("%.2s","hello\n");
l:long
ll:longlong
h:half
hh:half half
int scanf(const char *format, ...);
格式化输入函数
scanf("格式控制字符",地址列表);
格式控制字符
与printf除了方向(printf输出、scanf输入),含义相同
普通字符
原样输入
占位符
将从键盘输入的数据转为指定的格式
整型、浮点型、字符型介绍见printf部分
地址列表
int a;
scanf("%d",&a);
辅助控制符
m 数据宽度、输入宽度
l
输入的时候,要保证精确匹配
%f——float
%lf——double
%Lf——long double
%ld——long
%lld——long long
Seqmentation fault(core dumped)段错误
产生原因:访问到了不能访问的内存空间
注意:
scanf格式控制字符串中尽量不出现普通字符、一般只写占位符。想要提示用户输入可以在前面加一条提示输入的printf语句。
scanf的地址列表中,一定要是有效的地址。
scanf输入结束的条件(匹配结束的条件)
1.遇到非法字符
2.遇到空白符(空格、回车、tab)
3.超过指定的数据输入宽度
scanf的格式控制字符串中,如果出现空白符,表示匹配任意多个空白符
%*c 表示匹配一个数据项,但是不把这个数据给到任何一个变量中
undefined reference to 'sqrt'
今天在编译程序的时候遇到上面的错误提示信息。这个错误通常意味着连接器找不到'sqrt'函数的定义,通常是没有连接数学库。
'sqrt'函数定义在头文件'math.h'中,源文件中必须包含#include<stdio.h>,确保函数声明可用。
编译和连接应该包含'-lm',这个参数告诉编译器要连接数学库。
gcc sqrt.c -lm