我必须用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;
}
答案 0 :(得分:0)
scanf()
对输入执行转换,而write()
系统调用只将raw
数据转储到给定的文件描述符。您需要使用格式化函数(如printf()
)从您的数据结构中获取纯文本输出,例如:
FILE* file = fopen("Consumerman", "w");
fprintf(file, "%d\n", jdoe.idnumber);
fclose(file);
PS:您首先使用系统调用的任何特殊原因?