Bliner'Site Bliner'Site

高树靡阴,独木不林。


  • 首页

  • 分类 10

  • 标签 36

  • 归档 214

  • 关于我

  • 搜索

标签:C语言笔记

C语言复习-常见错误(下)-学习笔记-69

发表于 2018-10-29 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 37

引入

近两个月的时间,顺着谭浩强老师的《C 语言程序设计(第四版)》,我们简要学习了一些 C 语言的知识,接下来三节,我们对常见问题和一些知识点进行回顾。

常见错误

我们梳理一下常见的错误。

混淆字符和字符串的表示形式

char m;
m="C";//这事不合法的,因为 m 是字符,用双信号包起来是 C+\0 的,所以会出错
m='C'
//改成单引号就对了!

自加和自减

在使用++和——的时候,要注意符号的优先级,比如在指针自加减时,因为++和——要高于*,所以先执行 p++,即* p++ 后再当做指针使用。
宁可多加括号,也要搞清楚使用方法!

记得提前声明自定义函数

如果我们在使用时,没有声明要使用的自定义函数,系统就会报错,所以在使用自定义函数前,一定要先声明,不一定非要在 main 函数声明,在使用前即可。

阅读全文 »

C语言复习-常见错误(上)-学习笔记-68

发表于 2018-10-27 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 28

引入

近两个月的时间,顺着谭浩强老师的《C 语言程序设计(第四版)》,我们简要学习了一些 C 语言的知识,接下来三节,我们对常见问题和一些知识点进行回顾。

常见错误

我们梳理一下常见的错误。

忘记定义变量。

x=3;
y=4;
printf("%d",x+y);
//没有声明变量类型

输入输出格式不统一

float x=3.3;
float y=4.3;
printf("%d",x+y);
//应该使用%f 类型输出

超出数据类型范围

int 和 short 都是-32768~32768,不能超出这个数。

int num;
num=99999;
//99999超出了 int 类型的数值范围
阅读全文 »

C语言中操作文件-文件读写的出错检测-学习笔记-67

发表于 2018-10-27 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 35

引入

我们在使用输入输出函数的时候,可能会出现错误。所以 C 语言提供了一些函数,帮助我们检测这些错误!

ferror 函数

之前,我们总是根据输入输出函数的返回值来判断函数是否执行,成功。现在我们还可以使用 ferror 函数进行检查。

一般形式

ferror(fp);

返回值

如果返回值为 0 (假):表示未出错
如果返回值为非0:表示出错

注意,对同一个文件来说,每一次调用输入输出函数,都会产生一个新的 ferror 函数值,所以,应该在调用一个输入输出函数后立即检查 ferror 函数的值。

阅读全文 »

C语言中操作文件-随机读写数据文件(下)-学习笔记-66

发表于 2018-10-26 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 23

引入

前面,我们知道了什么是文件位置标记,以及如何控制文件位置标记,学会了 rewind 和 fseek 这两个函数后,我们就来实现一下随机读写!

例子

输入10个学生成绩,然后存储到文件,接着读入文件,将1,3,5,7,9号学生数据输出到计算机上。

#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct Student)
int main(){
    struct Student{
        int num;
        char name[10];
        float score;
    }stu[10];
    //输入数据
    for (int i=0;i<10;i++){
        scanf("%d %s %f",&stu[i].num,stu[i].name,&stu[i].score);
    }
    //存储数据
    FILE *fp;
    fp=fopen("/Users/liulin/1.txt","wb");
    printf("存储的数据是:\n");
    for(int i=0;i<10;i++){
        fwrite(&stu[i],LEN,1,fp);
        printf("第%d号%s的成绩是:%3.1f\n",stu[i].num,stu[i].name,stu[i].score);
    }
    fclose(fp);
    //读入数据
    printf("1、3、5、7、9的数据是:\n");
    struct Student stu_in[10];
    fp=fopen("/Users/liulin/1.txt","rb");
    for(int i=0;i<10;i=i+2){
        fseek(fp,i*LEN,0);
        fread(&stu_in[i],LEN,1,fp);
        printf("第%d号%s的成绩是:%3.1f\n",stu_in[i].num,stu_in[i].name,stu_in[i].score);
    }
    fclose(fp);
    return 0;
}
阅读全文 »

