标题:各位LZ帮我看下这个打开文件函数的问题
只看楼主
啊蒋
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2017-2-26
结帖率:70%
已结贴  问题点数:10 回复次数:3 
各位LZ帮我看下这个打开文件函数的问题

//我这个就是把姓名还有电话号码写入到文件,然后在从文件读去出来,编译能同过,运行的是后就出问题了//[local]1[/local]
#include<stdio.h>

#include<string.h>
#include<stdlib.h>
#include<ctype.h>
typedef struct People People;
#define MAX 20
struct People
{
    char str[MAX];
    char number[MAX];

};
FILE* pfile=NULL;
char* filename="D:\\蒋臣健\\chen.bin";
void get_name(char* str,size_t i);
void show_people(People people);
void file_mode(FILE* PF, char* filename1, char* mode);





void file_mode(FILE* PF, char* filename1, char* mode)
{
    if(!(PF=fopen(filename1,mode)))
    {
        printf("failed to open");
        exit(1);
    }
    if(setvbuf(PF,NULL,_IOFBF,BUFSIZ))
    {
        printf("file buffering failed");
        exit(2);
    }
}
void get_name(char* str,size_t i)
{

    size_t str_len=0;
        
  printf("请输入姓名(不超过%d个字符):",MAX);
  fgets(str,i,stdin);
  str_len=strlen(str);
  if(str[str_len-1]=='\n')
      str[str_len-1]='\0';
}

  

int main()
{
    People my_people;
    char ch='a';
        size_t i=3;

file_mode(pfile,filename,"wb");
    do
    {
        
        
        fflush(stdin);
        get_name(my_people.str,MAX);
        printf("请输入电话号码");
        fgets(my_people.number,MAX,stdin);
        if(my_people.number[strlen(my_people.number)-1]=='\n');
        my_people.number[strlen(my_people.number)-1]='\0';
        
    printf("到这步了");
        
        fwrite(&my_people,sizeof my_people,1,pfile);
        
        printf("到这步了");
        
        printf("还想输入吗(Y继续N结束):");
        scanf("%c",&ch);
    }while((char)toupper(ch)=='Y');
 fclose(pfile);
 pfile=NULL;

    show_people(my_people);
fclose(pfile);
pfile=NULL;
    return 0;
}

void show_people(People people)
{

    int i=0;
    size_t str_len=0;
    file_mode(pfile,filename,"rb");
while(    fread(&people,sizeof(People),1,pfile))
{
   

   
        str_len=sizeof(people);
        printf("%d",str_len);

        printf("姓名:%s 电话号码:%s\n",people.str,people.number);
   
}
   
}
我用printf语句去最终,发现在fwrite(&my_people,sizeof my_people,1,pfile)这条语句通不过,删掉它就行,后来我是把void file_mode(FILE* PF, char* filename1, char* mode)这个函数的FILE*参数去掉了,也就是把这个函数改成void file_mode( char* filename1, char* mode)运行就成功了,我想问下为什么把函数写成void file_mode(FILE* PF, char* filename1, char* mode)这样就不行呢,难道文件指针不能做参数吗
搜索更多相关主题的帖子: include people number 电话 姓名 
2017-03-18 18:30
啊蒋
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2017-2-26
得分:0 
回复 楼主 啊蒋
这个是运行时候的图片
2017-03-18 18:32
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
得分:10 
void file_mode(FILE* PF, char* filename1, char* mode);
改为:
void file_mode(FILE*& PF, char* filename1, char* mode);
FILE* PF 你传递这个进来是改变不了PF的值的,你只能改变PF所指向的值即*PF你可以修改
要想修改指针的值你必需传递指针的地址才能修改指针的值。(我用的引用同样道理)

说简单点
int a = 3;
你要修改a的值是不是用
int* p = &a ;
*p = 5 即 a = 5;
你要修改的值怎么办p
int** pp = &p;
*pp = ??;
这样就明白了吧
2017-03-19 00:49
啊蒋
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2017-2-26
得分:0 
多谢了,我懂你的意思了,已经好了,
2017-03-19 15:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-475223-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.319388 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved