一起talk C栗子吧(第一百七十七回: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容量大的字符串,这时会发生缓冲区溢出。
看官们,我把例子中的代码整理到了一个文件中,并且把该文件放到了我的资源中,大家可以下载使用。
各位看官,关于字符和字符串输入函数的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。