C语言文件读取写入的问题

我用以下代码进行读写操作一次以后,文件照常写入,可是第二次读取后就有一部分莫名消失
求大神指点

typedef struct Shu{//存储站名序号// 
    char name[10];
    int x;
    struct Shu *next;
}*S,s;
void BC2(S *head){//保存所有站点编号// 
    FILE *f;
    S p=*head;
    f=fopen("Shu.txt","w+");
    while(p!=NULL){
        fwrite(p,sizeof(s),1,f);
        p=p->next;
    }
    fclose(f);
}
struct Shu *Read2(){//读取所有站点编号// 
    FILE *f;
    S head,p;
    head=(S)malloc(sizeof(s));
    head->next=NULL;
    f=fopen("Shu.txt","r+");
    p=head;
    while(1){
        Shu* q;
        q=(S)malloc(sizeof(s));
        fread(q,sizeof(s),1,f);
        if(feof(f)){
            p->next=NULL;
            free(q);
            break;
        }
        q->next=NULL;
        p->next=q;
        p=q;
    }
    fclose(f);
    return head;
}

8个回答

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Shu{//存储站名序号// 
    char name[10];
    int x;
    struct Shu *next;
}*S,s;
typedef struct Zhan{
    char name[10];
    int sum;//存储到下一个站的距离// 
    int x;//标记序号// 
    struct Zhan *next;
}*Z,z;
typedef struct Lu{
    char name[10];
    struct Lu *next;
}*L,l;
bool meue3();
struct Lu *Read1();
struct Shu *Read2();
struct Zhan *Read3(char *);
void BC1(L *);
void BC2(S *);
void BC3(Z *,char *);
void Zhan_add(L *,S *);
void Zhan_xg(L *,S *);
void Zhan_shan(L *);
void put(L *,char *,Z *);
int search(S *,char *);
int main(){
     while(meue3()){
     }
     return 0;
}
int search(S *H2,char *N){//给站点编号//
    int n=0;
    S h2=*H2;
    n=h2->x;
    while(h2!=NULL){
        if(strcmp(N,h2->name)==0){
            return h2->x;
        }
        h2=h2->next;
    }
    n++;
    S h3=(S)malloc(sizeof(s));
    h3->next=NULL;
    strcpy(h3->name,N);
    h3->x=n;
    h3->next=(*H2);
    (*H2)=h3;
    return n;
}
void Zhan_add(L *H1,S *H2){
    char n[10],N[10];
    Z H3=NULL,h3;
    printf("输入要操作的公交线路\n");
    scanf("%s",N);
    put(&(*H1),N,&H3);
    if(H3!=NULL){
        h3=H3;
        while(h3->next->next!=NULL)
        h3=h3->next;//h3指向公交车倒数第二个站点// 
        Z h2=(Z)malloc(sizeof(z));
        h2->next=NULL;
        printf("\n输入要插入的站名\n");
        scanf("%s",&h2->name);
        int i; 
        h2->x=search(&(*H2),h2->name);//给站点编号// 
        h2->sum=0;
        printf("1.设置新的起点 2.设置新的终点 3.插入新站\n");
        scanf("%d",&i);
        switch(i){
            case 1:
                printf("输入%s到%s的距离\n",h2->name,H3->name);
                scanf("%d",&h2->sum);
                h2->next=H3;
                H3=h2;
                break;
            case 2:
                h3=h3->next;
                printf("输入%s到%s的距离\n",h3->name,h2->name);
                scanf("%d",&h3->sum);
                h3->next=h2;
                break;
            case 3:
                Z h4=H3;
                printf("输入要插入的位置的前面一个站点\n");
                scanf("%s",n);
                while(h4!=NULL){
                    if(strcmp(h4->name,n)==0){
                        printf("输入%s站到%s站的距离\n",h4->name,h2->name);
                        scanf("%d",&h4->sum);
                        printf("输入%s站到%s站的距离\n",h2->name,h4->next->name);
                        scanf("%d",&h2->sum);
                        h2->next=h4->next;
                        h4->next=h2;
                        break;
                    }
                    h4=h4->next;
                }
                break;
        }
        BC3(&H3,N);
        printf("成功添加站点\n");
    }
}
void Zhan_xg(L *H1,S *H2){
    char n[10],N[10];
    Z H3=NULL,h3,h4;
    printf("输入要操作的公交线路\n");
    scanf("%s",N);
    put(&(*H1),N,&H3);
    if(H3!=NULL){
        h3=H3;
        while(h3->next->next!=NULL)
        h3=h3->next;//h3指向公交车倒数第二个站点// 
        h4=H3;
        Z h2=(Z)malloc(sizeof(z));
        h2->next=NULL;
        printf("\n输入要修改的站点\n");
        scanf("%s",n);
        printf("输入新的站点名\n");
        scanf("%s",&h2->name);
        h2->sum=0;
        h2->x=search(&(*H2),h2->name);
        if(strcmp(h4->name,n)==0){//修改节点为头节点// 
            printf("输入%s站到%s站的距离\n",h2->name,h4->next->name);
            scanf("%d",&h2->sum);
            h2->next=H3->next;
            H3=h2;
        }
        else if(strcmp(h3->next->name,n)==0){//修改节点为尾节点// 
            printf("输入%s站到%s站的距离\n",h3->name,h2->name);
            scanf("%d",&h3->sum);
            h3->next=h2; 
        }
        else{
            while(h4!=NULL){
                if(strcmp(h4->next->name,n)==0){
                    printf("输入%s站到%s站的距离\n",h4->name,h2->name);
                    scanf("%d",&h4->sum);
                    printf("输入%s站到%s站的距离\n",h2->name,h4->next->next->name);
                    scanf("%d",&h2->sum);
                    h2->next=h4->next->next;
                    h4->next=h2;
                    break;
                }
                h4=h4->next;
            }
        }
        printf("成功修改站点\n");
        BC3(&H3,N);
    }
}
void Zhan_shan(L *H1){
    char n[10],N[10];
    Z H2=NULL,h3,h2;
    printf("输入要操作的公交线路\n");
    scanf("%s",N);
    put(&(*H1),N,&H2);
    if(H2!=NULL){
        h3=H2;
        while(h3->next->next!=NULL)
        h3=h3->next;//h3指向公交车倒数第二个站点// 
        printf("\n输入要删除的站点:\n");
        scanf("%s",n);
        h2=H2;
        if(strcmp(h2->name,n)==0){//删除站点为头节点//
            H2=H2->next;
        }
        else if(strcmp(h3->next->name,n)==0){//删除站点为尾节点//
            h3->next=NULL;
            h3->sum=0;
        }
        else{
            while(h2!=NULL){
                if(strcmp(h2->next->name,n)==0){
                    printf("输入%s站到%s站的距离:\n",h2->name,h2->next->next->name);
                    scanf("%d",&h2->sum);
                    h2->next=h2->next->next;
                    break;
                }
                h2=h2->next;
            }
        }
        BC3(&H2,N);
        printf("成功删除站点\n");
    }
}
bool meue3(){
    bool N=true;
    L H1;
    H1=Read1();
    H1=H1->next;
    S H2;
    H2=Read2();
    H2=H2->next;
    printf("1.站点添加  2.站点修改  3.站点删除  4.返回主页面\n");
    int n;
    scanf("%d",&n);
    switch(n){
        case 1:
            Zhan_add(&H1,&H2);
            BC2(&H2);
            break;
        case 2:
            Zhan_xg(&H1,&H2);
            BC2(&H2);
            break;
        case 3:
            Zhan_shan(&H1);
            break;
        case 4:
            N=false;
            break;
    } 
    BC1(&H1);
    return N;
}
void put(L *H1,char *N,Z *H2){
    L h1=*H1;
    while(h1!=NULL){
        if(strcmp(h1->name,N)==0)
        break;
        h1=h1->next;
    }
    if(h1==NULL)
    printf("没有找到该公交线\n");
    else{
        printf("%s公交路线如下:\n",N);
        (*H2)=Read3(N);
        (*H2)=(*H2)->next;
        Z h3=(*H2),h2=(*H2);
        printf("%s %d %d",h2->name,h2->sum,h2->x);
        h2=h2->next;
        if(h2!=NULL){
            while(h2!=NULL){//输出所有站// 
                printf("->%s %d %d",h2->name,h2->sum,h2->x);
                h2=h2->next;
            }
        }
    }
}
void BC3(Z *head,char *N){//保存公交路线的所有站点// 
    FILE *f;
    Z p=(*head);
    char F[200]="C:\\Users\\许和伟\\Desktop\\";
    strcat(F,N);
    char f1[10]=".txt";
    strcat(F,f1);
    f=fopen(F,"w+");
    while(p!=NULL){
        fwrite(p,sizeof(z),1,f);
        p=p->next;
    }
    fclose(f);
}
struct Zhan *Read3(char *N){//读取公交路线的所有站点// 
    FILE *f;
    char F[200]="C:\\Users\\许和伟\\Desktop\\";
    strcat(F,N);
    char f1[10]=".txt";
    strcat(F,f1);
    f=fopen(F,"r+");
    Z p,head;
    head=(Z)malloc(sizeof(z));
    head->next=NULL;
    p=head;
    while(1){
        Z q;
        q=(Z)malloc(sizeof(z));
        fread(q,sizeof(z),1,f);
        if(feof(f)){
            p->next=NULL;
            break;
        }
        p->next=q;
        p=q;
        p->next=NULL;
    }
    fclose(f);
    return head;
}
void BC2(S *head){//保存所有站点编号// 
    FILE *f;
    S p=*head;
    f=fopen("Shu.txt","w+");
    while(p!=NULL){
        fwrite(p,sizeof(s),1,f);
        p=p->next;
    }
    fclose(f);
}
struct Shu *Read2(){//读取所有站点编号// 
    FILE *f;
    S head,p;
    head=(S)malloc(sizeof(s));
    head->next=NULL;
    f=fopen("Shu.txt","r+");
    p=head;
    while(1){
        Shu* q;
        q=(S)malloc(sizeof(s));
        fread(q,sizeof(s),1,f);
        if(feof(f)){
            p->next=NULL;
            free(q);
            break;
        }
        q->next=NULL;
        p->next=q;
        p=q;
    }
    fclose(f);
    return head;
}
void BC1(L *head){//保存所有公交名字// 
    FILE *f;
    L p=(*head);
    f=fopen("LU.txt","w+");
    while(p!=NULL){
        fwrite(p,sizeof(l),1,f);
        p=p->next;
    }
    fclose(f);
}
struct Lu *Read1(){//读取所有公交名字//
    FILE *f;
    L head,p;
    head=(L)malloc(sizeof(l));
    head->next=NULL;
    f=fopen("LU.txt","r+");
    p=head;
    while(!feof(f)){
        L q;
        q=(L)malloc(sizeof(l));
        fread(q,sizeof(l),1,f);
        if(feof(f)){
            free(q);
            break;
        }
        p->next=q;
        p=q;
        p->next=NULL;
    }
    fclose(f);
    return head;
}

