C函数通过打开文件并传输数据

时间:2014-12-02 10:11:24

标签: c

这是代码 期望结果将打开一个文件并将数据放入其中。并通过读取文件显示数据。 我已经测试了很多次,但我也找不到错误。但仍然无法运行。

/*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有问题。感谢你抽出时间看这个问题。

2 个答案:

答案 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()

  • 的结果
  • 缩进代码可读