这是代码 期望结果将打开一个文件并将数据放入其中。并通过读取文件显示数据。 我已经测试了很多次,但我也找不到错误。但仍然无法运行。
/*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有问题。感谢你抽出时间看这个问题。
答案 0 :(得分:2)
您的代码有几个问题。我会按顺序解释它们。
首先,
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
是字符串而不是字符。在您完成我要做的更改之后,您的代码将按预期工作。
答案 1 :(得分:1)
一些问题:
永远不要使用gets()进行用户输入!
始终检查fopen()
缩进代码可读