c语言读写文件时出现的问题

为什么我我读文件只能出现第一个数据。其他的数据都不会出现。图片说明


图片说明

---------一下是源码

#include
#include
#define N 30
#include
struct recipe{
char food[10];
float price;
struct recipe *next;

};

struct recipe* creat()
{ int x;
int i=0;
struct recipe *head,*p,*tail;
head=tail=NULL;
printf("请输入新添加的菜品数量:");
scanf("%d",&x);
for(i=0;i p=(struct recipe *)malloc(sizeof(struct recipe));
if(p==NULL)
{ printf("分配内存失败.");
exit(1);
}
p->next=NULL;
printf("请输入菜品的名称:");
scanf("%s",p->food);
printf("请输入菜品价格:");
scanf("%f",&p->price);

if(head==NULL)
{   
    head=p;
    tail=p;
}
else
{  tail->next=p;
   tail=p;
}
}
return head;

}
void displayRecipe(struct recipe *p)
{

printf("\t\t菜名--------------------------------价格\n");
while(p!=NULL)
{

printf("\t\t%s-------------------------------%f\n",p->food,p->price);
p=p->next;
}

}

int choosemenu(){

printf("\t\t\t[1]输入新的菜品信息\n");

printf("\t\t\t[2]查看现有菜品信息\t\n");

printf("\t\t\t[3]将现有菜品价格从小到大排序\t\n");

printf("\t\t\t[4]查找现有菜品信息\t\n");

printf("\t\t\t[5]删除现有菜品信息\t\n");

printf("\t\t\t[6]保存修改菜品信息\t\n");

printf("\t\t\t[7]退出菜品信息管理系统\t\n");

printf("\t\t\t[8]读取已有文件信息.\t\n");

printf("\t\t\t[9]清屏。\t\n");

printf("\t\t\t请选择:    \n");

return  0;

}

struct recipe *Newsth(struct recipe *p)
{
struct recipe *m;
if((m=(struct recipe *)malloc(sizeof(struct recipe)))==NULL)
{
printf("分配内存失败");
exit(1);
}

printf("请输入新输入的菜品名称:");
scanf("%s",m->food);
printf("请输入新输入的菜品价格:");
scanf("%f",&m->price);
m->next=p;
return m;

}

struct recipe *sort(struct recipe *b)
{
struct recipe *p,*pre_min,*min,*first,*tail;
first=NULL;
while(b->next!=NULL)
{
for(p=b,min=b;p->next!=NULL;p=p->next)
{
if((p->next->price)<(min->price))
{
pre_min=p;//保留当前所找到最小节点的前驱节点
min=p->next;//保留当前最小节点
}

    }
    if(b==min)
    {
        b=b->next;
    }
    else
    {
        pre_min->next=min->next;//将当前最小节点移出链表
    }
    if(first==NULL)
    {
        first=min;
        tail=first;
    }
    else
    { 
        tail->next=min;
        tail=min;

    }

}

if(b->next==NULL)
    {
        tail->next=b;
        tail=b;

    }
return first;

}

void search(struct recipe *d)
{ char name[10];
printf("请输入需要查找的菜品名称:");
scanf("%s",name);
while(strcmp(d->food,name)!=0)
{
d=d->next;
if(d==NULL){
printf("输入有误,请重新输入.\n");
break;}
}
if(d!=NULL) printf("你要查找的菜品信息为%s,价格为%f\n",d->food,d->price);

}

struct recipe *Delete(struct recipe *h)
{ struct recipe *f,*j,*start;
char target[10];
start=h;
start->next=h->next;
printf("请输入你想要删除的菜品的名称:");
scanf("%s",target);

while(strcmp(h->food,target)!=0)
{
    if(h->next->next==NULL)
        j=h;

    h=h->next;

}

    if(h->next==NULL)
    {
        j->next=NULL;
        free(h);

    }

    else{
    strcpy(h->food,h->next->food);
    h->price=h->next->price;
    f=h->next;
    if(h->next->next!=NULL)
    h->next=h->next->next;
    else h->next=NULL;
    free(f);
    }
return start;

}
void save(struct recipe *g)
{
FILE *fp;
if((fp=fopen("d:\recipe.txt","w"))==NULL)
{
printf("无法打开文件.\n");
exit(0);
}

while(g!=NULL)
{
    fprintf(fp,"\t\t%s\t\t\t%f\n",g->food,g->price);
    g=g->next;
}
fclose(fp);

}

void read(struct recipe *j){

FILE *f;
if((f=fopen("d://recipe.txt","r"))==NULL)
{
    printf("无法读取文件.\n");
    exit(0);
}
while(j!=NULL)
{
    fscanf(f,"\t\t%s\t\t\t%f\n",j->food,&j->price);

    printf("\t\t%s\t\t\t%f\n",j->food,j->price);
    j=j->next;
}

fclose(f);

}

void cls()
{
system("cls");
}

