这是代码 预期结果将打开一个文件并将数据放入其中。并通过读取文件来显示数据。 我已经测试了很多次,但我也找不到错误。但还是无法运行。
/*lab 9.2*/
#include <stdio.h>
#include <stdlib.h>
#define MAX 40
int main(){
int writeFile(char);
char filename[MAX];
char message[51];
int num1;
printf("Plz enter output file name: ");
gets(filename);
num1 = writeFile(filename);
if (num1==1) {
printf("Write File<%c> Finish OK!",filename);
} else {
printf("Write File<%c> Finish Fail!",filename);
}
return 0;
}
int writeFile(char gef)
{
int i;
int data[6]={1,12,23,34,45,56};
char message;
char array1;
FILE *checkicpfile;
FILE *icpfile;
int vaild;
icpfile=fopen(filename,"w");
fputs("icp\n321 6\n",icpfile);
fclose(icpfile);
for(i=0;i<6;i++)
{
addicpfile=fopen(filename,"a+");
fprintf(addicpfile,"%d ",data[i]);
fclose(addicpfile);
}
checkicpfile=fopen(filename,"r");
if (checkicpfile != NULL) {
fclose(checkicpfile);
numco = 1;
} else {
fclose(checkicpfile); numco = 0;
}
if (numco==1) {
printf("Write File<%s> Finish OK!",filename);
} else {
printf("Write File<%s> Finish Fail!",filename);
}
}
所以我猜函数 trans 有问题。感谢您花时间查看这个问题。
最佳答案
您的代码有几个问题。我将按顺序解释它们。
首先,
int writeFile(char);
应改为
int writeFile(char[]);
并且应该放在main
之外,就在#define MAX 40
之后。那么,
char message[51];
是一个未使用的变量。去掉它。切勿使用 gets
,因为它很危险并且已从标准中删除。使用 fgets
代替 -
fgets(filename,sizeof filename,stdin);
由于您要将字符数组传递给函数,因此请更改
int writeFile(char gef)
至
int writeFile(char gef[])
您需要打开文件一次,然后在写入后关闭它。所以将你的函数更改为-
int writeFile(char gef[])
{
int i;
int data[6]={1,12,23,34,45,56};
FILE *file; //removed uneccessary variables
if((file=fopen(gef,"w"))==NULL) //if opening the file failed,
{
printf("An error occured");
return 0; //end the function
}
fputs("icp\n321 6\n",file);
for(i=0;i<6;i++)
{
fprintf(file,"%d ",data[i]);
}
fclose(file); //close the file
return 1;
}
最后,在
中使用%s
代替%c
printf("Write File<%c> Finish OK!",filename);
还有
printf("Write File<%c> Finish Fail!",filename);
因为filename
是一个字符串而不是一个字符。在您进行了我告诉您的更改后,您的代码将按预期工作。
关于C 函数打开文件并传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27246755/