C Primer Plus学习 二十三 字符串输入 gets ()函数

        gets ()(代表get string)函数对于交互式程序非常方便。它从系统的标准输入设备(通常是键盘) 获得个字符串。因为字符串没有预定的长度,所以gets ()需要知道输入何时结束。解决办法是读字符 串直到遇到一个换行字符(\n),按回车键可以产生这个字符。它读取换行符之前(不包括换行符)的所有 字符,在这些字符后添加一个空字符(\0),然后把这个字符串交给调用它的程序。它将读取换行符并将其 丢弃,这样下一次读取就会在新的一行开始。

/* name2.c --读取一个名字*/
#include <stdio.h>
#define MAX 81
int main(void)
{
char name[MAX];
char *ptr;


printf("Hi.what's your name?\n");


ptr=gets(name);/*把字符串放进name数组中 */
printf("%s? Ah! %s!\n",name,ptr);

return 0;
}

        gets ()函数通过两种方式获得输入:

•它使用一个地址把字符串賦予name。

• gets ()的代码使用return关键字返回字符串的地址,程序把这个地址分配给ptr。注意到ptr是一 个char指针,这意味着gets ()必须返回一个指向char的指针值。

        ANSI C要求Stdio.h头文件包括gets ()的函数原型。您不需要亲自声明这个函数,只须记住包含这 个头文件即可。但是一些C的旧版本要求您提供gets ()的函数声明。

         gets ()函数的构造如下:

char *gets (char * s)

return (s);

}

        这个函数头说明gets ()返回一个指向char的指针。请注意gets ()返回的指针与传递给它的是同一 个指针。输入字符串只有一个备份,它放在作为函数参数传递过来的地址中,因此程序澝单11.5中的ptr最后也指向name数组。gets ()函数实际的构造更复杂一点,因为它有两个可能的返回值。如果一切都顺利,它返回的是读入字符串的地址,正如我们上面所说。如果出错或如果gets ()遇到文件结尾,它就返 回一个空(或0)地址。这个空地址被称为空指针,并用stdiah里定义的常量NULL来表示。因此gets () 中还加入了一些错误检测,这使它可以很方便地以如下形式使用:
while (gets (name) != NULL)
        这样的指令使您既可以检査是否到了文件结尾,又可以读取一个值。如果遇到了文件结尾,name中什 么也不会读入。这种一举两得的方法就比getchar ()函数所采用的方法简洁得多,getchar ()只返回一个 值而没有参数:
while ((ch = getchar ())!= EOF)
附带提一下,不要混淆空指针和空字符。空指针是一个地址,而空字符是一个char类型的数据对象, 其值为0。数值上两者都可以用〇表示,但是它们的概念不同:NULL是一个指针,而0是一个char类型 的常量。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值