void main(){
int n=0;

struct recipe *head=NULL;

printf("--------------------欢迎进入订餐管理系统--------------------------\n");
printf("-------首次进入请确认你已写好菜品信息--------\n");
head=creat();
system("cls");

while(n!=7){
    choosemenu();
    scanf("%d",&n);
    switch(n){
case  1:head=Newsth(head);
         break;
case  2:displayRecipe(head);
    break;
case  3:head=sort(head);
    break;
case  4:search(head);
    break;
case  5:head=Delete(head);
    break;
case  6:save(head);
    break;
case  7:printf("Thanks for your use!\n\n\n\n");
    break;
case 8:read(head);
    break;
case  9:cls();
    break;
default:choosemenu();
    printf("输入有误,请重新输入.\n");

}
}
system("pause");

}

3个回答

你把read的函数修改一下即可

 void read(struct recipe *j)
{
    struct recipe *p,*p1,*p2;//添加三个结构体指针
    FILE *f;
    if((f=fopen("d://recipe.txt","r"))==NULL)
    {
        printf("无法读取文件.\n");
        exit(0);
    }
    //读取多行

    p=(struct recipe *)malloc(sizeof(struct recipe));//新开辟空间
    j->next=p;
    p1=p;
    while (2==fscanf(f,"\t\t%s\t\t\t%f\n",p1->food,&p1->price))//读取文件中的数据,每次读取一行
    {
        printf("\t\t%s\t\t\t%f\n",p1->food,p1->price);//打印
        //新开辟一个空间,然后再来读取,并连接到原有链表上
        p=(struct recipe *)malloc(sizeof(struct recipe));
        p2=p1;
        p1->next=p;
        p1=p;
    }
    free(p);//释放无用指针
    p=NULL;
    p2->next=NULL;
    fclose(f);
}

运行结果如下:
图片说明
图片说明

nishajuxia5058
闲敲棋子落灯花- 放在评论下面。
大约 3 年之前 回复
nishajuxia5058
闲敲棋子落灯花- 我修改了一下你写的read()。
大约 3 年之前 回复
qq_27587417
看得到你的人头 回复nishajuxia5058: 这回复功能也是无语了。。。要使用p2记录p1删除(即释放内存 free(p))之前的地址
大约 3 年之前 回复
qq_27587417
看得到你的人头 回复nishajuxia5058: 要使用p2记录p
大约 3 年之前 回复
nishajuxia5058
闲敲棋子落灯花- p2好像没用吧。直接用p1->next=NULL。不就行了。
大约 3 年之前 回复
nishajuxia5058
闲敲棋子落灯花- 这个排
大约 3 年之前 回复

来份源码,2207019991

void read(struct recipe *j)
{
struct recipe *p,*p1,*p2;//添加三个结构体指针
FILE *f;
if((f=fopen("d://recipe.txt","r"))==NULL)
{
printf("无法读取文件.\n");
exit(0);
}
//读取多行

p=(struct recipe *)malloc(sizeof(struct recipe));//新开辟空间
while(j->next!=NULL)
    j=j->next;//这样就可以实现将上次保存的数据直接读取到现在建立的链表中去,实现一个多次运用
j->next=p;
p1=p;
while (2==fscanf(f,"\t\t%s\t\t\t%f\n",p1->food,&p1->price))//读取文件中的数据,每次读取一行
{
    printf("\t\t%s\t\t\t%f\n",p1->food,p1->price);//打印
    //新开辟一个空间,然后再来读取,并连接到原有链表上
    p=(struct recipe *)malloc(sizeof(struct recipe));

    p2=p1;
    p1->next=p;
    p1=p;
}
free(p);//释放无用指针
p=NULL;
p2->next=NULL;
fclose(f);

}

