从文件读取和写入C中的文件

时间:2014-01-29 02:01:37

标签: c scanf

我必须用C编写一个程序来读取文件并写入另一个由代码创建的文件。我正在使用教师要求的Mac终端(在xCode中编码)。所以我能够使用“gcc -o main2 main2.c”和“./main2”进行编译

输出是乱七八糟的混乱,我一直在谷歌搜索疯狂,但一直无法找到任何东西。我认为错误在我的Scanf中,但我可能是错的。任何想法将被理解为什么这个代码不能正常工作。感谢。

#include <unistd.h>
#include <stdio.h>
#include "customer.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>

int main()
{
    int fileid;
    int status;
    int matchcount;

    customer jdoe;

    fileid = open("Consumerman", O_WRONLY | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
//"%d %20c %d-%d-%d (%50c||<%d %40c>) %30c %2c %d %f"

    matchcount = scanf ("%d %20[^<>]c %d-%d-%d %50[^<>]c %20[^<>]c %2c %d %g",  &jdoe.idnumber, jdoe.name, &jdoe.year, &jdoe.month, &jdoe.day, /*&jdoe.address, jdoe.street,*/ jdoe.stringstreet, jdoe.city, jdoe.state, &jdoe.zipcode, &jdoe.points);


    while((matchcount != 0) && (matchcount != EOF)){
        status = write(fileid, (void *) &jdoe, sizeof(jdoe));

        matchcount = scanf (" %d %20[^<>]c %d-%d-%d %50[^<>]c %20[^<>]c %2c %d %g",  &jdoe.idnumber, jdoe.name, &jdoe.year, &jdoe.month, &jdoe.day, /*&jdoe.address, jdoe.street,*/ jdoe.stringstreet, jdoe.city, jdoe.state, &jdoe.zipcode, &jdoe.points);


    }
    close(fileid);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

scanf()对输入执行转换,而write()系统调用只将raw数据转储到给定的文件描述符。您需要使用格式化函数(如printf())从您的数据结构中获取纯文本输出,例如:

FILE* file = fopen("Consumerman", "w");
fprintf(file, "%d\n", jdoe.idnumber);
fclose(file);

PS:您首先使用系统调用的任何特殊原因?