C 输入输出

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--文件位置指针指向文件首













  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值