qq_27587417
看得到你的人头 回复闲敲棋子落灯花-: 嗯,这个修改不错,之前不成功第一是因为没有分配内存,第二是程序中只读取了第一行的(这个是主要原因)
大约 3 年之前 回复
nishajuxia5058
闲敲棋子落灯花- 我之前那个不行是因为每次读取磁盘的文件都必须给指针分配内存吗?
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言读写文件的问题
假如我现在在c:\tmep\data.txt,我想把这个文件的内容写到c:\tmep\date1.txt中 rn用C语言如何写,
c语言读写文件问题
必须要c程序写入的文件才可以让c程序读取吗?rn不是fprintf写入的fscanf可以读取吗?rn我可以把这些“1 小明 男 25 广西南宁 2500 健康 大学”直接写入文本文件再用fscanf读取吗?
求助:读写文件时出现的问题
1.写文件时语句如下:rnOutputConnection connection = (OutputConnection) rn Connector.open("file://c:/myfile.txt;append=true", Connector.WRITE );rn运行时会抛出java.lang.IllegalArgumentException异常,请问该如何解决?rnrn2.读文件界面:is it ok to read your files? rn按下yes键,运行后出现警告:rnWarning: To avoid potential deadlock, operations that may block, such as rn networking, should be performed in a different thread than the rn commandAction() handler.rn请问这是怎么回事啊??????????
请教:C语言读写文件问题
下面这个程序的目的是从command line接收两个文件的文件名,然后判断哪个文件里的文本行数较多,最后将两个文件里的行号相同的文本打印在屏幕上的同一行里。但不知怎的,编译通过后运行时却老是出错,请帮忙看看是怎么回事。谢谢!rnrn[code=c]/* ex7, ch13, cl ver. */rnrn#include rn#include rnrn#define MAX 256rnrnint main(int argc, char *argv[])rnrn FILE * f1, *f2, *fp1, *fp2;rn char buf1[MAX], buf2[MAX], ch, *buf = buf1; //buf用作将从文件1中读出的一行去除换行符rn long cnt1 = 0, cnt2 = 0;rnrn if(argc != 3)rn rn printf("Usage: %s file1 file2", argv[0]);rn exit(EXIT_FAILURE);rn rn if((f1 = fopen(argv[1], "r")) == NULL)rn rn fprintf(stderr, "Error opening %s", argv[1]);rn exit(EXIT_FAILURE);rn rn if((f2 = fopen(argv[2], "r")) == NULL)rn rn fprintf(stderr, "Error opening %s", argv[2]);rn exit(EXIT_FAILURE);rn rn while((ch = getc(f1)) != EOF) //以下是判断哪个文件行数较多rn cnt1++; //将行数多的文件作为文件1rn while((ch = getc(f2)) != EOF)rn cnt2++;rn if(cnt1 >= cnt2)rn rn fp1 = f1;rn fp2 = f2;rn rn elsern rn fp1 = f2;rn fp2 = f1;rn rn rewind(f1); //文件指针位置归零rn rewind(f2);rn while(fgets(buf, MAX, fp1) != NULL) //从文件1中读取一行rn rn while(*++buf != '\n') //打印出这一行中除了换行符之外其他字符rn putchar(*buf); //问题也许就出在这里,但具体是什么问题就不清楚了rn printf(" "); //两行在同一行打印,用空格隔开,以示区别rn while(fgets(buf2, MAX, fp2) != NULL) //从文件2中读取一行并接着刚从文件1rn //读出并打印的那一行接着打印rn puts(buf2);rn break;rn rn rn fclose(f1);rn fclose(f2);rnrn puts("\nEnd of Program.");rnrn return 0;rnrn[/code]
关于C语言读写文件的问题
我不太理解以二进制方式读写文件的问题,比如我想把01000001这个ASCII代表A的字符写到文件里rn 比如:写入01000001到a.txt 在打开该文件就出现一个Arnrn
c语言读写文件
总结了c语言读写文件的方法,非常适合初学者
C语言读写文件与二进制文件
读写文件有“w”和“wb”格式,分别是以文本形式读写和以二进制形式读写。 1、文本方式读取要把回车,换行两个字符变成一个字符,相当于截短了文件。 2、文本形式和二进制形式适用的结束符和读写函数不同。尤其是结束符的问题,很困扰人。
C语言读写文件
1、读写文件,这种是把内容一欠copy到内存里。[code=&quot;C&quot;]#include #include /** *读文件 */ int rFile(){ FILE *fp; int flen; char *p; /* 以只读方式打开文件 */ if((fp = fopen (&quot;e:\\1.txt&quot;,&quot;r&quot;))==NULL)...
C语言读写文件的操作
文件的读写是有两个文件来实现的,一个是写入数据,一个读出数据,根据代码进行解析吧。举一个最简单的例子:# include &amp;lt;stdio.h&amp;gt; # include &amp;lt;stdlib.h&amp;gt; int main(void) { int k, n, m; freopen(&quot;a+b.in&quot;, &quot;w&quot;, stdout); //将要测试的数据写入到一个文件内,这个文件会在编译的时候...
C语言读写文件求助
代码如下:rn[code=c]rn#include "stdafx.h"rn#define FILENAME1 "filename1.txt"rn#define FILENAME2 "filename2.txt"rn#define NUM 10rnrnrnint _tmain(int argc, _TCHAR* argv[])rnrn FILE* p1=NULL;//文件指针,指向读入数据的文件rn FILE* p2=NULL;//文件指针,指向需要修改的文件rn int i; //循环控制变量,控制读写次数rn char ch;rn char buff[1024];rn char read_fpxxfpje[9];rn //write_fpxxfpje[10];rn if ((p1 = fopen(FILENAME1, "rb")) == NULL)rn rn printf("读取文件失败,按回车键退出!\n"); //输出错误提示rn while (1) //死循环控制错误提示rn rn ch = getchar();rn if (ch == '\n')break; //满足条件退出循环rn rn exit(1);rn rn if ((p2 = fopen(FILENAME2, "rb+")) == NULL)rn rn printf("写入文件失败,按回车键退出!\n"); //输出错误提示rn while (1) //死循环控制错误提示rn rn ch = getchar();rn if (ch == '\n')break; //满足条件退出循环rn rn exit(1);rn rn memset(buff, 0, 1024); //数组元素置零rn for (i = 0; i < NUM; i++)rn rn if (fgets(buff, 1024, p1) != NULL) //检查能否读取read指向文件的第一行数据rn rn memset(read_fpxxfpje, 0, 9);rn memcpy(read_fpxxfpje, buff + 514, 8); //复制read指向文件第一行数据第514~523个数据,赋予read_fpxx.fpjern printf("read_fpxx.fpje:%s\n", read_fpxxfpje); //输出.fpje的值rn rn elsern printf("获取第%d行数据失败",i); //不能打开文件提示错误信息rn if (fgets(buff, 1024, p2) != NULL) //检查能否读取数据rn rn fseek(p2, 32L,0);rn fputs(read_fpxxfpje, p2);rn fseek(p2, 109L, 1);rn rn elsern printf("写入第%d行数据失败", i);rn rn fclose(p1);rn fclose(p2);rn while (1) //死循环控制错误提示rn rn printf("程序执行完成,请按回车键退出程序!");rn ch = getchar();rn if (ch == '\n')break; //满足条件退出循环rn rn exit(1);rn return 0;rnrn[/code]rnrn想读filename1文件的固定内容,然后写入到filename2文件的固定位置,现在解决不了的问题是写的时候重复写在第一行。。 [code=c]rn if (fgets(buff, 1024, p2) != NULL) //检查能否读取数据rn rn fseek(p2, 32L,0);rn fputs(read_fpxxfpje, p2);rn fseek(p2, 109L, 1);rn rn elsern printf("写入第%d行数据失败", i);rn[/code]rn我觉得应该是上面这个fseek(p2,32L,0)这部分出了问题,每循环一次都把光标移到文件开头位置往后32L的地方了,有没有办法让此句只运行一次?或者有其他办法解决光标的位置问题不?BAIDU了好久找不到办法来求助各位。。
在读写文件时,出现中文问题!(急)
在读写文件时,出现中文乱码问题,怎么办?rn那个有没有好的源程序,非常感谢!
C语言翻译成C#时出现的问题!
以下是最小二乘法曲线拟合的C代码,我想把它翻译成C#语言,但是翻译过程中变量的域很乱,提示q变量未赋值,我主要搞不清楚C中的变量作用域与C#中的区别。以下是原代码和我翻译的代码,请大虾们指点?!rnrnC语言代码:rn #include "math.h"rn void hpir1(x,y,n,a,m,dt)rn //x,y数组,给定数据点的x,y坐标,rn //n,给定数据点的个数rn //a,数组,拟合多项式的m个系数rn //m,拟合多项式的项数,即拟合多项式的最高次数为m-1rn //dt,三项数组,dy(0)拟合多项式与数据点误差的平方和,dt(1)拟合多项式与数据点误差的绝对值之和,dt(2)拟合多项式与数据点误差绝对值的最大值rn int n,m;rn double x[],y[],a[],dt[];rn int i,j,k;rn double z,p,c,g,q,d1,d2,s[20],t[20],b[20];//z,p,c,g,q,d1,d2,s[20],t[20],b[20]rn for (i=0; i<=m-1; i++) a[i]=0.0;rn if (m>n) m=n;rn if (m>20) m=20;rn z=0.0;rn for (i=0; i<=n-1; i++) z=z+x[i]/(1.0*n);rn b[0]=1.0; d1=1.0*n; p=0.0; c=0.0;rn for (i=0; i<=n-1; i++)rn p=p+(x[i]-z); c=c+y[i];rn c=c/d1; p=p/d1;rn a[0]=c*b[0];rn if (m>1)rn t[1]=1.0; t[0]=-p;rn d2=0.0; c=0.0; g=0.0;rn for (i=0; i<=n-1; i++)rn q=x[i]-z-p; d2=d2+q*q;rn c=c+y[i]*q;rn g=g+(x[i]-z)*q*q;rn rn c=c/d2; p=g/d2; q=d2/d1;rn d1=d2;rn a[1]=c*t[1]; a[0]=c*t[0]+a[0];rn rn for (j=2; j<=m-1; j++)rn s[j]=t[j-1];rn s[j-1]=-p*t[j-1]+t[j-2];rn if (j>=3)rn for (k=j-2; k>=1; k--)rn s[k]=-p*t[k]+t[k-1]-q*b[k];rn s[0]=-p*t[0]-q*b[0];rn d2=0.0; c=0.0; g=0.0;rn for (i=0; i<=n-1; i++)rn q=s[j];rn for (k=j-1; k>=0; k--)rn q=q*(x[i]-z)+s[k];rn d2=d2+q*q; c=c+y[i]*q;rn g=g+(x[i]-z)*q*q;rn rn c=c/d2; p=g/d2; q=d2/d1;rn d1=d2;rn a[j]=c*s[j]; t[j]=s[j];rn for (k=j-1; k>=0; k--)rn a[k]=c*s[k]+a[k];rn b[k]=t[k]; t[k]=s[k];rn rn rn dt[0]=0.0; dt[1]=0.0; dt[2]=0.0;rn for (i=0; i<=n-1; i++)rn q=a[m-1];rn for (k=m-2; k>=0; k--)rn q=a[k]+q*(x[i]-z);rn p=q-y[i];rn if (fabs(p)>dt[2]) dt[2]=fabs(p);rn dt[0]=dt[0]+p*p;rn dt[1]=dt[1]+fabs(p);rn rn return;rn rnrnrnC#语言代码:rn private void Linearity(double[] x, double[] y, int n, double[] a, int m, double[] dt)rn rn double z,p,c,g,q,d1,d2;rn double[] s=new double[20];rn double[] t=new double[20];rn double[] b=new double[20];rn for(int i=0; i<=m-1; i++)rn rn a[i]=0.0;rn rn if(m>n)rn rn m=n;rn rn if(m>20)rn rn m=20;rn rn z=0.0;rn for(int i=0;i<=n-1;i++)rn rn z=z+x[i]/(1.0*n);rn rn b[0]=1.0;rn d1=1.0*n;rn p=0.0;rn c=0.0;rn for(int i=0;i1)rn rn t[1]=1.0;rn t[0]=-p;rn d2=0.0;rn c=0.0;rn g=0.0;rn for(int i=0;i=3)rn rn for(int k=j-2;k>=1;k--)rn rn s[k]=-p*t[k]+t[k-1]-q*b[k];rn rn s[0]=-p*t[0]-q*b[0];rn d2=0.0;rn c=0.0;rn g=0.0;rn for (int i=0; i<=n-1; i++)rn rn q=s[j];rn for (int k=j-1; k>=0; k--)rn rn q=q*(x[i]-z)+s[k];rn rn d2=d2+q*q; c=c+y[i]*q;rn g=g+(x[i]-z)*q*q;rn rn c=c/d2; p=g/d2; q=d2/d1;rn d1=d2;rn a[j]=c*s[j]; t[j]=s[j];rn for (int k=j-1; k>=0; k--)rn rn a[k]=c*s[k]+a[k];rn b[k]=t[k]; t[k]=s[k];rn rn rn dt[0]=0.0; dt[1]=0.0; dt[2]=0.0;rn for (int i=0; i<=n-1; i++)rn rn q=a[m-1];rn for (int k=m-2; k>=0; k--)rn rn q=a[k]+q*(x[i]-z);rn rn p=q-y[i];rn if (Math.Abs(p)>dt[2]) rn rn dt[2]=Math.Abs(p);rn rn dt[0]=dt[0]+p*p;rn dt[1]=dt[1]+Math.Abs(p);rn rn return;rn rn rn
C语言之二进制读写文件
来源:我的博客站 OceanicKang |《C语言之二进制读写文件》 一、二进制读写 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) - 读 size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream) - 写 参数 ...
c语言fgets fputs 读写文件
读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针)
C语言读写文件的问题,疑惑中
[code=C/C++]rn#include rn#include rn/*rn* int2binrn*rn* 将一个unsigned char类型的整数(0~255)转化为一个二进制数组rn*rn* @param unsigned char intValue 要转化的整数rn* @param int *binArray 指向二进制数组的指针rn* @param int n 要转化成的二进制数组的元素个数 rn* @return voidrn*/rnvoid int2bin(unsigned char intValue,unsigned char *binArray,int n) rn unsigned char divValue;rn unsigned char modValue;rn int index = n-1;rn //binArray = (char *)malloc(sizeof(char)*8);//函数内部不能申请初址rn //binArray[8] = ;rn divValue = intValue/2;rn modValue = intValue%2;rn binArray[index] = modValue;rn while(divValue!=0) rn modValue = divValue%2;rn binArray[--index] = modValue;rn divValue/=2;rn rnrnrnunsigned char bin2int(char *bin,int binSize) rn int i,j;rn unsigned char intValue = 0;rn rn for(i=binSize-1,j=0;i>=0;i--,j++) rn intValue += (bin[i] * pow(2,j)); rn rn return intValue;rnrnint main() rn FILE *fr,*fw;rn unsigned char dataFromFile[8] = 0;//8*8=64位的数据,每个元素为一个字节rn unsigned char dateEncode[8] = 0;//加密后的字节 rn unsigned char binArray[64] = 0;//64位二进制数据,作为明文rn int i,j;rn /*rn int test = 255;rn char testBin[8] = 0;rn */rn rn if ((fr=fopen("read.txt","rb"))==NULL) rn printf("can not open read.txt for read\n");rn return -1;rn rn if ((fw=fopen("write.txt","wb"))==NULL) rn printf("can not open write.txt for write\n");rn return -2;rn rn rn while (fread(dataFromFile,sizeof(char),8,fr)) rn if (num<8) rn for (i=num;i<8;i++) rn dataFromFile[i] = 0;rn rn rn for (i=0;i<8;i++) rn printf("%d ",dataFromFile[i]);rn int2bin(dataFromFile[i],binArray+i*8,8);rn rn printf("\n");rn for (i=0;i<8;i++) rn dateEncode[i] = bin2int(binArray+i*8,8);rn printf("%d ",dateEncode[i]);rn rn printf("\n");rn fwrite(dateEncode,sizeof(char),8,fw);rn rn rn fclose(fr);rn fclose(fw);rn /*rn int2bin(test,testBin,8);rn for (i=0;i<8;i++) rn printf("%d ",testBin[i]);rn rn printf("\n");rn test = bin2int(testBin,8);rn printf("%d \n",test);rn */rn rn return 0;rnrn[/code]rnrn上面的是源码,本想着,经过我把十进制转化为二进制,再把二进制转化为十进制后,结果回事一样的,但是事与愿违,看了好久,没有发现错误。贴出来和大家一起商量。rn我的思路是这样的,我本想讲文件加密,发现加密的过程出现了问题,第一加密、解密是正确的,以后的内容解密出来后都是乱码。我的单次加解密是正确的。怀疑在读写文件的时候出了问题。于是我把读写文件的内容单独摘了出来,如上面所示。rn文件的操作过程是这样的,先用fread读取8个char类型的数字,然后将每一个数字转化为8个由0或者1组成的数组,最终形成一个8*8=64个元素的数组,然后对这个64位的明文进行加密和解密(在源代码中省略了,源码给出的是没有经过加解密的数据),然后将这个64位的数组进行转化,每8位转化成一个char类型的数字,结果发现转化后的数字跟原来读取出来的数字不一样,特别是在遇到回车符的时候,肯定出错。rnrn
VMS平台下C语言读写文件的问题
刚开始在VMS下编程,发现文件读写和在windows下不太一样,如果用二进制读写,回车换行符会被自动过滤。比如一个文本文件,内容是"aa\nbb\n\ncc\n"rn我的代码如下rnconst int maxLen = 64;rnchar buffer[maxLen];rnrnFILE *fp = fopen("sample.txt", "rb", "ctx=stm", "rfm=var");rnint size = fread(buffer, 1, maxLen, fp);rnfclose(fp);rnrnfp = fopen("output.txt", "wb", "ctx=stm", "rfm=var");rnfwrite(buffer, 1, size, fp);rnfclose(fp);rnrn则output.txt的内容是"aabbcc",\n都没有了rn哪位能给个VMS下的例子吗,能够原样输出到一个文件rn谢谢rn
Linux下C语言读写文件问题,在线等待
文件a中的数据都是十六进制的,rn如:23 a2 6d 4f cd ....rn怎样改写这个文件,rn即,将23 a2 6d 4f cd改写为23 fc 6d 4f cdrn其中的a2 改为了fc
关于读写文件时的问题
请教一个问题,在MFC编程中,利用代码(1)生成了一个txt文件,直接用记事本双击打开,可以看到正常的数据,但当想利用代码(2)将该文件打开时,就发现无法读入数据,如果是利用记事本直接生成一个txt文件,并手动输入数据,则代码(2)可以正常读取数据并处理,不知道这是什么原因造成的,求解答?rnrn代码(1):[code=c] CFile file1;rn file1.Open(L"test.txt",CFile::modeCreate|CFile::modeReadWrite);rn CArchive ar(&file1,CArchive::store);rn if(ar.IsStoring())rn rn ar.WriteString(m_str); rn rn ar.Close();rn file1.Close();rn[/code]rnrn代码(2):[code=c]ifstream fin;rn fin.open(L"test.txt");[/code]
读写文件时遇到的问题
每次把原有文件读出来,写入新的文件时,在新文件的结尾总有一个奇怪的字符。怎么去掉它??rnrn程序如下:rn#include rnrnrnvoid main()rnrn rn FILE *in,*out;rn if((in=fopen("C:/test/file/in.txt","r"))==NULL)rn rn printf("can not open infile\n");rn return;rn rn if((out=fopen("c:/test/file/out.txt","w+"))==NULL)rn rn printf("can not open outfile\n");rn return;rn rnrn while(!feof(in))rn rn fputc(fgetc(in),out);rn rn rn fclose(in);rn fclose(out);rnrn
在读写文件时遇到的问题
我写了如下代码:rnDim DataFile as New FileInfo(FilePath)rnDataFile.Create()rnDataFile.Attributes=..... (这里将文件的属性设为隐藏和只读)rn.rn.rn.rnDataFile.Attributse=..... (这里将文件的属性设为Normal)rnrnDim DFReader as StreamReader=DataFile.OpenTextrn但执行到最后这一句时出错,说是无法访问文件,因为文件正被另一个进程使用rnrn这是为什么?
读写文件时,换行的问题
java.io.FileWriter fw=new java.io.FileWriter(“b.txt",true);rnjava.io.PrintWriter pw=new java.io.PrintWriter(fw);rnjava.io.FileReader fr=new java.io.FileReader("a.txt");rnjava.io.BufferedReader br = new java.io.BufferedReader(fr);rnString inLine = br.readLine();rnwhile (inLine != null) rncontent += inLine; rninLine = br.readLine();rnrnpw.println(content);//把读出的文件内容写进去rnrn上面的程序,实现了把a.txt里面的内容写到了b.txt里面。rnrn但问题是:a.txt文件里面的回车符,它没有写进去,因此b.txt的文件里面没有任何的回车。rnrn请问,该怎么解决??
c的cgi 读写文件问题
刚刚接触cgi,我用c写的rn我做嵌入式上的的开发,因为板子上的二极管用一个数据寄存器,需要一个全局变量来控制几个二极管,有什么方法实现全局变量。rn想到了用文件放数据,请问一下c写cgi怎么读写文件,还是不能,我用fopen,错误了。
c++_2_windows下C语言读写文件时莫名其妙增加的&quot;0x0D&quot;字符
一.前提windows下文件操作分为两种:文本文件模式和二进制模式。1. 文本文件模式下,windows和linux有些许不同,如换行符的表示,windows下为0x0D0x0A两个字节。以文本模式读取文件,会将&quot;0x0D0x0A&quot;双字节转为&quot;0x0A&quot;单字节存储在内存中;以文本模式写文件时,会在每一个&quot;0x0A&quot;前面自动添加一个&quot;0x0D&quot;字节并保存在文件中。2.二进制模式下,并没有换行符的出现...
读写文件 c
可以按行读取文件,并按指定格式输出,大家可以修改成自己需要的,里面是整个源代码
C 读写文件
//读文件的代码 int main(int arg, char *args[]) {     if (arg         return 0;     int fd = open(args[1], O_RDONLY); //只读方式打开文件abc.txt     if (fd == -1)     {         printf("error is %s\n", stre
C#读写文件时出现占用的解决办法
一:错误提示: 二:解决办法: 在打开或者创建文件:FileStream fs = File.Open("TimegMsContent.xaml",FileMode.Open); 更改为共享方式:FileStream fs = File.Open("TimegMsContent.xaml", FileMode.Open, FileAccess.ReadWrite, FileS
linux gcc时出现读写文件的error
m.c:14: error: expected declaration specifiers or ‘...’ before string constantrnm.c:14: error: expected declaration specifiers or ‘...’ before string constantrnm.c:14: error: expected declaration specifiers or ‘...’ before ‘stdin’rnm.c:14: warning: data definition has no type or storage classrnm.c:14: error: conflicting types for ‘freopen’rn/usr/include/stdio.h:255: note: previous declaration of ‘freopen’ was herernm.c:15: error: expected declaration specifiers or ‘...’ before string constantrnm.c:15: error: expected declaration specifiers or ‘...’ before string constantrnm.c:15: error: expected declaration specifiers or ‘...’ before ‘stdout’rnm.c:15: warning: data definition has no type or storage classrnm.c:15: error: conflicting types for ‘freopen’rn/usr/include/stdio.h:255: note: previous declaration of ‘freopen’ was herernrn我的14,15行是rnrnfreopen("sample_data.in","r",stdin);rnfreopen("sample_data.out","w",stdout);rn
C语言文件保存时出现 屯,什么情况
我做的是哈夫曼编码译码程序,其它地方都没有问题,我输入一个字符串 S,构造树以后,进行编码,编码保存在一个[code=C/C++]//////哈夫曼编码结构rntypedef structrnrn char ch; //存放编码的字符rn int length; //编码长度rn char bit[MaxN]; //数组rn int start; //编码的起始下标rn int weight; //字符的权值rnCode;rn[/code]里,[code=C/C++] Code *myHaffCode=(Code*)malloc(sizeof(Code)*Number);[/code]然后将字符串中的字符依次与 myHaffCode里的 ch相匹配,然后将其保存每文件里。[code=C/C++]rn FILE *fp=NULL;rnfp=fopen("haffmanCode.txt","w");rnwhile(*s)rn rn rn for(i=0;irn#includern#includern#include "inputStringAndCount.h"rnrn#define MaxN 100 //编码的最大长度rn#define MaxValue 1000 //权值最大值rnrnrnrn////////定义哈夫曼的结点结构//////rntypedef structrnrn char c;rn int weight; //权值rn int flag; //标记rn int parent; //双亲结点的下标rn int leftChild; //左孩子下标rn int rightChild;//右孩子下标rnHaffNode;rnrn//////哈夫曼编码结构rntypedef structrnrn char ch; //存放编码的字符rn int length; //编码长度rn char bit[MaxN]; //数组rn int start; //编码的起始下标rn int weight; //字符的权值rnCode;rnrnvoid print(HaffNode haffTree[],int n)rnrn int i=0;rn printf("下标\tweight\tleftChild\trightChild\tparent\t flag\n");rn for(i=0;i<2*n-1;i++)rn rn printf(" %-d\t %-d\t %-d\t\t %-d\t\t %-d\t %-d\n",i,haffTree[i].weight,haffTree[i].leftChild,haffTree[i].rightChild,haffTree[i].parent,haffTree[i].flag);rn Sleep(1);rn rn printf("------------------------------------------------------------\n"); rnrnrn/////初始化叶子结点并 构造哈夫曼树rnvoid Haffman(origial realCode[],int n,HaffNode haffTree[])rnrn int i=0,j=0,m1,m2,x1,x2;rn //初始化haffTree.n个叶子结点的二叉树共有2n-1个结点rn for(i=0;i<2*n-1;i++)rn rn if(ich=haffTree[i].c;rn cd->start=n-1; //不等长编码的最后一位为n-1rn cd->weight=haffTree[i].weight;// 取得编码对应的权值rn child=i;rn parent=haffTree[child].parent;rn rnrn //由叶结点向上直到根点结点rn while(parent!=-1)rn rn if(haffTree[parent].leftChild==child)rn cd->bit[cd->start]='0'; //左孩子编码为0rn elsern cd->bit[cd->start]='1'; //右孩子编码为1rn cd->start--;rn child=parent;rn parent=haffTree[child].parent;rn rnrn rn for(j=cd->start+1;jbit[j];//保存每个叶子结点的编码rn rn rn haffCode[i].ch=haffTree[i].c;rn haffCode[i].start=cd->start+1; //保存叶结点编码的起始位 rn haffCode[i].weight=cd->weight; //保存编码对应的权值rn haffCode[i].length=Number-haffCode[i].start; rn rn rn ////////////////////就是在这个地方保存时出错//////////////////////////////////////////////////////////////////////////////////////////////rn while(*s)rn rn rn for(i=0;i
c语言当中出现的问题
在今天做的一道简单的c语言编程 当中,就是输入a,b,c,通过比较这三个数的大小,将其按照从小到大输出,通过定义变量进行交换,然后我就定义了临时变量,可是当我定义的临时变量名都相同时,最后结果出不来,原因就是中间变量不能重复定义,而且中间变量定义多次会浪费空间,所以一开始的时候定义全局变量即可。
Linux系统C语言读写文件总结 (二)
1. 概述 这里所说的是标准I/O库。这里所说标准,是因为接下来介绍的I/O函数由ISO C标准说明并在诸多操作系统上都进行了实现,包括UNIX like OS, Linux, Mac, Windows等。标准I/O库处理了很多细节,例如缓冲区分配,以优化长度执行I/O等。这些处理使得用户不必担心如何使用正确的块长度。 标准I/O库实际上就是在我在上一片博客中所将的基本I/O操作函数的一个封装
【C语言提高48】按照行读写文件
3 内存打包技术(把内存首地址+内存的长度) 按照行读: void main02_gets()//读 { //句柄就是一个内存块的首地址 或者是一个资源的首地址 int i = 0; FILE*fp = NULL;//文件句柄 //char*filename = "c:\\1.txt";//windows下 char*filename2 = "D:/2.txt
【C语言提高47】按照字符读写文件
char*filename = "C:\\1.txt"; //windows下char*filename2 = "D:/2.txt"; //windows和linux下 句柄就是一个内存块的首地址 或者是一个资源的首地址 按字符读: void main02_fgetc()//读 { int i = 0; FILE*fp = NULL;//文件句柄 char
【C语言提高49】按照块读写文件
块方式: 直接把内存数据 写入到文件中 typedef struct Teacher { char name[64]; int age; }Teacher; 读: void main_fread() { int i = 0; int myN; FILE*fp = NULL; char*fileName = "D:/3.data"; Teacher tArray[3];
C语言以数据块的形式读写文件
C语言以数据块的形式读写文件 fgets() 有局限性,每次最多只能从文件中读取一行内容,因为 fgets 遇到换行符就结束读取。如果希望读取多行内容,需要使用 fread 函数;相应地写入函数为 fwrite。 fread() 函数用来从指定文件中读取块数据。所谓块数据,也就是若干个字节的数据,可以是一个字符,可以是一个字符串,可以是多行数据,并没有什么限制。fread() 的原型为: s...
用c语言写的数组排序,读写文件等
自己学C语言时用的,供学习之用,用c语言写的数组排序,读写文件等,
Linux系统C语言读写文件总结 (一)
1. 概述 一般来说,linux系统中对文件的读写操作只需要几个基本函数就可以搞定,包括open, read, write, lseek以及close等函数。这里所说的函数就是所谓的不带缓冲的I/O。这里不带缓冲指的是这些个函数(read, write等)都对应与系统内核的一个系统调用。它们也不是ISO C的组成部分,但是,它们是POSIX.1和Single UNIX Specification
【C++】C语言以字符形式读写文件
 规定从TXT文件中读取的字符长度,到达指定长度就终止。 #include&amp;lt;stdio.h&amp;gt; int main() { FILE *fp; char ch; int i = 0; //如果文件不存在,给出提示并退出 if ((fp = fopen(&quot;D:\\demo.txt&quot;, &quot;rt&quot;)) == NULL) { printf(&quot;Cannot open file,...
C语言以字符形式读写文件
一、字符读取函数 fgetc (一)、函数介绍 fgetc 是 file get char 的缩写,意思是从指定的文件中读取一个字符。函数原型为: int fgetc(FILE* fp) fp 为文件指针。fgetc() 读取成功时返回读取到的字符,读取到文件末尾或读取失败时返回 EOF 在文件内部有一个位置指针,用来指向当前读写到的位置,也就是读写到第几个字节。在打开文件时,该指针总是...
C语言二进制方式读写文件数据
fwrite(buffer, size, count,fp):以二进制的形式向指定的文件中写入若干数据项(由count决定),返回实际写入的数据项数目,各参数含义如下: buffer:一个存储区的起始地址,以该地址开始的存储区的数据即是保存到文件中的数据,可以是数组或指针类型; size:单个数据项的大小(单位:字节); count:数据项数量; fp:FILE类型指针,该指针对应的文件即...
读写文件时的错误检查问题
我用C语言或C++读取文件时,是否需要每一次读写都要检查正确性呢,如果读很多次,岂不是要增加许多代码。大家有没有什么好的建议。rn下面是我的一段代码,显示非常繁琐:rnrn hFile = fopen(pFileName, "rb");rn if(NULL == hFile)rn rn printf("Open file fail!\n");rn return FAIL;rn rnrn size = fgetsize(hFile);rn if(size < 0)rn rn printf("get file size fail!\n");rn fclose(hFile);rn return FAIL;rn rnrn if(0 == size)rn rn printf("void file\n");rn fclose(hFile);rn return SUCCESS;rn rnrn /*for other ebook*/rn if(bufSize > 0)rn size = bufSize;rnrn if(size > TEXTBUF_MAXSIZE)rn rn printf("too large file!\n");rn size = TEXTBUF_MAXSIZE-1;rn rnrn pBuffer = (UINT8*)malloc(size+1);rn if(NULL == pBuffer)rn rn printf("not enough memory! \n");rn return FAIL;rn rnrn RetCount = fread(pBuffer, 1, size, hFile);rn if(RetCount < size)rn rn printf("read file fail\n");rn free(pBuffer);rn fclose(hFile);rn return FAIL;rn rn fclose(hFile);
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数