程序要求用户输入并将其写入.dat文件。输入的是指定人数的学生的姓名,身份证,出生日期,性别和婚姻状况。必须将数据作为单个字段写入文件,以便以后可以从文件中读取数据。写入C文件时出现不需要的字符
之所以这样说,是从终端输入:
学生1
输入姓名:李四
输入ID:1234
输入出生日期:90年1月1日
输入性别:男
填写婚姻状况:未婚
学生2
输入名称:珍妮·史密斯
输入ID:5678
输入出生日期:92年9月8日
输入性别:女
填写婚姻状况:未婚
这是文件中的输出。
John Doe \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 00 \ 0\ 00 \ 00 \ 00 \ 00 \ 00 \ 0001/01/90 \ 00 \ C2Male \ 00Single \ 00 \ FF \ FF \ FFJane Smith \ 00 \ C2 \ FF \ 00 \ 00 \ 00 \ 00 \ 00 \ 005678 \ 00 \ 00 \ 00 \ 00 \ 00 \ 0009/08/92 \ 00Female \ 00Single \ 00 \ C2 \ FF
我猜如\ 00等字符出现的原因是,对于每个数组元素,我写入的文件比数组元素包含更多的字节;但是我需要文件中的每个数据都是固定的大小,以便以后可以从文件中单独读取,对吗?我该怎么做,请吗?
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int main(){
int fd, i = 0;
char name[2][20], id[2][10], dob[2][10], gender[2][7], status[2][10];
fd = open("file.dat", O_WRONLY|O_CREAT); //open file.dat for writing; if it does not exist, create it.
//get input from user
for (i = 0; i < 2; i++){
printf("\nFor student %d\n", (i + 1));
printf("Enter name: ");
scanf("%[^\n]%*c", &name[i][20]); //%[^\n]%*c - read everything up to (excluding) new line character
printf("Enter ID: ");
scanf("%s", &id[i][10]);
printf("Enter date of birth: ");
scanf("%s", &dob[i][10]);
printf("Enter gender: ");
scanf("%s", &gender[i][7]);
printf("Enter marital status: ");
scanf("%s", &status[i][10]);
getchar();
}
for (i = 0; i < 2; i ++){
write(fd, (void*)&name[i][20], 20);
write(fd, (void*)&id[i][10], 10);
write(fd, (void*)&dob[i][10], 10);
write(fd, (void*)&gender[i][7], 7);
write(fd, (void*)&status[i][10], 10);
}
}
你应该写'strlen(&name [i] [20])'字节而不是固定值。 '20'应该可能是'0'。 – arrowd
你不清楚该文件将会是什么格式。向你自己描述你想要什么内容(以及如何阅读它),然后你可以制定出如何编写它 – pm100