C语法

★相对于C++语言,C语法更应该注重的地方
1.定义变量类型应在所有可执行语句前面.变量说明允许位于一个函数体的开头处或者一个{}复合语句开头处,但作用域不同.


2.标准库提供了两个控制台格式化输入、 输出函数printf( ) 和 scanf(), 这两个函数可以在标准输入输出设备上以各种不同的格式读写数据。调用格式如下:
printf("<格式化字符串>", <参量表>);
scanf("<格式化字符串>", <地址表>); //地址表是需要读入的所有变量的地址, 而不是变量本身
格式化规定符如下:
    %d              十进制有符号整数 
    %u              十进制无符号整数 
    %f              浮点数,定点显示 
    %s              字符串 
    %c              单个字符 
    %p              指针的值 
    %e              指数形式的浮点数 
    %x, %X          无符号整数的十六进制形式 
    %0              无符号整数的八进制形式 
    %g              自动选择合适的表示法 
说明:
输出时,可以在"%"和字母之间插进数字表示最大场宽。若想在输出值前加一些0, 就应在场宽项前加个0。如果用浮点数表示字符或整型量的输出格式, 小数点后的数字代表最大宽度, 小数点前的数字代表最小宽度。可以控制输出左对齐或右对齐, 即在"%"和数字之间加入一个"-" 号可说明输出为左对齐, 否则为右对齐。
输入时,可以在格式化字符串中的"%"各格式化规定符之间加入一个整数, 表示任何读操作中的最大位数。


3.非格式化输入输出函数,也是对标准输出设备(屏幕)和标准输入设备(键盘)操作.
puts(s); //写字符串并换行,等同于printf("%s\n", s);
gets(s); //读取字符串直到回车结束(不包括回车符),类似于scanf("%s", &s);但不以空格而是以回车为结束标志
putchar(ch); 等同于printf("%c", ch); //输出一个字符
void getch(); //输入字符不回显,可读取回车符
void getche(); //输入字符回显,可读取回车符
void getchar(); //输入字符回显,并按回车后才读入


4.标准文件流函数
FILE *fopen(char *filename, *type); //失败返回NULL
int fclose(FILE *stream); //成功返回0


文件类型的规定如下:
           "r"           打开文字文件只读 
           "w"           创建文字文件只写 
           "a"           增补, 如果文件不存在则创建一个 
           "r+"          打开一个文字文件读/写 
           "w+"          创建一个文字文件读/写 
           "a+"          打开或创建一个文件增补 
           "b"           二进制文件(可以和上面每一项合用) 
           "t"           文本文件(默认项) 


5.有关文件流操作的函数
int fprintf(FILE *stream, char *format, <variable-list>); //返回写入的字节数
int fputs(char *string, FILE *steam); //返回0表示成功
int fputc(int ch, FILE *steam); //返回所写入的字符的值
int fscanf(FILE *stream, char *format, <address-list>); 
char fgets(char *string, int n, FILE *steam); //n用来指定读取的字符数
int fgetc(FILE *steam);
int fread(void *buf, int size, int count, FILE *stream); //size是元素大小,count是元素个数
int fwrite(void *buf, int size, int count, FILE *stream); 
long ftell(FILE *stream); //读取文件指针的位置
int fseek (FILE *stream, long offset, int fromwhere); //fromwhere=SEEK_SET|SEEK_CUR|SEEK_END
int fflush(FILE *stream); //把缓冲区内容保存至文件并清除缓冲区
int feof(FILE *stream); //是否到达了末尾,若是则返回非零值
int rewind(FILE *stream); //把文件位置指示器移到文件的起点处


6.文件处理例程(file handling routines)
long _filelength( int handle );
int _chsize( int handle, long size );
int _open_osfhandle ( long osfhandle, int flags ); //获得文件句柄
int _chmod( const char *filename, int pmode );
char *_fullpath( char *absPath, const char *relPath, size_t maxLength ); //abspath为返回值
void _makepath( char *path, const char *drive, const char *dir, const char *fname, const char *ext ); //path为返回值




