scanf()、gets()、fgets总结

gets

读取换行符之前(不包括换行符)的所有字符,在这些字符后添加一个空字符(\0),然后把这个字符串交给调用它的程序。

它将读取换行符并将其丢弃,这样下一次读取就会在新的一行开始。

c Primer plus上的例子:

#include <stdio.h>

#define  MAX 81

int main(void)
{
	char *ptr;
	char name[MAX];	/* 分配空间*/
	printf("what's your name?");
	ptr = gets(name);
	printf("%s?ah ! %s!\n", name,ptr);
	return 0;
}	
gets()函数通过两种方式获取输入:

1.使用一个地址把字符串赋予name

2.get()代码使用return关键字返回字符串的地址,程序把这个地址分配给ptr.
如果出错或者gets()遇到文件结尾,就返回一个空(或0)地址。这个空地址成为空指针,并用stdio.h里定义的常量NULL表示。

因此gets()加入一些错误检测while(gets(name)  != NULL),getchar的错误检测为:while((ch = getchar())!=EOF)

ps:空指针是一个地址,而空字符是一个char类型的数据对象,其值为0。数值上两者都可以用0表示,但概念不同,NULL是一个指针,

而0是一个char类型常量。

fgets

弥补gets()不检查预留存储区是否能够容纳实际输入数组,造成多处的字符溢出到响铃内存区。fgets()是为文件I/O设计。

与gets不同方面为:

1.需要参数说明最大读入字符数。如果参数值为n,读取做多n-1个字符或者读完一个换行符为止,由两者最先满足结束输入。

2.存取换行符。不像gets()那样丢弃

3.参数说明读哪一个文件。从键盘上读可以使用stdin.

#include <stdio.h>

#define  MAX 81

int main(void)
{
	char *ptr;
	char name[MAX];	/* 分配空间*/
	printf("what's your name?\n");
	ptr = fgets(name,MAX,stdin);
	printf("%s?ah ! %s!\n", name,ptr);
	return 0;
}	
scanf

使用%s格式,字符串读到(但不包括)下一个空白字符(空格、制表符或换行符)。如果指定了字段的宽度,比如%5s,scanf就会读入5个字符

或直到遇到第一个空白字符,有二者最先满足的那个终止输入。

scanf()函数返回一个整数值,这个值是成功读取的项目数;或者遇到文件结束时返回EOF。

#include <stdio.h>

#define  MAX 81

int main(void)
{
	char name1[11],name2[11];
	int count;
	printf("please enter 2 names.\n");
	count = scanf("%5s %10s", name1 ,name2);
	printf("i read the %d names %s and %s.\n",
		count, name1, name2);
	return 0;
}	



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值