一起talk C栗子吧(第一百七十七回:C语言实例--字符及字符串输入函数二)

来源:互联网 发布:sql server是什么软件 编辑:程序博客网 时间:2024/05/29 11:24

各位看官们,大家好,上一回中咱们说的是字符和字符串输入函数的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起talk C栗子吧!


看官们,我们在上一回中介绍了字符和字符串输入函数的用法,満篇的理论,不少看官听着听着就睡着了。这一回中我们要把理论应用于实践中,让我们一起动手去实践吧。

接下来,我们将通过具体的代码来说明如何使用字符输入函数,以及使用时的注意事项:

int main(){    char ch;    int count = 0;    puts("please input a charactor");    while( EOF != ( ch = fgetc(stdin)) )    {        printf("input is %c \n",ch);        if( ++count > 5 )            break;    }    printf("count is %d \n",count);    return 0;}

从上面 的代码中可以看到我们通过fgetc函数从流中获取字符,不过这个流比较特殊,它是我们经常使用的标准输入流。为了验证我们是否从流中获取到了字符,我们输出了从流中获取的字符。

编译并且运行该程序,可以得到以下的运行结果,请大家参考:

please input a charactora                  //输入a然后按下回车键input is a input is b                  //输入b然后按下回车键input is b input is c                  //输入c然后按下回车键input is c input is count is 6 

结合上面的源代码和程序运行结果,我们可以看到,程序中不停地使用fgetc函数从标准输入中获取字符,直到获取六个字符后才停止。可是我们运行时只输入了a,b,c三个字符,然后程序就停止运行了,这是为什么呢?

因为fgetc函数读取字符后还读取了回车符,它一共读取了三个回车符,再加上我们输入的三个字符,正好是六个字符。大家现在明白其中的原因了吧,另外两个字符输入函数:getc和getchar也有同样的操作,我们就不举例子了,请大家自己动手去验证一下,它们是不是和fgetc有同样的结果。

介绍完字符输入函数后,我们将通过具体的代码来说明如何使用字符串输入函数,以及使用时的注意事项:

int main(){    char buf[BUFSIZ] = {'\0',};    char *p = NULL;    puts("please input some charactors");    if(NULL != gets(buf) )        puts(buf);    p = buf;    while(*p != '\0')        putchar(*p++);    putchar('\n');    puts("please input some charactors");    if(NULL != fgets(buf,BUFSIZ,stdin) )        puts(buf);    p = buf;    while(*p != '\0')        putchar(*p++);    return 0;}

从上面 的代码中可以看到我们通过fgets函数从流中获取字符串,不过这个流比较特殊,它是我们经常使用的标准输入流。在这个时候,它和gets函数具有相同的功能。为了验证我们是否从流中获取到了字符串,我们输出了从流中获取的字符串。

编译并且运行该程序,可以得到以下的运行结果,请大家参考:

please input some charactorsa b      //输入a空格b,然后按下回车键a b      //这是puts函数输出的结果,该函数自动输出换行符a b      //这是通过while循环中putchar函数输出的结果,换行符是循环后面的单独输出的please input some charactorsa b      //输入a空格b,然后按下回车键a b      //这是puts函数输出的结果,这里的换行是字符串中自带的换行符                        //这里的换行是puts函数自动输出的换行符a b      //这是通过while循环中putchar函数输出的结果,换行符也是循环中输出的

结合上面的代码,我们可以看到,使用标准输入流的fgets函数和gets函数具有相同的功能,不同之处在于gets没有把换行符读取到字符串中,而fgets函数则把换行符读取到了字符串中。

此外,我们没有演示函数gets的缓冲区溢出功能,我们使用了标准库提供的BUFSIZ宏,该值比较大,简单的字符串不会引起缓冲区溢出,大家可以调整buf的大小,然后输入比buf容量大的字符串,这时会发生缓冲区溢出。

看官们,我把例子中的代码整理到了一个文件中,并且把该文件放到了我的资源中,大家可以点击这里下载使用。

各位看官,关于字符和字符串输入函数的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


0 0
原创粉丝点击