int rename( const char *oldname, const char *newname ); //重命名目录或文件,成功返回0;
int remove( const char *path ); //删除文件,成功返回0;


7.类型说明
类型说明的格式为: 
     typedef 类型 定义名; //类型说明只定义了一个数据类型的新名字而不是定义一种新的数据类型。


8.预处理指令
由ANSI的标准规定, 预处理指令主要包括: 
     #include
     #define 宏替换名 字符串(或数值)   //不以;结尾,不能使用注释符,宏替换名可以带有形式参数
     #error 出错信息   //该指令用于程序的调试, 当编译中遇到#error指令就停止编译。
     #if 常数表达式 或 #ifdef 宏替换名 或 #ifndef 宏替换名
          语句段; 
     #elif 常数表达式
          语句段; 
     #else
          语句段;
     #endif   //若#if指令后的常数表达式为真,或者定义了指定的宏替换名, 则编译#if之后的程序段; 否则编译其它的程序段。
     #undef 宏替换名   //用来删除事先定义的宏定义
     #line 新行号[文件名] //改变标识符_LINE_与_FILE_的内容,用于调试等用途
     #pragma message("文本消息") //当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来
     #pragma once //只要在头文件的最开始加入这条指令就能够保证头文件被编译一次
     #pragma code_seg("字段名") //声明一个代码段,以#pargma code_seg()结束。这两句之间的代码都会存储在这个代码段中
     #pragma data_seg("字段名") //声明一个数据段,使用方法同代码段
     #pragma comment(lib,"库名") //引入指定的库文件,库名加不加.lib均可


9.其他常用头文件中的函数
<string.h>
memchr 在某一个内存空间汇总查找一个特定字符
memcmp 比较内存空间的内容
memset 可以将一段内存空间填充某个值
memcpy 复制内存空间的内容
memmove 复制内存空间的内容,目标区域和源区域可以重叠
strlen 返回字符串长度
strchr 查找字符串中第一个出现的指定字符
strrchr 查找字符串中最后一个出现的指定字符,r是反向的意思
strstr 在一个字符串中查找指定字符串
strcmp 比较字符串
strcoll 采用目前系统区域设置的字符排列次序来比较字符串
strcpy 复制字符串
strncpy 复制字符串,函数名称中的n表明可以设置长度限制n
strspn 返回字符串中连续不含指定字符集中字符的子串的首地址的下标
strcspn 返回字符串中连续不含指定字符集中字符的子串长度,c是计数的意思
strpbrk 查找字符串中包含指定字符集中字符的子串,返回指向第一个子串的指针
strcat 把两个字符串连接在一起
strncat 连接两个字符串,函数名称中的n表明可以设置长度限制n
strtok 使用指定的分隔符来分割字符串,并返回第二个字段
<stdlib.h>
atoi 将以null结尾的char*字符串转换成int型数据
atol 将字符串转换成long整数型数据
atof 将字符串转换成double数据
_atoi64 将字符串转换成__int64型数据
strtol 将字符串转换成long型数据,并用char**指针给出结束位置
strtoul 将字符串转换成unsigned long型数据,并用char**指针给出结束位置
strtod 将字符串转换成double型数据,并用char**指针给出结束位置
_ltoa 将long型转换成字符串
_ultoa 将unsigned long型转换成字符串
_itoa 将int型转换成字符串
_i64toa 将__int64型转换成字符串
_gcvt 将浮点型数据转换为字符串,取四舍五入
system 把参数传递给一个命令解释器执行
abort 终止程序并显示调试对话框
exit 使目前进程退出执行
<time.h>
time 获取系统的目前时间,以距离1970/1/1的秒数表示
localtime 将经过的秒数转化为本地时间当地时间结构
gmtime 将经过的秒数转化为格林制的时间结构
ctime 将经过的秒数转化为字符串
mktime 将时间结构结构转换成经过的秒数
asctime 将时间结构转化为字符串



















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李小白杂货铺

打赏是一种友谊,让我们更亲密。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值