f=fopen("Shu.txt","w+");
->
f=fopen("Shu.txt","a+");

打开一次文件,你一直就只读了文件开始sizeof(s)字节,所以永远读的第一个,写也是一样的道理!希望对你有帮助!

你这个程序不完整,有完整点的吗?我可以帮着调试一下

m0_38051973
红尘滚滚xy 还要写文件的吗?那个读文件的地址你得改一下
一年多之前 回复
m0_38051973
红尘滚滚xy 发了
一年多之前 回复

#include
#include
#include
typedef struct Shu{//存储站名序号//
char name[10];
int x;
struct Shu next;
}*S,s;
typedef struct Zhan{
char name[10];
int sum;//存储到下一个站的距离//
int x;//标记序号//
struct Zhan *next;
}*Z,z;
typedef struct Lu{
char name[10];
struct Lu *next;
}*L,l;
bool meue3();
struct Lu *Read1();
struct Shu *Read2();
struct Zhan *Read3(char *);
void BC1(L *);
void BC2(S *);
void BC3(Z *,char *);
void Zhan_add(L *,S *);
void Zhan_xg(L *,S *);
void Zhan_shan(L *);
void put(L *,char *,Z *);
int search(S *,char *);
int main(){
while(meue3()){
}
return 0;
}
int search(S *H2,char *N){//给站点编号//
int n=0;
S h2=*H2;
n=h2->x;
while(h2!=NULL){
if(strcmp(N,h2->name)==0){
return h2->x;
}
h2=h2->next;
}
n++;
S h3=(S)malloc(sizeof(s));
h3->next=NULL;
strcpy(h3->name,N);
h3->x=n;
h3->next=(*H2);
(*H2)=h3;
return n;
}
void Zhan_add(L *H1,S *H2){
char n[10],N[10];
Z H3=NULL,h3;
printf("输入要操作的公交线路\n");
scanf("%s",N);
put(&(*H1),N,&H3);
if(H3!=NULL){
h3=H3;
while(h3->next->next!=NULL)
h3=h3->next;//h3指向公交车倒数第二个站点//
Z h2=(Z)malloc(sizeof(z));
h2->next=NULL;
printf("\n输入要插入的站名\n");
scanf("%s",&h2->name);
int i;
h2->x=search(&(*H2),h2->name);//给站点编号//
h2->sum=0;
printf("1.设置新的起点 2.设置新的终点 3.插入新站\n");
scanf("%d",&i);
switch(i){
case 1:
printf("输入%s到%s的距离\n",h2->name,H3->name);
scanf("%d",&h2->sum);
h2->next=H3;
H3=h2;
break;
case 2:
h3=h3->next;
printf("输入%s到%s的距离\n",h3->name,h2->name);
scanf("%d",&h3->sum);
h3->next=h2;
break;
case 3:
Z h4=H3;
printf("输入要插入的位置的前面一个站点\n");
scanf("%s",n);
while(h4!=NULL){
if(strcmp(h4->name,n)==0){
printf("输入%s站到%s站的距离\n",h4->name,h2->name);
scanf("%d",&h4->sum);
printf("输入%s站到%s站的距离\n",h2->name,h4->next->name);
scanf("%d",&h2->sum);
h2->next=h4->next;
h4->next=h2;
break;
}
h4=h4->next;
}
break;
}
BC3(&H3,N);
printf("成功添加站点\n");
}
}
void Zhan_xg(L *H1,S *H2){
char n[10],N[10];
Z H3=NULL,h3,h4;
printf("输入要操作的公交线路\n");
scanf("%s",N);
put(&(*H1),N,&H3);
if(H3!=NULL){
h3=H3;
while(h3->next->next!=NULL)
h3=h3->next;//h3指向公交车倒数第二个站点//
h4=H3;
Z h2=(Z)malloc(sizeof(z));
h2->next=NULL;
printf("\n输入要修改的站点\n");
scanf("%s",n);
printf("输入新的站点名\n");
scanf("%s",&h2->name);
h2->sum=0;
h2->x=search(&(*H2),h2->name);
if(strcmp(h4->name,n)==0){//修改节点为头节点//
printf("输入%s站到%s站的距离\n",h2->name,h4->next->name);
scanf("%d",&h2->sum);
h2->next=H3->next;
H3=h2;
}
else if(strcmp(h3->next->name,n)==0){//修改节点为尾节点//
printf("输入%s站到%s站的距离\n",h3->name,h2->name);
scanf("%d",&h3->sum);
h3->next=h2;
}
else{
while(h4!=NULL){
if(strcmp(h4->next->name,n)==0){
printf("输入%s站到%s站的距离\n",h4->name,h2->name);
scanf("%d",&h4->sum);
printf("输入%s站到%s站的距离\n",h2->name,h4->next->next->name);
scanf("%d",&h2->sum);
h2->next=h4->next->next;
h4->next=h2;
break;
}
h4=h4->next;
}
}
printf("成功修改站点\n");
BC3(&H3,N);
}
}
void Zhan_shan(L *H1){
char n[10],N[10];
Z H2=NULL,h3,h2;
printf("输入要操作的公交线路\n");
scanf("%s",N);
put(&(*H1),N,&H2);
if(H2!=NULL){
h3=H2;
while(h3->next->next!=NULL)
h3=h3->next;//h3指向公交车倒数第二个站点//
printf("\n输入要删除的站点:\n");
scanf("%s",n);
h2=H2;
if(strcmp(h2->name,n)==0){//删除站点为头节点//
H2=H2->next;
}
else if(strcmp(h3->next->name,n)==0){//删除站点为尾节点//
h3->next=NULL;
h3->sum=0;
}
else{
while(h2!=NULL){
if(strcmp(h2->next->name,n)==0){
printf("输入%s站到%s站的距离:\n",h2->name,h2->next->next->name);
scanf("%d",&h2->sum);
h2->next=h2->next->next;
break;
}
h2=h2->next;
}
}
BC3(&H2,N);
printf("成功删除站点\n");
}
}
bool meue3(){
bool N=true;
L H1;
H1=Read1();
H1=H1->next;
S H2;
H2=Read2();
H2=H2->next;
printf("1.站点添加 2.站点修改 3.站点删除 4.返回主页面\n");
int n;
scanf("%d",&n);
switch(n){
case 1:
Zhan_add(&H1,&H2);
BC2(&H2);
break;
case 2:
Zhan_xg(&H1,&H2);
BC2(&H2);
break;
case 3:
Zhan_shan(&H1);
break;
case 4:
N=false;
break;
}
BC1(&H1);
return N;
}
void put(L *H1,char *N,Z *H2){
L h1=*H1;
while(h1!=NULL){
if(strcmp(h1->name,N)==0)
break;
h1=h1->next;
}
if(h1==NULL)
printf("没有找到该公交线\n");
else{
printf("%s公交路线如下:\n",N);
(*H2)=Read3(N);
(*H2)=(*H2)->next;
Z h3=(*H2),h2=(*H2);
printf("%s %d %d",h2->name,h2->sum,h2->x);
h2=h2->next;
if(h2!=NULL){
while(h2!=NULL){//输出所有站//
printf("->%s %d %d",h2->name,h2->sum,h2->x);
h2=h2->next;
}
}
}
}
void BC3(Z *head,char *N){//保存公交路线的所有站点//
FILE *f;
Z p=(*head);
char F[200]="C:\Users\许和伟\Desktop\";
strcat(F,N);
char f1[10]=".txt";
strcat(F,f1);
f=fopen(F,"w+");
while(p!=NULL){
fwrite(p,sizeof(z),1,f);
p=p->next;
}
fclose(f);
}
struct Zhan *Read3(char *N){//读取公交路线的所有站点//
FILE *f;
char F[200]="C:\Users\许和伟\Desktop\";
strcat(F,N);
char f1[10]=".txt";
strcat(F,f1);
f=fopen(F,"r+");
Z p,head;
head=(Z)malloc(sizeof(z));
head->next=NULL;
p=head;
while(1){
Z q;
q=(Z)malloc(sizeof(z));
fread(q,sizeof(z),1,f);
if(feof(f)){
p->next=NULL;
break;
}
p->next=q;
p=q;
p->next=NULL;
}
fclose(f);
return head;
}
void BC2(S *head){//保存所有站点编号//
FILE *f;
S p=*head;
f=fopen("Shu.txt","w+");
while(p!=NULL){
fwrite(p,sizeof(s),1,f);
p=p->next;
}
fclose(f);
}
struct Shu *Read2(){//读取所有站点编号//
FILE *f;
S head,p;
head=(S)malloc(sizeof(s));
head->next=NULL;
f=fopen("Shu.txt","r+");
p=head;
while(1){
Shu
q;
q=(S)malloc(sizeof(s));
fread(q,sizeof(s),1,f);
if(feof(f)){
p->next=NULL;
free(q);
break;
}
q->next=NULL;
p->next=q;
p=q;
}
fclose(f);
return head;
}
void BC1(L *head){//保存所有公交名字//
FILE *f;
L p=(*head);
f=fopen("LU.txt","w+");
while(p!=NULL){
fwrite(p,sizeof(l),1,f);
p=p->next;
}
fclose(f);
}
struct Lu *Read1(){//读取所有公交名字//
FILE *f;
L head,p;
head=(L)malloc(sizeof(l));
head->next=NULL;
f=fopen("LU.txt","r+");
p=head;
while(!feof(f)){
L q;
q=(L)malloc(sizeof(l));
fread(q,sizeof(l),1,f);
if(feof(f)){
free(q);
break;
}
p->next=q;
p=q;
p->next=NULL;
}
fclose(f);
return head;
}