C语言中操作文件-随机读写数据文件(上)-学习笔记-65

发表于 2018-10-26 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 23

引入

我们之前讲的,都是对文件的顺序读写,很容易操作,但有时候效率不高。比如,文件中有1000个数据,我们如果需要找到第999号数据,那么需要从1遍历到998才可以。如果是一个城市几百万人的数据呢?所以随机访问应运而生,随机访问不是按数据在文件中的物理位置进行读写,而是可以对任何位置上的数据进行访问,显然这种方法比顺序访问高效的多。

文件位置标记

我们前面说过,w 方式打开是新建(有重名就删除再新建),文件标记在开头。a 方式打开是追加,文件标记在末尾。为了对读写进行控制,系统位每个文件设置了一个文件读写位置标记,简称(文件读写标记或文件标记),用来指示接下来要读写的下一个字符的位置。

文件位置读写标记

  • **顺序读文件:**一般情况下,在对字符文件进行顺序读写的时候,文件位置标记指向文件开头,这时,如果对文件进行读的操作,然后文件位置标记向后移动一个位置,如果再一次执行读操作,就会将位置2的字符读入,以此类推(我们前面的例子也说过)直到文件尾。
阅读全文 »

C语言中操作文件-用二进制的方式读写文件-学习笔记-64

发表于 2018-10-25 | 分类 笔记&教程 | 评论数: 2 | 阅读次数: 118

引言

前面我们说,使用 fprintf 和 fscanf 确实很方便,也很好理解,但是频繁的进行读写,二进制和 ASCII 码转来转去不是事,太耽误时间了,那么今天我们就来学习如何读取和写入二进制数据,还能一次输入输出结构体等成组的数据哦~

二进制文件读写函数

一般形式

fread (buffer,size,count,fp);
fwrite(buffer,size,count,fp);

参数说明

  • **buffer:**是一个地址,对 fread 而言,buffer 代表着那些从文件读入的数据在内存存储区的地址。
  • **size:**要读写多少个字节数。
  • **count:**要读写多少个数据项,一个数据项的长度是 size 字节
  • **fp:**FILE 文件类型指针

我知道这里的 buffer、size 和 count 把大家绕晕了,我再来说明一下

float f[20];
fread(f,4,10,fp);
//从 fp 指向的文件中取出10个数据项,每项数据4个字节。存储到数组 f 中
阅读全文 »

C语言中操作文件-用格式化的方式读写文件-学习笔记-63

发表于 2018-10-25 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 53

引入

我们前面将了如何输出一个字符、如何输出一串字符,但是数据并不仅仅只有字符,数据的类型是十分丰富的。我们在使用 printf 和 scanf 的时候,通过%d %s %f %o来格式化不同的数据,那么磁盘文件能否也这样进行操作呢?

格式化读写函数

其实就像 gets 、puts 和 fgets、fputs一样。
格式化读写函数是从 printf 、scanf 延伸

fprintf(文件指针,格式字符串,输出表列);
fscanf(文件指针,格式字符串,输入表列);

fprintf 函数:

int i=3;
float f=5.3;
fprintf(fp,"%d,%6.2f",i,f);
//将 int 型的 i 和 float 型的 f 按 %d 和 %6.2f 的形式输出到 fp 指向的文件中
阅读全文 »

C语言中操作文件-向文件读写一个字符串-学习笔记-62

发表于 2018-10-24 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 72

引入

前面我们学习了如何向文件写入一个字符,以及读取一个字符串,但是这太反常识了,有没有方便读写一个字符串的方法呢?当然是有的!😎

读写字符串的函数

C 语言允许通过函数 fgets 和 fputs 一次读写一个字符串

