【怪了!】函数难道不能用了吗?该如何解决
【怪了!】函数难道不能用了吗?
编了一个读文件内容的小程序,但是......
一开始程序的的代码是:
#include "iostream.h "
#include "stdio.h "
#include "stdlib.h "
int openf(char str[],FILE *fp);
void readf(FILE *fp);
void main()
{
FILE *fp;
char menu[80];
cin> > menu; //输入文件的路径
int a;
a=openf(menu,fp);
if(a==1)
{
readf(fp);
}
else
{
cout < < "出错了 " < <endl;
exit(0);
}
}
int openf(char menu[],FILE *fp)
{
if((fp=fopen(menu, "r "))==NULL)
{
return 0;
}
else
{
return 1;
}
}
void readf(FILE *fp)
{
char ch;
for(ch=fgetc(fp);ch!=EOF;ch=fgetc(fp))
{
putchar(ch);
}
}
可是只要把文件路径以输入,回车之后,程序就发生错误。
反复尝试之后发现,问题出在自定义的函数 int openf(char str[],FILE *fp); 身上只要把函数代码放到主函数中(以前那个函数代码删除)就没事了,修改后的代码如下:
// Note:Your choice is C++ IDE
#include "iostream.h "
#include "stdio.h "
#include "stdlib.h "
void readf(FILE *fp);
void main()
{
FILE *fp;
char menu[80];
cin> > menu;
int a;
if((fp=fopen(menu, "r "))==NULL)
{
a=0;
}
else
{
a=1;
}
if(a==1)
{
readf(fp);
}
else
{
cout < < "出错了 " < <endl;
exit(0);
}
}
void readf(FILE *fp)
{
char ch;
for(ch=fgetc(fp);ch!=EOF;ch=fgetc(fp))
{
putchar(ch);
}
}
真不知道这是为什么?
难道是 文件型指针不能分别传入两个函数里,但我把另一个有文件型指针形参的函数void readf(FILE *fp),的代码放到主函数中(int openf(char str[],FILE *fp)这个函数代码没有放到主函数中)程序也没有事啊?问题应该是出在int openf(char str[],FILE *fp)这个函数身上,到底错在那里啊?请大家帮帮忙!
------解决方案--------------------
int openf(char str[],FILE* fp);
=============>
int openf(char str[],FILE*& fp);
------解决方案--------------------
如果需要修改传入的指针的值,要么用指向指针的指针,把指针的地址传进去,要么用指针的引用。
C里边指针也是传值的,没有原生的引用语义。
编了一个读文件内容的小程序,但是......
一开始程序的的代码是:
#include "iostream.h "
#include "stdio.h "
#include "stdlib.h "
int openf(char str[],FILE *fp);
void readf(FILE *fp);
void main()
{
FILE *fp;
char menu[80];
cin> > menu; //输入文件的路径
int a;
a=openf(menu,fp);
if(a==1)
{
readf(fp);
}
else
{
cout < < "出错了 " < <endl;
exit(0);
}
}
int openf(char menu[],FILE *fp)
{
if((fp=fopen(menu, "r "))==NULL)
{
return 0;
}
else
{
return 1;
}
}
void readf(FILE *fp)
{
char ch;
for(ch=fgetc(fp);ch!=EOF;ch=fgetc(fp))
{
putchar(ch);
}
}
可是只要把文件路径以输入,回车之后,程序就发生错误。
反复尝试之后发现,问题出在自定义的函数 int openf(char str[],FILE *fp); 身上只要把函数代码放到主函数中(以前那个函数代码删除)就没事了,修改后的代码如下:
// Note:Your choice is C++ IDE
#include "iostream.h "
#include "stdio.h "
#include "stdlib.h "
void readf(FILE *fp);
void main()
{
FILE *fp;
char menu[80];
cin> > menu;
int a;
if((fp=fopen(menu, "r "))==NULL)
{
a=0;
}
else
{
a=1;
}
if(a==1)
{
readf(fp);
}
else
{
cout < < "出错了 " < <endl;
exit(0);
}
}
void readf(FILE *fp)
{
char ch;
for(ch=fgetc(fp);ch!=EOF;ch=fgetc(fp))
{
putchar(ch);
}
}
真不知道这是为什么?
难道是 文件型指针不能分别传入两个函数里,但我把另一个有文件型指针形参的函数void readf(FILE *fp),的代码放到主函数中(int openf(char str[],FILE *fp)这个函数代码没有放到主函数中)程序也没有事啊?问题应该是出在int openf(char str[],FILE *fp)这个函数身上,到底错在那里啊?请大家帮帮忙!
------解决方案--------------------
int openf(char str[],FILE* fp);
=============>
int openf(char str[],FILE*& fp);
------解决方案--------------------
如果需要修改传入的指针的值,要么用指向指针的指针,把指针的地址传进去,要么用指针的引用。
C里边指针也是传值的,没有原生的引用语义。