c语言复习笔记(2)--标准库中的I/O
2011-05-10 17:18 会被淹死的鱼 阅读(299) 评论(0) 编辑 收藏 举报我们在c语言中的HelloWorld就直接使用了stdio.h中的printf, 在stdio中还有与之对应的scanf
本篇文章中, 主要介绍了fputs和fgets, putc和getc, puts和gets. 并用他们实现了一个简单的echo.
1. fputs和fgets
在stdio中还有很多函数很有用的, 下面是一个简单echo的程序
#include <stdio.h>
#include <stdlib.h>
#define MAXLINE 4096
int main (void)
{
char buf[MAXLINE];
while (fgets(buf, MAXLINE, stdin) != NULL)
{
if (fputs(buf, stdout) == EOF)
{
printf("output error\n");
}
}
if (ferror(stdin))
{
printf("input error");
}
system("pause");
return 0;
}
echo是一个回显函数, 其中使用了fgets和fputs两个函数
fgets是用来读取某个文件流中的数据的.
fgets中有三个参数, c风格的字符串str是用来保存读取的结果, num是表示要读取的字符个数, stream是文件指针#include <stdio.h>
char *fgets( char *str, int num, FILE *stream );
fputs是用来输出数据到指定文件流的.
#include <stdio.h>
int fputs( const char *str, FILE *stream );
fputs有两个参数, 第一个是要输出的字符串str, 第二个是文件指针
默认的三个文件指针
标准文件指针 FILE *stdin,*stdout,*stderr stdin 指键盘输入 stdout 指显示器 stderr 指出错输出设备,也指显示器
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
fp = fopen("tmp", "w");
char *buf = "Hello, World!";
if (fputs(buf, fp) == EOF)
printf("output error");
fclose(fp);
system("pause");
return 0;
}
在源代码文件的目录下, 建立文件tmp, 然后运行此程序, 可以看到tmp文件中写入了数据
2. putc和getc
还有putc和getc函数, 也可以使用他们实现echo
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int c;
while ((c = getc(stdin)) != EOF)
{
if (putc(c, stdout) == EOF)
{
printf("output error\n");
}
}
if (ferror(stdin))
{
printf("input error");
}
system("pause");
return 0;
}
3. puts和gets
puts和gets函数的版本
#include <stdio.h>
#include <stdlib.h>
#define MAXLINE 4096
int main (void)
{
char str[MAXLINE];
while (gets(str) != NULL)
{
if (puts(str) == EOF)
{
printf("output error\n");
}
}
if (ferror(stdin))
{
printf("input error");
}
system("pause");
return 0;
}
关于EOF的说明:
在windows下, EOF需要输入组合键ctrl+Z, 然后回车, 可以看到程序退出
在linux下, EOF需要输入组合键ctrl+D
作者:icejoywoo
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
短网址: http://goo.gl/ZiZCi