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

标签 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 有问题。感谢您花时间查看这个问题。

最佳答案

您的代码有几个问题。我将按顺序解释它们。

首先,

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/

相关文章:

c - 在 Ansi-C 中导入 Delphi Dll

python - 在 C/Python 程序中使用 unsigned long longs 时的不稳定行为

c - 带有 -std=c99 的 GCC 提示不知道 struct timespec

c - 为什么我的守护进程在重新启动后没有打印到控制台?

计算 c 中哈希集中的簇

c++ - wait()等待进程是否消耗系统CPU

python - Numpy复杂的数据结构

在输出中看不到完整的单词

java - 在android NDK的java类中调用C函数

计算字符串中小写字母单词的数量 - C 编程