#include
#include
#include
typedef struct Shu{//存储站名序号//
char name[10];
int x;
struct Shu next;
}*S,s;
typedef struct Zhan{
char name[10];
int sum;//存储到下一个站的距离//
int x;//标记序号//
struct Zhan *next;
}*Z,z;
typedef struct Lu{
char name[10];
struct Lu *next;
}*L,l;
bool meue3();
struct Lu *Read1();
struct Shu *Read2();
struct Zhan *Read3(char *);
void BC1(L *);
void BC2(S *);
void BC3(Z *,char *);
void Zhan_add(L *,S *);
void Zhan_xg(L *,S *);
void Zhan_shan(L *);
void put(L *,char *,Z *);
int search(S *,char *);
int main(){
while(meue3()){
}
return 0;
}
int search(S *H2,char *N){//给站点编号//
int n=0;
S h2=*H2;
n=h2->x;
while(h2!=NULL){
if(strcmp(N,h2->name)==0){
return h2->x;
}
h2=h2->next;
}
n++;
S h3=(S)malloc(sizeof(s));
h3->next=NULL;
strcpy(h3->name,N);
h3->x=n;
h3->next=(*H2);
(*H2)=h3;
return n;
}
void Zhan_add(L *H1,S *H2){
char n[10],N[10];
Z H3=NULL,h3;
printf("输入要操作的公交线路\n");
scanf("%s",N);
put(&(*H1),N,&H3);
if(H3!=NULL){
h3=H3;
while(h3->next->next!=NULL)
h3=h3->next;//h3指向公交车倒数第二个站点//
Z h2=(Z)malloc(sizeof(z));
h2->next=NULL;
printf("\n输入要插入的站名\n");
scanf("%s",&h2->name);
int i;
h2->x=search(&(*H2),h2->name);//给站点编号//
h2->sum=0;
printf("1.设置新的起点 2.设置新的终点 3.插入新站\n");
scanf("%d",&i);
switch(i){
case 1:
printf("输入%s到%s的距离\n",h2->name,H3->name);
scanf("%d",&h2->sum);
h2->next=H3;
H3=h2;
break;
case 2:
h3=h3->next;
printf("输入%s到%s的距离\n",h3->name,h2->name);
scanf("%d",&h3->sum);
h3->next=h2;
break;
case 3:
Z h4=H3;
printf("输入要插入的位置的前面一个站点\n");
scanf("%s",n);
while(h4!=NULL){
if(strcmp(h4->name,n)==0){
printf("输入%s站到%s站的距离\n",h4->name,h2->name);
scanf("%d",&h4->sum);
printf("输入%s站到%s站的距离\n",h2->name,h4->next->name);
scanf("%d",&h2->sum);
h2->next=h4->next;
h4->next=h2;
break;
}
h4=h4->next;
}
break;
}
BC3(&H3,N);
printf("成功添加站点\n");
}
}
void Zhan_xg(L *H1,S *H2){
char n[10],N[10];
Z H3=NULL,h3,h4;
printf("输入要操作的公交线路\n");
scanf("%s",N);
put(&(*H1),N,&H3);
if(H3!=NULL){
h3=H3;
while(h3->next->next!=NULL)
h3=h3->next;//h3指向公交车倒数第二个站点//
h4=H3;
Z h2=(Z)malloc(sizeof(z));
h2->next=NULL;
printf("\n输入要修改的站点\n");
scanf("%s",n);
printf("输入新的站点名\n");
scanf("%s",&h2->name);
h2->sum=0;
h2->x=search(&(*H2),h2->name);
if(strcmp(h4->name,n)==0){//修改节点为头节点//
printf("输入%s站到%s站的距离\n",h2->name,h4->next->name);
scanf("%d",&h2->sum);
h2->next=H3->next;
H3=h2;
}
else if(strcmp(h3->next->name,n)==0){//修改节点为尾节点//
printf("输入%s站到%s站的距离\n",h3->name,h2->name);
scanf("%d",&h3->sum);
h3->next=h2;
}
else{
while(h4!=NULL){
if(strcmp(h4->next->name,n)==0){
printf("输入%s站到%s站的距离\n",h4->name,h2->name);
scanf("%d",&h4->sum);
printf("输入%s站到%s站的距离\n",h2->name,h4->next->next->name);
scanf("%d",&h2->sum);
h2->next=h4->next->next;
h4->next=h2;
break;
}
h4=h4->next;
}
}
printf("成功修改站点\n");
BC3(&H3,N);
}
}
void Zhan_shan(L *H1){
char n[10],N[10];
Z H2=NULL,h3,h2;
printf("输入要操作的公交线路\n");
scanf("%s",N);
put(&(*H1),N,&H2);
if(H2!=NULL){
h3=H2;
while(h3->next->next!=NULL)
h3=h3->next;//h3指向公交车倒数第二个站点//
printf("\n输入要删除的站点:\n");
scanf("%s",n);
h2=H2;
if(strcmp(h2->name,n)==0){//删除站点为头节点//
H2=H2->next;
}
else if(strcmp(h3->next->name,n)==0){//删除站点为尾节点//
h3->next=NULL;
h3->sum=0;
}
else{
while(h2!=NULL){
if(strcmp(h2->next->name,n)==0){
printf("输入%s站到%s站的距离:\n",h2->name,h2->next->next->name);
scanf("%d",&h2->sum);
h2->next=h2->next->next;
break;
}
h2=h2->next;
}
}
BC3(&H2,N);
printf("成功删除站点\n");
}
}
bool meue3(){
bool N=true;
L H1;
H1=Read1();
H1=H1->next;
S H2;
H2=Read2();
H2=H2->next;
printf("1.站点添加 2.站点修改 3.站点删除 4.返回主页面\n");
int n;
scanf("%d",&n);
switch(n){
case 1:
Zhan_add(&H1,&H2);
BC2(&H2);
break;
case 2:
Zhan_xg(&H1,&H2);
BC2(&H2);
break;
case 3:
Zhan_shan(&H1);
break;
case 4:
N=false;
break;
}
BC1(&H1);
return N;
}
void put(L *H1,char *N,Z *H2){
L h1=*H1;
while(h1!=NULL){
if(strcmp(h1->name,N)==0)
break;
h1=h1->next;
}
if(h1==NULL)
printf("没有找到该公交线\n");
else{
printf("%s公交路线如下:\n",N);
(*H2)=Read3(N);
(*H2)=(*H2)->next;
Z h3=(*H2),h2=(*H2);
printf("%s %d %d",h2->name,h2->sum,h2->x);
h2=h2->next;
if(h2!=NULL){
while(h2!=NULL){//输出所有站//
printf("->%s %d %d",h2->name,h2->sum,h2->x);
h2=h2->next;
}
}
}
}
void BC3(Z *head,char *N){//保存公交路线的所有站点//
FILE *f;
Z p=(*head);
char F[200]="C:\Users\许和伟\Desktop\";
strcat(F,N);
char f1[10]=".txt";
strcat(F,f1);
f=fopen(F,"w+");
while(p!=NULL){
fwrite(p,sizeof(z),1,f);
p=p->next;
}
fclose(f);
}
struct Zhan *Read3(char *N){//读取公交路线的所有站点//
FILE *f;
char F[200]="C:\Users\许和伟\Desktop\";
strcat(F,N);
char f1[10]=".txt";
strcat(F,f1);
f=fopen(F,"r+");
Z p,head;
head=(Z)malloc(sizeof(z));
head->next=NULL;
p=head;
while(1){
Z q;
q=(Z)malloc(sizeof(z));
fread(q,sizeof(z),1,f);
if(feof(f)){
p->next=NULL;
break;
}
p->next=q;
p=q;
p->next=NULL;
}
fclose(f);
return head;
}
void BC2(S *head){//保存所有站点编号//
FILE *f;
S p=*head;
f=fopen("Shu.txt","w+");
while(p!=NULL){
fwrite(p,sizeof(s),1,f);
p=p->next;
}
fclose(f);
}
struct Shu *Read2(){//读取所有站点编号//
FILE *f;
S head,p;
head=(S)malloc(sizeof(s));
head->next=NULL;
f=fopen("Shu.txt","r+");

m0_38051973
红尘滚滚xy 那个地址的双线和单线有什么区别吗
一年多之前 回复

这个问题其实很简单,我直接上代码吧,记得给一个分
//获取文件指针
FILE *pFile = fopen("1.txt", //打开文件的名称
"w"); // 文件打开方式 如果原来有内容也会销毁
//向文件写数据
fwrite ("hello", //要输入的文字
1,//文字每一项的大小 以为这里是字符型的 就设置为1 如果是汉字就设置为4
strlog("hello"), //单元个数 我们也可以直接写5
pFile //我们刚刚获得到的地址
);
//fclose(pFile); //告诉系统我们文件写完了数据更新,但是我们要要重新打开才能在写
fflush(pFile); //数据刷新 数据立即更新

运行的时候没有出错的话就是sizeof(s)出错了,改一下就好

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c语言文件读取与写入
fopen的介绍转自百度百科:https://baike.baidu.com/item/fopen/10942321?fr=aladdin 函数原型: FILE * fopen(const char * path, const char * mode); 相关函数:open, fclose, fopen_s, _wfopen 返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打...
C语言的文件读取与写入操作
学了一年的C语言了,现在回过头来做一下总结。并且博客开了挺长一段时间却没有谢什么实际的东西。现在做下总结,对之后的学习帮助应该挺大的。与大家共勉! 现在,我先来介绍一下C语言的文件读取与写入的原理和具体操作方法。 C语言文件读取与写入是通过将文件看成一个字符序列进行读入和写出的。所以读取与写入文件就用到了指针,而这个指针是一个特殊的指针,我们称为文件指针。 指针名称是
c语言文件读取问题
[code=C/C++]#includern#includernvoid main()rnrn FILE *fp;rnchar *cha,chb[512];rnchar name[20];rncha=NULL;rnprintf("enter the file name please!\n");rnscanf("%s",name);rnif ((fp=fopen(name,"r"))==NULL)rnprintf("can not open file!\n");rnif(!feof) rnrn fgets(chb,512,fp);rn strcat(cha,chb); //当然我知道可以不用接cha到后面直接在循环中输出chb,但是为什么这样就不行吗?rnrnrnprintf("a=%s\n",*cha);rn[/code]我的思想是设定chb【512】做缓冲,然后一个一个练到cha后面,cha一开始是空字符,最后输出cha,也就是多次读入,一次性输出。为什么出错呢?
c语言文件读取问题??
c语言中能不能把图形文件(.gif .jpeg)就像读txt文件一样读到buf中呢??不按图形文件格式读取,因为我只需要加密解密,格式不重要!
【C语言】文件读取写入信息(二进制方式)
文件读取写入信息(二进制方式)
C语言文件读取并写入链表
C语言没啥要逼逼的,直接上代码,用心体会 #include "stdio.h" #include "stdlib.h" /***************************** 链表节点结构体 ****************************/ typedef struct link_node { int ID; char name; int Yuwen; int ...
C语言有关文件读取的问题
#includern#includernint main(char *argv)rn FILE *fp1;rn char ch1;rn if((fp1=fopen(&argv,"r+"))==NULL)rn printf("flie %s cannot be opened\n",argv);rn exit(0);rn rn while(ch1!=EOF)rn putchar(ch1);rn ch1=fgetc(fp1);rn rn fclose(fp1);rn return(1);rnrn我想在运行程序将文件路径是作为参数传入程序,可现在就是不行以运行程序就出错,请高手帮忙解决一下。谢谢!!
C语言的关于文件读取的问题
原题是:输入一个正整数n,然后读取n个正整数,最后再读取一个正整数m,统计有多少整数小于m。代码如下,rnint main()rn rn FILE *fin,*fout;rn fin = fopen("data.in","rb");rn fout = fopen("data.out","wb");rn int n,x,m,i,count = 0;rn fscanf(fin,"d",&n);rn printf("%d\n",n);rn i = 1L;rn while (feof (fin) == 0)rn fseek(fin,i,0);rn fscanf(fin,"d",&x);rn if (x < m)rn count++;rn rn i++;rn rn printf("%d\n",count);rn fclose(fin);rn fclose(fout);rn return 0;rn rn但是会陷入死循环,求大神解答
C语言有关文件读取问题
读取一个txt文件,其中有三段以-99为结束标志的数据 请问 怎么表达呀呀rn eg. 12 3678 2378rn 17 789 78978rn -99 0 0rn 72 889 87rn 8 870 890rn -99 789 789rn分别读取-99之前的数据rn 哎 大概是这样子 我也表述不清楚了 求助
电影院售票系统 c语言制作 请教 文件读取 写入问题
先放上代码rn[code=c]#includern#includern#includern#includernrnvoid new_mv();rnvoid save_mv();rnint judge();rnvoid read_data();rnvoid show();rnvoid menu_print();rnvoid guanli_menu();rnvoid guanli();rnvoid youke_menu();rnvoid youke();rnvoid buy_mv();rnvoid leave_mv();rnvoid add_mv();rnrntypedef struct moviernrn char name[20];rn int money;rn int ticket;rn struct movie *next;rnmv;rnmv * head = NULL;rnrnint main()rnrn int k = 1;rn int switch_count=0;rn dorn rn menu_print();rn printf("\t\t\t请选择<0-3>:");rn scanf("%d",&switch_count);rn switch(switch_count)//分支里面的函数用处理过后的函数,用 judge与其他函数组合出来的函数。 rn rn case 0:rn k = 0;rn break;rn case 1:rn system("cls");rn guanli();rn break;rn case 2:rn if(head == NULL)rn rn read_data();rn rn system("cls");rn youke();rn break;rn default:;rn rn system("cls");rn while(k != 0);rn return 0;rnrnrnvoid new_mv()rnrn int k = 0;rn mv * add, * prev;rn dorn rn rn add = (mv *)malloc(sizeof(mv));rn rn printf("请输入影片:\n");rn scanf("%s",add->name);rn printf("价格:\n");rn scanf("%d",&add->money);rn printf("票数:\n");rn scanf("%d",&add->ticket);rn rn if(head == NULL)rn rn head = add;rn rn elsern rn prev->next = add;rn rn add->next = NULL;rn prev = add;rn rn rn k = judge(); rn while(k == 1);rnrnvoid save_mv()rnrn FILE *fp;rn mv * temp;rn temp = head;rn rn rn if((fp=fopen("mv.txt","wb"))==NULL)rn rn printf("open file error!\n");rn getchar();rn exit(0);rn rn rn dorn rn fwrite(temp,sizeof(mv),1,fp);rn printf("%d\n",temp);//测试使用,输出地址 rn temp = temp->next;rn rn while(temp);rn rn head = NULL; rn fclose(fp);rnrnrnint judge()rnrn char c;rn int a=1;rn dorn rn getchar();rn printf("continue?");rn scanf("%c",&c);rn if(c=='y')rn rn a=1;rn break;//跳出判断函数。继续执行外层循环。 rn rn elsern if(c=='n')rn rn a=0;rn break;//使外层do while 循环终止 rn rn elsern rn a=1;//继续循环判断函数; rn rn while(a==1);rn return a;rnrnrnvoid read_data()rnrn FILE * fp;rn mv * temp;rn mv * prev;rn rn if((fp=fopen("mv.txt","r"))==NULL)rn rn printf("open file error!\n");rn getchar();rn exit(0);rn rn while(!feof(fp))rn rn temp = (mv *)malloc(sizeof(mv));rn if(head == NULL)rn rn head = temp;rn rn elsern rn prev->next = temp;rn rn fread(temp,sizeof(mv),1,fp);rn temp->next = NULL;rn prev = temp;rn rn rnrnrnvoid show()//展示rnrn mv *temp;rn temp = head;rn while(temp->next)rn rn printf("name:%s,noney:%d\n",temp->name,temp->money);rn temp=temp->next;rn rnrnrnvoid menu_print()rnrn printf("*************************欢迎来到逗逼电影俱乐部**************************\n");rn printf("|\t\t\t\t请输入选项\t\t\t\t|\n");rn printf("|\t\t\t\t0.退出\t\t\t\t\t|\n");rn printf("|\t\t\t\t1.管理员登录\t\t\t\t|\n");rn printf("|\t\t\t\t2.用户登录\t\t\t\t|\n");rn printf("*************************************************************************\n");rnrnrnvoid guanli_menu()rnrn printf("*************************欢迎来到逗逼电影俱乐部**************************\n");rn printf("|\t\t\t\t请输入选项\t\t\t\t|\n");rn printf("|\t\t\t\t0.退出\t\t\t\t\t|\n");rn printf("|\t\t\t\t1.新建电影信息\t\t\t\t|\n");rn printf("|\t\t\t\t2.增加电影信息\t\t\t\t|\n");rn printf("|\t\t\t\t3.删除电影信息\t\t\t\t|\n");rn printf("*************************************************************************\n");rnrnrnvoid guanli()rnrn int k = 1;rn int switch_count=0;rn dorn rn guanli_menu();rn printf("\t\t\t请选择<0-3>:");rn scanf("%d",&switch_count);rn switch(switch_count)rn rn rn case 0:rn k = 0;rn break;rn case 1:rn new_mv();rn save_mv();rn break;rn case 2:rn add_mv();rn break;rn default:;rn rn rn while(k != 0);rnrnrnvoid youke_menu()rnrn printf("*************************欢迎来到逗逼电影俱乐部**************************\n");rn printf("|\t\t\t\t请输入选项\t\t\t\t|\n");rn printf("|\t\t\t\t0.退出\t\t\t\t\t|\n");rn printf("|\t\t\t\t1.查询当前电影\t\t\t\t|\n");rn printf("|\t\t\t\t2.购票\t\t\t\t\t|\n");rn printf("|\t\t\t\t3.退票\t\t\t\t\t|\n");rn printf("*************************************************************************\n");rnrnrnvoid youke()rnrn int k = 1;rn int switch_count=0;rn dorn rn youke_menu();rn printf("\t\t\t请选择<0-3>:");rn scanf("%d",&switch_count);rn switch(switch_count)rn rn rn case 0:rn k = 0;rn break;rn case 1:rn show();rn head = NULL;rn break;rn case 2:buy_mv(); rn break;rn default:leave_mv();rn rn rn while(k != 0);rnrnrnvoid buy_mv()rnrn int flag = 0;rn char a[20] = 0;rn mv *temp;rn show(); rn temp = head;rn printf("请输入你想买的电影的名字:");rn scanf("%s",a);rn while(temp)rn rn if(strcmp(temp->name,a) == 0)rn rn flag = 1;rn printf("已经找到\n");rn if(judge() == 0)rn rn break;rn rn temp->ticket--;rn printf("余票:%d",temp->ticket);rn break;rn rn elsern rn temp = temp -> next;rn rn rn if(flag == 0)rn rn printf("没有找到你所找的电影:\n");rn rn rn Sleep(1000);rn system("cls"); rnrnrnrnvoid leave_mv()rnrn int flag=0;rn char a[20];rn mv *temp;rn show();rn temp=head;rn printf("请输入你想退的票:");rn scanf("%s",a);rn while(temp)rn rn if(strcmp(temp->name,a) == 0)rn rn flag = 1;rn printf("已经找到\n");rn judge();rn temp->ticket++;rn printf("余票:%d",temp->ticket);rn break;rn rn elsern rn temp = temp -> next;rn rn rn if(flag == 0)rn rn printf("没有找到你所找的电影:\n");rn rn rn Sleep(2000);rn system("cls"); rnrnrnvoid add_mv()rnrnrn int k = 0;rn mv * add, * prev;rn rn read_data();rn rn prev = head;rn dorn rn rn add = (mv *)malloc(sizeof(mv));rn rn printf("请输入影片:\n");rn scanf("%s",add->name);rn printf("价格:\n");rn scanf("%d",&add->money);rn printf("票数:\n");rn scanf("%d",&add->ticket);rn rnrn while(prev->next)rn rn printf("name:%s,noney:%d\n",prev->name,prev->money);rn prev = prev->next;rn rn prev = add;rn prev->next = NULL; rn rn k = judge(); rn while(k == 1);rn save_mv();rn head = NULL;rnrn[/code]rnrnrnrn个人感觉 read_data()函数是有问题的。show()函数为了展现,所以做出了修改,但是后面add_mv();调用read_data();函数的时候总是有问题。怎么也处理不好。还请论坛里的老师们多帮忙。
关于文件读取和写入的问题
我想测试下一个登录的函数,如果初始文件不存在,就建立一个文件,把初始帐号密码写入。如果有文件就一直读取,知道帐号密码匹配,我的代码当帐号密码正确时能够成功,如果帐号密码不正确,它就一直在最后那里循环,跳不出来,可是那里我明明加了判断是否到文件尾的函数。代码如下[code=C/C++]#include rn#include rnrnrnstruct loginrn int account;rn int password;rn;rnrnrnrnint main()rn long acc;rn long pass;rn FILE *fp;rn login temp;rn scanf("%ld",&acc);rn scanf("%ld",&pass);rn if((fp=fopen("login.dat","rb"))==NULL)rn fclose(fp);rn fp=fopen("login.dat","wb");rn login super;rn super.account=123456;//初始帐号rn super.password=111;//初始密码rn fwrite(&super,sizeof(login),1,fp);rn fclose(fp);rn fp=fopen("login.dat","rb");rn rn rn fread(&temp,sizeof(login),1,fp);rn while(temp.account!=acc||temp.password!=pass)rn fread(&temp,sizeof(login),1,fp);rn if(!feof(fp))rn printf("帐号或密码错误!");rn return 0;rn rn rn printf("登录成功");rn return 1;rn[/code]
delphi文件读取和写入问题
我想往某股票.day文件中增添数据,首先说明.day文件的数据结构rn每个数据块40个字节。rn每个文件一开头就是日数据,不像有些股软数据开始有一些格式。rn每日数据一共为40个字节。rn第一个四字节:日期,转换为十进制即可。rn第二个四字节:开盘,除以1000rn第三个四字节:最高,除以1000rn第四个四字节:最低,除以1000rn第五个四字节:收盘,除以1000rn第六个四字节:成交额,除以10rn第七个四字节:成交量rn第八个四字节:散户线rn第九个四字节:似乎无用rn第十个四字节:似乎与散户线有关rn下边以601988为例说明一下:rn打开文件601988.day,看到最后四十个字节为:rnEC 1A 32 01 C6 0C 00 00rnDA 0C 00 00 BC 0C 00 00 D0 0C 00 00 A9 5D 01 00rn02 2C 04 00 D3 00 00 00 00 00 00 00 00 00 00 00rn第一个四字节:EC 1A 32 01,十六进制为0x01321AEC,转换为十进制就是20060908,是日期rn第二个四字节:C6 0C 00 00,十六进制为0x0CC6,转换为十进制就是3270,除以1000为3.27,是开盘价rn第三个四字节:DA 0C 00 00,十六进制为0x0CDA,转换为十进制就是3290,除以1000为3.29,是最高价rn第四个四字节:BC 0C 00 00,十六进制为0x0CBC,转换为十进制就是3260,除以1000为3.26,是最低价rn第五个四字节:D0 0C 00 00,十六进制为0x0CD0,转换为十进制就是3280,除以1000为3.28,是收盘价rn第六个四字节:A9 5D 01 00,十六进制为0x00015DA9,转换为十进制就是89513,除以10为8951.3,是成交额rn第七个四字节:02 2C 04 00,十六进制为0x00042C02,转换为十进制就是273410,是成交量rn第八个四字节:D3 00 00 00,十六进制为0xD3,转换为十进制为211,散户线rn[color=#FF0000]现在我想做的是想增加一天的数据写入.day文件中rn比如 20130726,4.25,4.26,4.23,4.24,256894,4568914[/color]中间是用逗号隔开的,怎样把数据加到.day文件中去呢?然后可以正常读出,求各位大神帮忙。
文件读取和写入 问题
为什么写文件时最后如果不关闭文件流的话将不会写入内容???非常感谢!!!rnrn这是我的源码:若去掉(bw.close();和fw.close();语句将不能写入内容)rnrnpackage com.inspur;rnrnimport java.io.BufferedReader;rnimport java.io.BufferedWriter;rnimport java.io.File;rnimport java.io.FileReader;rnimport java.io.FileWriter;rnimport java.io.IOException;rnimport java.text.SimpleDateFormat;rnrn/**rn * rn * 作者: 柯连德 日期: 2007-8-31 版本: 0.1 文件名:UpdateFileForBufferChar.javarn */rnpublic class UpdateFileForBufferChar rnrn /**rn * 功能:rn * rn * @param argsrn * @throws IOExceptionrn */rn public static void main(String[] args) throws IOException rn String fname = "source.txt";rn String child = "copy";rn new UpdateFileForBufferChar().update(fname, child);rn rnrn private void update(String fname, String child) throws IOException rnrn File f1 = new File(fname);rn File childdir = new File(child);rn if (f1.exists()) rn if (!childdir.exists()) rn System.out.println(childdir.getName() + " was created!");rn childdir.mkdir();rn rn File f2 = new File(childdir, fname);rn if (!f2.exists() || f2.exists()rn && f1.lastModified() > f2.lastModified()) rn copy(f1, f2);rn rn if (f2.length() == 0) rn System.out.println("f2 is empty");rn else rn getinfo(f1);rn getinfo(childdir);rn rnrn else rn System.out.println(f1.getName() + " is not found!");rn rn rnrn private static void copy(File f1, File f2) throws IOException rnrn// if (!f2.exists()) rn// f2.createNewFile();rn// rn FileWriter fw = new FileWriter(f2);rn BufferedReader br = new BufferedReader(new FileReader(f1));rn BufferedWriter bw = new BufferedWriter(fw);rn String text;rn text = br.readLine();rn while (text != null) rn bw.write(text+"\r\n");rn System.out.println(text);rn text = br.readLine();rnrn rn br.close();rn bw.close();rn fw.close();rn rnrn private void getinfo(File f) rn SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd H:mm");rn if (f.isDirectory()) rn System.out.println(": " + f.getAbsolutePath());rn File[] flist = f.listFiles();rn for (int i = 0; i < flist.length; i++) rn getinfo(flist[i]);rn rn else rn System.out.println(": " + f.getAbsolutePath() + "\t"rn + f.length() + "\t" + sdf.format(f.lastModified()));rnrn rn rnrnrnrn
c#文件读取与写入问题
.txt文件中数据是小数,里面存了几千行数据,9个为一组数据,现在我只需要一组数据中前六个数据,我把每组的前六个数据,读取出来,再存入一个新建的2.txt中。现在我写了种方法,但是处理速度太慢了,1兆都要4分钟,求助
delphi文件读取与写入问题
我有一个文本文档,有若干条记录,每条记录的数据是用逗号隔开。每条记录占一行rn如rn20130301,1,2,3,4,5,6rn20130302,1,2,3,4,5,6rn........rn现在我想把把这些记录全部读取然后写入另外一个无类型文件中,我想把每行当作一条记录,然后写入到无类型文件中去。中间肯定会用到循环,但不知道具体该如何操作,求助各位高手
C语言文件读取
各位大侠,请教一下下面这段代码,为什么在VS2005中文件读取过程中,读不到数据,lineon数组一直时空的,请各位高手指教rnrnvoid CReadGCD::ReadGcdFile(const char* pFileName)rnrn fstream pfile;rn pfile.open(pFileName,ios::in|ios::out);rnrn //pfile.seekg(0);rnrn char lineon[256];rnrn pfile.getline(lineon,199);rn return;rn
C语言二进制文件读取
#include struct student { char name[20]; int num; int english; int math; int chinise; }data[100]; int main() { FILE *p; p = fopen("student.dic","rb"); int i=0; w
C语言 文件读取操作
用C程序读取文件内容 p=fgetc(fp); while(p!=EOF) { printf("%c",p); p=fgetc(fp); }
C语言 文件读取
文件读取 管理员密码为:1234 文档信息存储到data.cpm中。 主要引用文档读取和存储
C语言文件读取实例
情景一:每行是空格分隔的整数,且个数不确定 示例文本: 3 -5 2 -1 6 8 -2 -4 7 9 -3 6 参考程序: #include &amp;amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;amp;gt; #include &amp;amp;amp;amp;amp;amp;lt;stdlib.h&amp;amp;amp;amp;amp;amp;gt; #include &amp;amp;amp;amp;amp;amp;lt;string.h
C语言文件读取fscanf()
这是一个用文件记录,输出图书信息的代码,只能输出一部分,怎样循环能全部打印出来呀rnrnrn#include rn#include rn#include rnrnrn#define MAXSIZE 30rnrnrnconst char *fname = "bookinfo.txt";rnrnrn//记录图书信息结构体rntypedef struct bookrnrn char author[MAXSIZE];rn char title[MAXSIZE];rn char publish_house[MAXSIZE];rnBOOK, *Book;rnrnrnint Input(const char *fname);//录入信息rnint Show(const char *fname);//显示信息rnrnrnmain()rnrn Input(fname);rn Show(fname);rnrnrnrnint Input(const char *fname)rnrn Book P_book = NULL;rn char ch = 'Y';rn FILE *fpw = NULL;rnrn while('Y' == ch || 'y' == ch)rn rn P_book = (Book)malloc(sizeof(BOOK));rnrn scanf("%s",P_book->author);rn scanf("%s",P_book->title);rn scanf("%s",P_book->publish_house);rnrn fpw = fopen(fname,"a");rnrn fprintf(fpw,"%s\n%s\n%s\n",rn P_book->author,P_book->title,P_book->publish_house);rn rn fclose(fpw);rn free(P_book);rn rn printf("go on?(y or n):");rn getchar();rn ch = getchar();rn rn return 1;rnrnrnrnint Show(const char *fname)rnrn char book[3][MAXSIZE] = 0;rn FILE *fpr = NULL;rnrn fpr = fopen(fname,"r");rn fscanf(fpr,"%s\n%s\n%s\n",book[0],book[1],book[2]);rn printf("%s %s %s\n\n",book[0],book[1],book[2]);rn rn fclose(fpr);rnrn
C语言文件读取疑问
编译环境dev-cpp 4.9, windows xprnrn我按照书编写以下C代码:rnint main(int argc, char * argv[])rnrn int account ;rn char name[30] ;rn float balance ;rn FILE * cfptr ;rn rn if((cfptr = fopen("F:\\Dev-Cpp\\exer\\aa.txt","w")) == NULL)rn rn printf("file could not open!!\n"); rn rn elsern rn printf("enter the account, name, balance\n");rn printf("enter EOF to end input\n"); rn printf("?");rn scanf("%d%s%f", &account, name, &balance);rn while( !feof(stdin) )rn rn fprintf(cfptr, "%d%s%.2f\n", account, name, balance);rn printf("?");rn scanf("%d%s%f", &account, name, &balance);rn rn fclose(cfptr);rn rnrnrn疑问:while(!feof(stdin)) 这个循环怎么样才能正常结束,ctrl+c么??rnrn我写到文件中的数据是:rnenter the account, name, balancernenter EOF to end inputrn?1000 zhangsan 394.33rn? 1001 lisi 843.31rn? 1002 wangwu 789.34rn==============================================================================rnrn我写数据进入文件后,再编写一个读数据代码如下:rnint main(int argc, char * argv[])rnrn int account ;rn char name[30] ;rn float balance ;rn FILE * cfptr ;rn rn if((cfptr = fopen("F:\\Dev-Cpp\\exer\\aa.txt","r")) == NULL)rn rn printf("file could not open!!\n"); rn rn elsern rn printf("%-10s%-13s%s\n", "account", "name", "balance");rn fscanf(cfptr, "%d%s%f", &account, name, &balance);rn while( !feof(cfptr) )rn rn printf("%-10d%-13s%7.2f\n", account, name, balance);rn fscanf(cfptr, "%d%s%f", &account, name, &balance); rn rn fclose(cfptr);rn rnrnrn执行的时候,好像进入死循环,不停的读取数据,我只有3条数据。请问问题出在哪里了??
文件读取写入
 1文件写入函数。 write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ",              eol = "\n", na = "NA", dec = ".", row.names = TRUE,              col.names = TRUE, qmethod = c("escape",
文件读取和写入
掌握 append 的用法 :open('my file.txt','a') 打开类型为 a ,a 即表示 append可以思考,如果用 w 形式打开,运行后会发生什么呢? open('my_file.txt','a') open('my_file.txt','w') #文件操作 # 写入 # text = 'this is first line \n this is second l
文件读取、写入
import java.io.File; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOExcept...
C语言文本写入问题
我期末C语言做了一个背单词的程序,现在遇到了一个文本写入的问题。rn是这样的,我对于每个单词都设置了一个熟练度,根据背单词的选择熟练度会发生改变,简单熟练度会直接变成3,认识熟练度加1,不认识熟练度不变。熟练度为3变为熟词,以后就不会被这个单词了。这个熟练度方面遇到了困难。我的想法是在一个文本里建立一个数组,然后熟练度一一对应,每次背单词选择了,文本里对应的数组里的数据就会变化。可是我写完了,发现好像不能运行。(ps:我的单词也是在一个文本字符数组里,每次背单词随机产生一个单词)求大佬帮帮萌新解决这个问题。[img=https://img-bbs.csdn.net/upload/201712/29/1514561358_890382.png][/img]
关于文件读取、写入、排序的问题
有个文件长度大概有十万行,每行都是一组数字。如何将这个文件里相同的数字写到另一个文件?并对原文件进行排序?
文本文件读取写入的问题(急)
rn1。rn在input.txt文件中有这么两行数据rn5 10rn7 2 6 5 4rn现在我想在程序中读取出来,比如:rn把5赋给一个变量,把10赋给另一个变量,而把整个第二行赋给一个数组rn2。rn然后把程序中的结果写入output.txt中rn格式如下:rn比如:rn10rn2 3rn4 5rn我是新手,希望高手解释的详细点,最好给出代码。rn谢谢。rn
关于JAVA文件读取写入的问题。
我用FileInputStream XX=new FileInputStream("c:/file.txt");要打开file.txt文件,(已经import java.io.*)但编译的时候总是提示找不到文件,为什么?rn还有其它有效的方法吗?
c语言实现ini文件读取
#include &lt;stdio.h&gt; #include &lt;string.h&gt; const int MAX_KEY_NUM = 128; const int MAX_KEY_LENGTH = 1024; char gKeys[MAX_KEY_NUM][MAX_KEY_LENGTH]; char *GetIniKeys(char *title, char *fil...
c语言实现16进制文件读取
FILE *sf; sf = fopen(&quot;G://2.txt&quot;, &quot;rb&quot;); int n; unsigned char buf[16]; unsigned long count = 0; while((n = fread(buf, sizeof(char), 16, sf)) &amp;gt; 0) { int i; printf(&quot;%08lx &quot;, coun...
c语言txt文件读取代码
如何用C实现txt不间断读取 直到文档结束
C语言检测文件读取完毕
现在有个C语言写的程序,打开文件用open函数打开,但是不知道用这个函数打开的文件,如何测试文件是否读取完毕。rn如果用FILE*fp格式修改程序,工作量太大。rnrn请问各位C语言高手,这个用什么函数判断?多谢。rnrn代码:rnint Infile;rnInfile=open(SrcFile, O_RDONLY|O_BINARY));
VS C语言xml文件读取
最近需要把算法转成C语言,C语言没怎么用过,就大学公共课学过,好久了,忘得差不多了。感觉自己高级语言用的很熟,所以C语言看了点基础就开始转,然后遇到了一个坑,摔死我了。不说废话,进入主题。(以下是思想过程) 我调用别人的第三方库,生成xml类型字符串,我需要进行解析。其实挺简单的,对于linux系统来说,使用libxml就可以轻松搞定。问题是,我是win10,然后就上网查呀,又得下载libxml
高手进、、 求 C语言 文件读取问题 ..
请帮忙修改下这个程序:加上 rnrn 每次登录时读取上次保存在磁盘文件中的订票记录。rnrn这个功能.rnrn在线等rn#include "stdio.h"rn#include "stdlib.h"rn#include "string.h"rn#include "conio.h"rnrntypedef struct XXXrnrn char k; /* 0表示无人,1表示有人 */rn char n; /* 0表示可选,1表示不复合条件 */rn char Name[30];rn char Code[20];rnSB;rnrnSB Set[20][4];rnrnvoid Select(); /*选座位*/rnvoid ShowList(); /*显示位置详细清单*/rnvoid Menu(); /*菜单*/rnint YNSelect(char *info,int cls); /*yes-No选择*/rnvoid ShowNull(int window,int smoken); /*显示满足条件的位置索引*/rnvoid InputInfo(); /*输入乘客资料*/ rnvoid baocun(int x,int y); rnrnrnvoid main()rnrn char key=0;rn int Run=1;rnrn memset(Set,0,80*sizeof(SB));rn while(Run)rn rn Menu();rn key=getch();rn switch(key)rn rn case '1':Select();break;rn case '2':ShowList();break;rn case '3':Run=0;break;rn rn rnrnrnint YNSelect(char *info,int cls)rnrn char key;rn if(cls) system("cls");rn else printf("\n");rn printf("\n%s Y/y - 要 N/n - 不要",info);rn while(1)rn rn key=getch();rn if(key=='Y'||key=='y') return 1;rn if(key=='N'||key=='n') return 0;rn rnrnvoid ShowNull(int window,int smoken)rnrn int i,j;rn int Con1,Con2,Con3;rn int count=0;rnrn system("cls");rn printf("符合你条件的座位有:\n\n");rn for(j=0;j<20;j++)rn for(i=0;i<4;i++)rn rn Con1=((window==1)&&(i==0||i==3))||(window==0);rn Con2=((smoken==1)&&(j>=19))||(smoken==0);rn Con3=(Set[j][i].k==0);rn if(Con1&&Con2&&Con3)rn rn Set[j][i].n=0;rn printf(" %2d%c ",j+1,'A'+i);rn rn elsern rn Set[j][i].n=1;rn printf(" --- ");rn rn count++;rn if(count%4==0) printf("\n");rn rnrnvoid Select()rnrn char isWin=0;rn char isSmk=0;rn char isOK=0;rnrn int LOOP=1;rn while(LOOP)rn rn isWin=YNSelect("要靠窗口边吗?",1);rn isSmk=YNSelect("要吸烟吗?",1);rn ShowNull(isWin,isSmk);rn isOK=YNSelect("要选择位置吗?",0);rn if(isOK==0) rn LOOP=YNSelect("还要继续选吗?",0);rn elsern rn InputInfo();rn LOOP=0;rn rn rnrnvoid InputInfo()rnrn char ch[10]=0;rn int x,y;rn int i=0;rn printf("\n\n请输入座位编号:");rn scanf("%s",ch);rn rn while(i<10)rn rn if(ch[i]<'0'||ch[i]>'9') rn rn x=ch[i];rn ch[i]=0;rn break;rn rn i++;rn rnrn y=atoi(ch)-1;rn if(x>='A'&&x<='D') x-='A';rn else if(x>='a'&&x<='d') x-='a';rn else x=-1;rnrn if(y<0||y>19||x==-1)rn rn printf("\n输入错误!!!按任意键返回");rn getch();rn return;rn rn if(Set[y][x].n)rn rn printf("\n不符和选择条件!按任意键返回");rn getch();rn rn elsern rn printf("\n请输入姓名:"); rn scanf("%s",Set[y][x].Name);rn printf("\n请输身份证号:"); rn scanf("%s",Set[y][x].Code);rn Set[y][x].k=1;rn printf("\n\n登记成功!\n\n%s同学,您的座位是:%2d%c.请准时登机",Set[y][x].Name,y+1,'A'+x);rnbaocun(x,y);rn printf("\n\n按任意键返回");rn getch();rn rnrnvoid ShowList()rnrn int i,j;rn int count=0;rnrn system("cls");rn printf("\n整机位置分配状况清单:\n");rn for(j=0;j<20;j++)rn for(i=0;i<4;i++)rn rn printf("\n %2d%c位置: ",j+1,'A'+i);rn if(Set[j][i].k==0) printf("没人");rn else printf("%s %s",Set[j][i].Name,Set[j][i].Code);rn count++;rn if(count%11==0) rn rn printf("\n\n按ESC键返回,其他键继续.");rn if(getch()==27) return;rn system("cls");rn printf("\n整机位置分配状况清单:\n");rn rn rn printf("\n\n信息全部结束,按ESC键返回");rn while(getch()!=27);rnrnvoid baocun(int x,int y) rnrn rn FILE *fp;rn if((fp=fopen("乘客信息.txt","a+"))==NULL) rn rn printf("文件不能打开!\n");rn exit(0); rn rn rnfprintf(fp,"%-20s%-20s%2d%c\n",Set[y][x].Name,Set[y][x].Code,y+1,'A'+x);rn fclose(fp); rnrnvoid Menu()rnrn system("cls");rn printf("\n 飞机票订票系统\n");rn printf("\n 1 - 选择座位");rn printf("\n 2 - 查看清单");rn printf("\n 3 - 退出系统");rn printf("\n\n 请选择\n");rnrn
关于C语言文件读取fopen函数的问题
刚入门学习C语言,用VS2012平台,使用fopen函数时报错:rn[code=c]#include rn#include rn#include rnint main(void)rnrn FILE * fp; rn if (fopen_s(&fp,"C:\\Users\\Administrator\\Desktop\\EGM96","r")!=0)rn rn printf("The file open error!\n");rn exit(0);rn rn int a;rn a=fclose(fp);rn return 0;rn[/code]rnrn设断点逐步运行时,出现报错:rn>c:\users\administrator\desktop\test\test\test.c(14): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)rn[code=c]int main(void)rnrn FILE * fp; rn /*if (fopen_s(&fp,"C:\\Users\\Administrator\\Desktop\\EGM96","r")!=0)rn rn printf("The file open error!\n");rn exit(0);rn */rn int a;rn //a=fclose(fp);rn return 0;rn[/code]rn这样就能运行了,求解答,谢谢!rn另外,VS配置了opencv 不知是不是受这个影响
C语言:关于文件读取→写数据库的问题
我想从文件里读取数据写进数据库,应该怎么作处理 rn文件的格式是固定的每个字段是以tab分隔 rn比如test.dat文件里的数据是以下面的格式存放的 rna1 tab b1 tab c1 rna2 tab b2 tab c2 rna3 tab b3 tab c3 rn我最初的想法是从文件里读取一条记录存到一个结构体里 rn再从结构体写进数据库再读取下一条记录一直这么循环操作直到最后一条记录操作完 rn如果test.dat文件有很多条记录就得一条一条写进数据库效率太低rnrn没有更好的方法实现吗? rnrn
数据结构 C语言 模式匹配 文件读取
【问题描述】 文学研究人员需要统计某篇文章中某些词的出现次数。试写一个实现这一目标的文字统计系统 【任务要求】 文章存于一个文本文件中。待统计的词汇集合要一次输入完毕,即统计工作必须在程序的一次运行之后就全部完成。程序的输出结果是每个词的出现次数格式自行设计。 【测试数据】 与程序放在同一目录下的记事本文件xxx.txt,内容如下“某日,一个大学老师提问学生,树上有十只鸟,开枪打死一只,还
C语言 文件读取问题 求高手赐教。。。
void read_stu_file() //读取记录rn rn pNode p = NULL;rn FILE* fp = NULL;rnrn printf("\n\n\t正在读取...\n\n");rn fp = fopen("D://C语言学习//student//Debug//next.txt","r");rn rn if(fp==NULL)rn rn printf("\n\t打开文件失败!\n\n");rn return;rn rn elsern rn p = (LNode *)malloc(sizeof(LNode));rn g_LinkFirst = p;rn rn while(!feof(fp))rn rn fscanf(fp,"%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t\n",&p->stu.num,&p->stu.name,&p->stu.mima,&p->stu.nianling,&p->stu.banji,&p->stu.sxscore,&p->stu.Cscore,&p->stu.ywscore); rn p = p->next;rn p = (LNode *)malloc(sizeof(LNode));rn n++;rn rnrn fclose(fp);rn printf("\n\t读取已完成!\n\n\n"); rn rn rn rnrn这段代码是写的实现读取功能rn 在文件夹为空的情况下 执行完rn fp = fopen("D://C语言学习//student//Debug//next.txt","r");rn 后 文件指针fp就不为空了。。。查不到原因 求高手指点
c语言文件读取汉字及汉字编码的问题
先贴程序n#define _CRT_SECURE_NO_WARNINGS n#include nusing namespace std;nint main(void)nn char ch;n FILE *f;n int i = 0;n int count = 0;n f = fopen("test.txt", "r+");n while ((ch = getc(f)) != EOF) n n fseek(f, i, SEEK_SET); n putc(~ch, f); n i++;n fseek(f, i, SEEK_SET); n count++;n n fclose(f);n printf("文件操作已经完成\n");n printf("共处理%d个字节\n", count);n printf("按任意键结束程序\n");n getchar();n return 0;nnn该程序实现的就是对文件内的字符进行取反,就是简单的加密,再取反一次就变回原样了,也就是解密n在对汉字进行操作的时候,我进行了一些字的实验,目前仅发现了一个王字,在取反后取反回去不能变成王字,我加了查看字符格式的代码,发现 王 这个字在进行第一次字符操作时候,被分解为三个字节!!!然后再操作,就变成了四个!进行一次加一次,但是其他的汉字目前没发现错误,不知道是怎么回事,难道王字的编码就是三个字节吗?n求大家解答一下,我是新人没有一个c币。。。如果以后我得到了,就追加给你,谢谢啦
相关热词 c# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制