文件IO-putchar-putc-fputc-fgetc-fgets-fputs-feof

putchar

  • 把参数 char 指定的字符(一个无符号字符)写入到标准输出 stdout 中。
  • 返回值:该函数以无符号 char 强制转换为 int 的形式返回写入的字符,如果发生错误则返回 EOF。
int putchar(int char)

#include <stdio.h>

int main ()
{
   char ch;

   for(ch = 'A' ; ch <= 'Z' ; ch++) {
      putchar(ch);
   }
   
   return(0);
}

putc

  • 把参数 char 指定的字符(一个无符号字符)写入到指定的流 stream 中,并把位置标识符往前移动。
int putc(int char, FILE *stream)

#include <stdio.h>

int main ()
{
   FILE *fp;
   int ch;

   fp = fopen("file.txt", "w");
   for( ch = 33 ; ch <= 100; ch++ ) 
   {
      putc(ch, fp);
   }
   fclose(fp);
   
   return(0);
}

fputc

int fputc(int char, FILE *stream)

  • 把参数 char 指定的字符(一个无符号字符)写入到指定的流 stream 中,并把位置标识符往前移动。

参数

  • char -- 这是要被写入的字符。该字符以其对应的 int 值进行传递。
  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符的流。

返回值

  • 如果没有发生错误,则返回被写入的字符。如果发生错误,则返回 EOF,并设置错误标识符。
#include <stdio.h>
 
int main ()
{
   FILE *fp;
   int ch;
 
   fp = fopen("file.txt", "w+");
   for( ch = 33 ; ch <= 100; ch++ )
   {
      fputc(ch, fp);
   }
   fclose(fp);
 
   return(0);
}

fgetc

#include <stdio.h>

int main ()
{
   FILE *fp;
   int c;

   fp = fopen("file.txt","r");
   while(1)
   {
      c = fgetc(fp);
      if( feof(fp) )
      {
          break ;
      }
      printf("%c", c);
   }
   fclose(fp);
   return(0);
}

fgets

  • 从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
    char *fgets(char *str, int n, FILE *stream)

参数

  • str -- 这是指向一个字符数组的指针,该数组存储了要读取的字符串。
  • n -- 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。

返回值

  • 如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。
  • 如果发生错误,返回一个空指针。
#include <stdio.h>

int main()
{
   FILE *fp;
   char str[60];

   /* 打开用于读取的文件 */
   fp = fopen("file.txt" , "r");
   if(fp == NULL) {
      perror("打开文件时发生错误");
      return(-1);
   }
   if( fgets (str, 60, fp)!=NULL ) {
      /* 向标准输出 stdout 写入内容 */
      puts(str);
   }
   fclose(fp);
   
   return(0);
}

fputs

  • 把字符串写入到指定的流 stream 中,但不包括空字符。
    int fputs(const char *str, FILE *stream)

参数

  • str -- 这是一个数组,包含了要写入的以空字符终止的字符序列。
  • stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符串的流。

返回值

  • 该函数返回一个非负值,如果发生错误则返回 EOF。
#include <stdio.h>

int main ()
{
   FILE *fp;

   fp = fopen("file.txt", "w+");

   fputs("这是 C 语言。", fp);
   fputs("这是一种系统程序设计语言。", fp);

   fclose(fp);
   
   return(0);
}

feof

  • 判断读取文件是否到达结束末尾
  • 一行一行读取 txt 文件
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>                   //提供 exit() 原型

#define MAX 1024

int main(void)
{
	FILE *pf;
	char buffer[MAX];
	
	if((pf = fopen("1.txt" , "r")) == NULL)
	{
		printf("打开文件 1.txt 失败!\n");
		exit(EXIT_FAILURE);
	}
	/*
	头文件 <stdlib> 中宏定义如下:
	#define EXIT_FAILURE 1 表示程序执行失败
	#define EXIT_SUCCESS 0 表示程序执行成功
	*/
	
	while(!feof(pf))              //检测到文件末尾,返回非 0 值,否则返回 0 值
	{
		fgets(buffer , MAX , pf);
		/*
		最多可读取 MAX - 1 个字符
		因为结尾处会自动添加一个 '\0' 字符串结束符
		当读取到换行符 '\n' 和文件结束符 EOF 时结束读取
		注意:'\n' 会被作为一个合法的字符读取
		注意:1.txt 文件中有中文,需要将其编码格式保存为 ANSI ,即当前系统编码 GBK 编码
		注意:1.txt 文件中最后一行有换行符存在,则最后一行将重复输出一次
		*/
		printf("%s" , buffer);
		/*
		输出读取到的 '\n' 字符,即会自动换行
		*/
	}
	printf("\n");
	fclose(pf);
	
	printf("\n");
	system("pause");         //请按任意键继续...
	
	return 0;
}
posted @ 2022-04-29 17:10  starc的miao  阅读(51)  评论(0)    收藏  举报