函数名 调用形式 功能 返回值
fgets fgets(str,n,fp) 从 fp 指向的文件中,读取一个长度位 n-1 的字符串,存放到字符数组 str 中。 成功则返回str 的地址,失败则返回 NULL
fputs fputs(str,fp) 把 str 所指向的字符串写到文件指针变量 fp 中 成功为0,失败为非0

fgets 函数

一般形式

char fgets (char str , int n , FILE *fp);

作用是从文件读入一个字符串到字符数组

fgets(str, n, fp);
//读取一个文件中的字符串给字符数组
阅读全文 »

C语言中操作文件-向文件写入字符-学习笔记-61

发表于 2018-10-24 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 78

引入

前面,我们学会了如何打开一个文件,并创建一个指针指向该文件。打开之后,我们就要对文件进行读写了。

向文件读写字符

对文件进行读写一个字符,需要下面这两个函数

函数名 调用形式 功能 返回值
fgetc fgetc(fp) 从 fp 指向的文件读入一个字符 读入成功,返回所读的字符 读入失败,返回-1
fputc fputc(fp) 把字符 ch 写到文件指针变量 fp 指向的文件 输出成功,返回输出的字符 输出失败,返回-1

fgetc 中

  • f: 表示 file 即文件
  • **get:**表示 获取
  • **c:**表示 character
  • fputc 同理

例子引入

从键盘逐个输入字符串,然后用 fputc 函数写到磁盘文件中

#include <stdio.h>
#include<stdlib.h>
int main(){
    FILE *fp;
    char ch,filename[20];  //一个存文字,一个存文件目的
    printf("请输入文件位置:\n");
    scanf("%s",filename);  //输入文件名
    if((fp=fopen(filename,'w'))==NULL){
      // 如果获取不到指针,就证明打开文件失败
        printf("错误!文件无法读入!");
        exit(0);  //结束该程序
    }
    ch=getchar();  //因为上面输入文件名的时候,输入了一个回车,先存在这里,否则会输入到磁盘里
    printf("请输入一个准备存储到磁盘的字符串(#号结尾):\n");
    ch=getchar();  //覆盖上面的回车,获取输入的第一个字符
    while(ch!='#'){ 
      //如果第一个字符不是 # 号,就开始循环
        fputc(ch,fp);    //因为上面已经输入了一个了,所以先存储
        putchar(ch);  //然后把输入的内容输出到终端
        ch=getchar();  //再从键盘获取新的输入的内容
    }
    fclose(fp);  //用完文件一定要关闭文件,否则写入会失败
    return 0;
}
阅读全文 »

C语言中操作文件-打开和关闭数据文件-学习笔记-60

发表于 2018-10-23 | 分类 笔记&教程 | 评论数: 0 | 阅读次数: 52

引入

我们讲了这么久的文件,知道了文件名、内存缓冲区、缓冲区中的文件信息区以及定义一个 FILE 结构体变量和指针。今天我们就来尝试打开和关闭一个文件。

fopen 函数打开文件

ANSI C 规定了用标准输入输出函数 fopen 来实现打开文件
一般形式

fopen (文件名 , 使用文件方式);

例如:

fopen("a1","r");
//其中 a1 就是文件名,r 就是使用文件方式

**a1:**是要打开的文件名,也可以是字符数组的首地址
**r:**使用文件方式(r 表示 read 读入)

fopen 函数的返回值是指向 a1 文件的指针,也就是 a1 在内存中的文件信息区的起始地址。所以,我们经常将 fopen 函数的返回值给一个指向文件的指针变量。

FILE *fp;  //定一个指向文件的指针变量 fp
fp=fopen("a1","r");  //将 fp 赋值,值为a1的文件信息区起始地址
阅读全文 »
上一页 1 2 ... 7 下一页
Bliner

Bliner

214 日志 10 分类 36 标签
RSS

推荐阅读

关于GTD中项目“复盘”的一想法
© 2008 - 2026 Bliner
鲁ICP备13021673号