C基础笔记

参考菜鸟教程及课本

文件

fopen函数

c 复制代码
FILE *fopen(const char *filename, const char *mode)

fscanf函数

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

c 复制代码
char str1[],str2[],str3[];
int a;
 fscanf(fp, "%s %s %s %d", str1, str2, str3, &a);

fprint函数同理。

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

fseek函数

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

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

函数声明:

c 复制代码
int fseek(FILE *stream, long int offset, int whence)
  • stream:指向FILE对象的指针,该FILE对象标识了流。
  • offset:相对whence的偏移量,以字节为单位。
  • whence:表示开始添加偏移offset的位置。一般指定为上述规定的宏。
    返回值
  • 成功:0
  • 失败:非0值
    实例
c 复制代码
#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);
}

输出:

c 复制代码
This is C Programming Langauge

rewind函数

把文件位置设置在起始处

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

c 复制代码
fseek(fp,0L,SEEK_SET)

声明:

c 复制代码
void rewind(FILE *stream)

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

例子:

c 复制代码
#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,它的内容如下:

c 复制代码
This is runoob.com

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

c 复制代码
This is runoob.com
This is runoob.com

feof函数

声明:

c 复制代码
int feof(FILE *stream)

返回值:

当设置了与流关联的文件结束标识符时,该函数返回一个非零值,否则返回零。意思就是可以用这个函数来判断在读取文件时,是否出错,如果出错了,就返回0。

注意,feof 仅用于在读写发生错误以后,发生错误以后,发生错误以后,判断是否到是文件结尾导致的。

fread函数

声明:

c 复制代码
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 参数不同,则可能发生了一个错误或者到达了文件末尾。
实例:

c 复制代码
#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函数

声明:

c 复制代码
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
  • ptr :这是指向要被写入的元素数组的指针。
  • size :这是要被写入的每个元素的大小,以字节为单位。
  • nmemb :这是元素的个数,每个元素的大小为 size 字节。
  • stream : 这是指向 FILE 对象的指针,该 FILE对象指定了一个输出流。
    返回值:
    如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。
    实例:
c 复制代码
#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函数

c 复制代码
int fgetc(FILE *stream)
//读取一个无符号字符

fputc函数

c 复制代码
int fputc(int char, FILE *stream)

fgets函数

c 复制代码
char *fgets(char *str, int n, FILE *stream)

实例:

c 复制代码
#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函数

c 复制代码
int fputs(const char *str, FILE *stream)

返回值:

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

c 复制代码
#include <stdio.h>

int main ()
{
   FILE *fp;

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

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

   fclose(fp);
   
   return(0);
}
相关推荐
带多刺的玫瑰1 小时前
Leecode刷题C语言之统计不是特殊数字的数字数量
java·c语言·算法
美式小田2 小时前
单片机学习笔记 9. 8×8LED点阵屏
笔记·单片机·嵌入式硬件·学习
猫爪笔记2 小时前
前端:HTML (学习笔记)【2】
前端·笔记·学习·html
_不会dp不改名_2 小时前
HCIA笔记3--TCP-UDP-交换机工作原理
笔记·tcp/ip·udp
陌小呆^O^2 小时前
Cmakelist.txt之win-c-udp-server
c语言·开发语言·udp
时光の尘2 小时前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
-一杯为品-2 小时前
【51单片机】程序实验5&6.独立按键-矩阵按键
c语言·笔记·学习·51单片机·硬件工程
爱摸鱼的孔乙己3 小时前
【数据结构】链表(leetcode)
c语言·数据结构·c++·链表·csdn
Dola_Pan3 小时前
C语言:数组转换指针的时机
c语言·开发语言·算法
IU宝4 小时前
C/C++内存管理
java·c语言·c++