欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-22 12:02:02
各位看官们,大家好,上一回中咱们说的是字符和字符串输入函数的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起talk c栗子吧! 看官们,我们在上一回中介绍了字符和字符串输入函数的用...

各位看官们,大家好,上一回中咱们说的是字符和字符串输入函数的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起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 charactor
a                  //输入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 charactors
a b      //输入a空格b,然后按下回车键
a b      //这是puts函数输出的结果,该函数自动输出换行符
a b      //这是通过while循环中putchar函数输出的结果,换行符是循环后面的单独输出的
please input some charactors
a b      //输入a空格b,然后按下回车键
a b      //这是puts函数输出的结果,这里的换行是字符串中自带的换行符
                        //这里的换行是puts函数自动输出的换行符
a b      //这是通过while循环中putchar函数输出的结果,换行符也是循环中输出的

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

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

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

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