C中的输入输出也是函数来实现的,包含在stdio.h中
一 scanf()函数
(1)基本用法
使用scanf函数,变元必须是一个地址。例:scanf("%d", &num);
在读入字符串时,要确保有足够的空间存放读入的字符串(当然也包括字符串结束符‘\0’),否则会覆盖内存中的其它数据。
(2)对于空格回车等的处理:
scanf()函数接收输入数据时默认不采集空格、回车、跳格这些空白字符,但使用%c读取数据时除外。
在控制字符串中添加一个或多个空白字符表示忽略空白字符录入。scanf("□%c□%c",\&c1,&c2);
有的时候空格很重要比如下面这个例子
do{scanf( "%d",&i); printf("Do you want to enter again?\n"); scanf(" %c", &answer);}while('y'== answer);在那个%c那里必须要有个空格,否则达不到预期目的,在while循环中的连续的scanf函数,如果不忽略空格等符号的话,便会输入非法的值,自己调试的时候按回车发现answer在输入了i的值之后已经被赋值,该值是一个垃圾值,所以最好先讲其他空格回车等过滤掉。
(3)scanf中的%[]格式控制符
%[指定可输入字符集] %[^指定不可输入字符集]
%s格式输入字符串到空格则结束。
(4)陷阱在while中使用scanf()
void main()
{
int num = 0;
const int length_max = 30;
printf("Input the length (max:%d):\n",length_max);
while(1)
{
scanf("%d",&num);
printf("%d\n",num);
if(num>0 && num<length_max+1) //若输入合法
{
printf("Your input is right!\n");
break;
}else printf("\nError,input another number:\n");
}
}
输入非法值会造成无限循环,解决方法是清空缓冲区fflush(stdin);
(5)陷阱二 连续的scanf()函数的使用时要注意格式
比如:scanf("%d%d",&a1,&a2); scanf("%c%c",&c1,&c2); 正确的输入格式是 10空格20AB 这样a1=10 a2=20 c1=A c2=B
(6)总结,最好用一个printf语句提示输入格式
二 printf()函数
(1)基本用法
首先要注意的便是格式的匹配,否则结果可能无法预料
(2)常用格式
%md——输出的数据共占m列,右对齐,数据不足m列,左侧补空格。
%-md——输出的数据共占m列,左对齐,数据不足m列,右侧补空格。
printf("a=%-3d\nb=%5d\n" ,a, b ); 结果为 a= 1□□ b= □□□12
%mc和%-mc %ms也可以 %12.2s表示输出字符串的前两位并且共占12列,右对齐,数据不足m列,左侧补空格。
三getchar与putchar
单个字符的输入和输出
四gets与puts
gets:读入一串字符(可以读空格)。
puts:输出一串字符。输出错误返回负数,正确返回正数。int puts(const char *);
(1)gets的缺陷
gets当指定的空间不够存储要输入的字符串时没有任何拦截!推荐使用fgets:
函数原型:char *fgets( char *string, int n, FILE *stream); 最多可读入n-1个字符,最后一定是’\0’结尾。有空闲位置则可包括’\n’
举例:char str[5]; fgets(str,sizeof(str),stdin);
五文件操作
C语言中,每个被使用的文件都在内存中开辟一块内存,用来存放文件的有关信息,这些信息都保存在一个结构体变量中。
(1)fopen函数
函数原型:FILE *fopen( const char *filename, const char *mode );
功能:打开用filename指定的文件,并使其与一个流相联。
使用方式:文件指针名=fopen(“文件名”,“处理方式”); “r”打开一个文本文件,只能读。 “w”生成一个文本文件,只能写.若文件存在则被重写.等等等等还有很多操作
返回值:指明流的指针(成功时)或NULL(失败时)。使用后应判断返回值是否为NULL;
FILE *fp = fopen主要做了哪些事情?
在内存中的数据区创建了一个结构体变量,由fp指向。
�使FILE结构体成员char *_base指向缓冲区中一块内存。
使缓冲区内存与磁盘产生关联。
使“文件读写位置指示器”指向磁盘中所要打开的文件的某个位置(和打开方式有关)。
(2)fclose函数
将缓冲区中剩余内容写入文件。
关闭缓冲区内存与磁盘的关联。
释放结构体变量的char *_base成员指向的内存。
(3)其他常用文件操作
•Fopen,fclose--将流式文件打开,关闭的函数
•字符读写函数:fgetc和fputc
•字符串读写函数:fgets和fputs
•数据块读写函数:fread和fwrite
•格式化读写函数:fscanf和fprinf
•fseek--改变文件位置指针的位置,文件位置指向改变则读写数据时候位置改变
•ftell--查看当前文件位置指针位置
•feof--查看是否走到文件末尾参数为文件指针到文件末尾时,feof(fp)为非零值
•rewind--文件位置指针指向文件首