c语言依次读取txt数据(为什么输出的前几个都对 就最后一排的数字和我想输出的不同)请大神解释

c语言依次读取txt数据(为什么输出的前几个都对 就最后一排的数字和我想输出的不同)请大神解释,第1张

#include "string.h"

#include "time.h"

#include "stdio.h"

void main()

{

    int j,i=0,p[50],z[4],m[4],a[4],h[4]

    float pp[50]

    float l,q,n

    FILE *fp=NULL,*fp1=NULL//定义文件指针

    fp=fopen("E:\\data1.txt","r") //打开文件

    fp1=fopen("E:\\data.txt","w") //文件放在E盘

    if(fp==NULL) //判断文件打开的正确性

    {

        printf("\n不能打开该文件!")

        getch()

        exit(1)

    }

    if(fp1==NULL) //判断文件打开的正确性

    {

        printf("\n不能写该文件!")

        getch()

        exit(1)

    }

    printf("输入平时、期中、期末的比例\n")

    scanf("%f %f %f",&l,&q,&n)

    do {

        fscanf(fp,"%d %d %d %d ",&h[i],&a[i],&z[i],&m[i])

        pp[i+1]=a[i]*l+z[i]*q+m[i]*n

        i++

    } while(feof(fp)==0)

    //原代码

    //do {

    //    fscanf(fp,"%d %d %d %d ",&h[i],&a[i],&z[i],&m[i])

    //    当i=0,得到h[0]=1,a[0]=60,z[0]=70,m[0]=40

    //    i++

    //    此时,i=1,但是a[1],z[1],m[1]还没有正式赋值,

    //    例如,a[1]=-2,z[1]=-2,m[1]=1342177377

    //    pp[i]=a[i]*l+z[i]*q+m[i]*n

    //    此时,pp[1]=a[1]*l+z[1]*q+m[1]*n

    //    l=0.5,q=0.2,n=0.3,得出

    //    pp[1]= -2*0.5-2*0.2+1342177377*0.3=402653212

    //    pp[1]=402653212不是代码所需要的结果

    //} while(feof(fp)==0)

    fclose(fp)

    i--

    for(j=0j<=ij++)

    {

        //计算出的结果保留1位小数

        fprintf(fp1,"%d %d %d %d %0.1f \n",h[j],a[j],z[j],m[j],pp[j+1])

        //原代码fprintf(fp1,"%d,%d,%d,%d,%f,\n",h[j],a[j],z[j],m[j],pp[j+1])

    }

    fclose(fp1)

}

在c语言中,创建单链表需要使用到malloc函数动态申请内存;文件的读写需要首先使用fopen函数打开文件,然后使用fscanf,fgetc, fgets,fprintf,fputc,fputs等函数读写函数,最后读写完毕要使用fclose函数关闭函数。

下面的源程序展示了关于单链表如何从文件中读取数据和往文件里存入数据。

#include<stdio.h>

#include<stdlib.h>

#include<memory.h>

typedef struct node {

int data

struct node *next

}node

//从文件中读取数据存入链表

node *createlink()

{

node *head =(node*)malloc(sizeof(node))

int t

node *p

node *q

p=q=head

FILE * r= fopen("input.txt","r")

if(r==NULL)

{

printf("打开文件失败!")

return NULL

}

while(fscanf(r,"%d",&t)!=EOF)

{

q= (node*)malloc(sizeof(node))

q->data=t

p->next=q

p=q

}

p->next=NULL

return head

}

//输出链表到屏幕和文件output.txt

void outlink(node *head)

{

node *p=head->next

FILE *w =fopen("output.txt","w")

if(w==NULL)

{

printf("打开文件失败!")

return

}

while(p)

{

//输出链表节点数据到屏幕

printf("%d ",p->data)

//输出链表节点数据到文件output.txt

fprintf(w,"%d ",p->data)

p=p->next

}

printf("\n")

fprintf(w,"\n")

fclose(w)

return

}

int main()

{

node *head

int n,m

head=createlink()

outlink(head)

system("pause")

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12008840.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存