美文网首页C语言
2021-04-07(文件操作)

2021-04-07(文件操作)

作者: 张轻舟 | 来源:发表于2021-04-07 10:44 被阅读0次

文件写入

char str[29]="hello 2021";
FILE *fp//打开文件
fp=fopen("123.txt","w");//读写文件
fprintf(fp,"%s",str)//写
fclose(fp);
return 0;

文件读取

include<stdio.h>

int main()
{
char str2[200];
FILE *fp;//打开文件
fp=fopen("123.txt","r");//读写文件
fscanf(fp,"%s",str2);
printf("%s\n",str2);
fclose(fp);
return 0;
}


读字符串函数 fgets

fgets() 函数用来从指定的文件中读取一个字符串,并保存到字符数组中,它的用法为:

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

str 为字符数组,n 为要读取的字符数目,fp 为文件[指针]

返回值:读取成功时返回字符数组首地址,也即 str;读取失败时返回 NULL;如果开始读取时文件内部指针已经指向了文件末尾,那么将读取不到任何字符,也返回 NULL。

注意,读取到的字符串会在末尾自动添加 '\0',n 个字符也包括 '\0'。也就是说,实际只读取到了 n-1 个字符,如果希望读取 100 个字符,n 的值应该为 101。例如:

define N 101

char str[N];
FILE *fp = fopen("D:\demo.txt", "r");
fgets(str, N, fp);
表示从 D:\demo.txt 中读取 100 个字符,并保存到字符数组 str 中。

需要重点说明的是,在读取到 n-1 个字符之前如果出现了换行,或者读到了文件末尾,则读取结束。这就意味着,不管 n 的值多大,fgets() 最多只能读取一行数据,不能跨行。在C语言中,没有按行读取文件的函数,我们可以借助 fgets(),将 n 的值设置地足够大,每次就可以读取到一行数据。

一行一行读取文件

include <stdio.h>

include <stdlib.h>

define N 100

int main(){
FILE *fp;
char str[N+1];
if( (fp=fopen("d:\demo.txt","rt")) == NULL ){
puts("Fail to open file!");
exit(0);
}

while(fgets(str, N, fp) != NULL){
    printf("%s", str);
}

fclose(fp);
return 0;

}
fgets() 遇到换行时,会将换行符一并读取到当前字符串。该示例的输出结果之所以和 demo.txt 保持一致,该换行的地方换行,就是因为 fgets() 能够读取到换行符。而 gets() 不一样,它会忽略换行符。
写字符串函数 fputs
fputs() 函数用来向指定的文件写入一个字符串,它的用法为:
int fputs( char *str, FILE *fp );
str 为要写入的字符串,fp 为文件指针。写入成功返回非负数,失败返回 EOF。例如:
char *str = "http://c.biancheng.net";
FILE *fp = fopen("D:\demo.txt", "at+");
fputs(str, fp);


动态内存开辟

//堆空间 栈空间 全局/静态区

include<stdio.h>

include<string.h>

include<stdlib.h>

int main()
{
char *p;
p=(char *)malloc(100);
strcpy(p,"nice to meet you!");
puts(p);
return 0;


int *s;
s=(int *)malloc(4);
*s=1234;
printf("%d\n",*s);
return 0;

free(p);
free(s);
//释放空间
}


病毒样例
char p;
int i=0;
while(i<1000)
{
p=malloc(1024
1024);
Sleep(200);
i++;
}


int i=0;
int j=0;
int p1,p2;
char a[100000];
p1=malloc(100);
p2=malloc(100);
printf("%x%x\n",&i,&j);

image.png
free()要释放的,不然内存泄露会越来越大直到崩溃

堆 栈 区别


有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)
输入
学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。
输出
各门课的平均成绩 最高分的学生的数据(包括学号、姓名、3门课成绩)
样例输入
2
1 blue 90 80 70
b clan 80 70 60
样例输出
85 75 65
1 blue 90 80 70


#include<stdio.h>
typedef struct student {
    char num[100];
    char name[100];
    int grade[3];
}stu[100];

int main()
{
    int a, i, u;
    int sum[100], average[100], number = 0, max = 0, d;
    scanf("%d", &a);
    struct student stu[100];
    for (i = 0;i < a;i++)
    {
        scanf("%s %s %d %d %d", stu[i].num, stu[i].name, &stu[i].grade[0], &stu[i].grade[1], &stu[i].grade[2]);
    }
    for (i = 0;i < a;i++)
    {
        sum[i] = stu[i].grade[0] + stu[i].grade[1] + stu[i].grade[2];
    }
    for (i = 0;i < 3;i++)
    {
        d = 0;
        for (u = 0;u < a;u++)
        {
            d = d + stu[u].grade[i];
        }
        average[i] = d / a;
        printf("%d ", average[i]);
    }
    printf("\n");
    for (i = 0;i < a;i++)
    {
        if (max <= sum[i])
        {
            max = sum[i];
            number = i;
        }
    }
    printf("%s %s %d %d %d", stu[number].num, stu[number].name, stu[number].grade[0], stu[number].grade[1], stu[number].grade[2]);
}






相关文章

  • 2021-04-07(文件操作)

    文件写入 char str[29]="hello 2021";FILE *fp//打开文件fp=fopen("12...

  • 谷歌街景里面的艺术

    Jon Rafman: "Nine Eyes of Google Street View" 2021-04-07 ...

  • 文件操作

    文件操作 目标 文件操作的作用 文件的基本操作打开读写关闭 文件备份 文件和文件夹的操作 一. 文件操作的作用 思...

  • 文件和目录处理相关

    文件和目录处理相关 题: 考点:文件操作/写入操作; 延伸:目录操作函数,其他文件操作; 文件读写操作 文件系统函...

  • 09-文件操作

    一、文件操作流程 a.普通文件操作流程: 打开文件 操作文件 关闭文件 b. json文件操作流程: open(文...

  • VBS文件操作

    VBS文件操作'操作文本文件,操作fso对象(文件对象操作) --------------------------...

  • 文件操作

    文件操作:打开文件、读写文件、操作文件内容 写入文件操作:(把大象装入冰箱)1.打开文件 ...

  • 类的补充

    一.复习 1.文件操作a.操作流程:打开文件(open),操作文件,关闭文件with open() as 文件变量...

  • 文件

    目标 文件操作的作用 文件的基本操作打开读写关闭 文件备份 文件和文件夹的操作 一. 文件操作的作用 思考:什么是...

  • 16总 正则表达式

    复习: 1.文件操作a.操作流程: 打开文件(open) --- 操作文件 --- 关闭文件(close)with...

网友评论

    本文标题:2021-04-07(文件操作)

    本文链接:https://www.haomeiwen.com/subject/fqpykltx.html