C基础笔记

参考菜鸟教程及课本

文件

fopen函数

FILE *fopen(const char *filename, const char *mode)

fscanf函数

就是比scanf函数多了一个指针参数

char str1[],str2[],str3[];
int a;
 fscanf(fp, "%s %s %s %d", str1, str2, str3, &a);

fprint函数同理。
如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。

fseek函数

每个流都有相关的文件位置,打开文件时,可能在文件的起始处,但是如果文件按“追加”方式打开,那么流也可能在文件的末尾。但是某些程序需要在文件里有跳跃的能力,于是引进fseek函数。

<stdio.h>头文件里定义了三种宏。
意义
SEEK_SET文件的起始处
SEEK_CUR文件的当前位置
SEEK_END文件的末尾处

函数声明:

int fseek(FILE *stream, long int offset, int whence)

  • stream:指向FILE对象的指针,该FILE对象标识了流。
  • offset:相对whence的偏移量,以字节为单位。
  • whence:表示开始添加偏移offset的位置。一般指定为上述规定的宏。
    返回值
  • 成功:0
  • 失败:非0值
    实例
#include <stdio.h>

int main ()
{
   FILE *fp;

   fp = fopen("file.txt","w+");
   fputs("This is runoob.com", fp);
  
   fseek( fp, 7, SEEK_SET );
   fputs(" C Programming Langauge", fp);
   fclose(fp);
   
   return(0);
}

输出:

This is C Programming Langauge

rewind函数

把文件位置设置在起始处
rewind()函数会把文件位置设置在起始处,几乎等价于~

fseek(fp,0L,SEEK_SET)

声明:

void rewind(FILE *stream)

返回值:该函数不返回任何值
例子:

#include <stdio.h>

int main()
{
   char str[] = "This is runoob.com";
   FILE *fp;
   int ch;

   /* 首先让我们在文件中写入一些内容 */
   fp = fopen( "file.txt" , "w" );
   fwrite(str , 1 , sizeof(str) , fp );
   fclose(fp);

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

   return(0);
}

假设我们有一个文本文件 file.txt,它的内容如下:

This is runoob.com

让我们编译并运行上面的程序,这将产生以下结果:

This is runoob.com
This is runoob.com

feof函数

声明:

int feof(FILE *stream)

返回值:
当设置了与流关联的文件结束标识符时,该函数返回一个非零值,否则返回零。意思就是可以用这个函数来判断在读取文件时,是否出错,如果出错了,就返回0。
注意,feof 仅用于在读写发生错误以后,发生错误以后,发生错误以后,判断是否到是文件结尾导致的。

fread函数

声明:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

参数:

  • ptr:这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。
  • size: 这是要读取的每个元素的大小,以字节为单位。
  • nmemb:这是元素的个数,每个元素的大小为 size 字节。
  • stream:这是指向 FILE 对象的指针,该 FILE对象指定了一个输入流。

返回值:
成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。
实例:

#include <stdio.h>
#include <string.h>
 
int main()
{
   FILE *fp;
   char c[] = "This is runoob";
   char buffer[20];
 
   /* 打开文件用于读写 */
   fp = fopen("file.txt", "w+");
 
   /* 写入数据到文件 */
   fwrite(c, strlen(c) + 1, 1, fp);
 
   /* 查找文件的开头 */
   fseek(fp, 0, SEEK_SET);
 
   /* 读取并显示数据 */
   fread(buffer, strlen(c)+1, 1, fp);
   printf("%s\n", buffer);
   fclose(fp);
   
   return(0);
}

fwrite函数

声明:

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
  • ptr :这是指向要被写入的元素数组的指针。
  • size :这是要被写入的每个元素的大小,以字节为单位。
  • nmemb :这是元素的个数,每个元素的大小为 size 字节。
  • stream : 这是指向 FILE 对象的指针,该 FILE对象指定了一个输出流。
    返回值:
    如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。
    实例:
#include<stdio.h>
 
int main ()
{
   FILE *fp;
   char str[] = "This is runoob.com";
 
   fp = fopen( "file.txt" , "w" );
   fwrite(str, sizeof(str) , 1, fp );
 
   fclose(fp);
  
   return(0);
}

fgetc函数

int fgetc(FILE *stream)
//读取一个无符号字符

fputc函数

int fputc(int char, FILE *stream)

fgets函数

char *fgets(char *str, int n, FILE *stream)

实例:

#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);
}

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

fputs函数

int fputs(const char *str, FILE *stream)

返回值:
该函数返回一个非负值,如果发生错误则返回 EOF。
实例:

#include <stdio.h>

int main ()
{
   FILE *fp;

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

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

   fclose(fp);
   
   return(0);
}
  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值