【发布时间】:2015-09-15 17:16:34
【问题描述】:
程序要求用户输入并将其写入 .dat 文件。输入是指定数量学生的姓名、ID、出生日期、性别和婚姻状况。数据必须作为单独的字段写入文件,以便以后可以从文件中读取。
假设这是来自终端的输入:
学生 1
输入姓名:John Doe
输入 ID:1234
输入出生日期:01/01/90
输入性别:男
输入婚姻状况:单身
对于学生 2
输入姓名:简·史密斯
输入 ID:5678
输入出生日期:09/08/92
输入性别:女
输入婚姻状况:单身
这是文件中的输出。
John Doe\00\00\00\00\00\00\00\00\00\00\001234\00\00\00\00\00\0001/01/90\00\C2Male \00单人\00\FF\FF\FF简·史密斯\00\C2\FF\00\00\00\00\00\005678\00\00\00\00\00\0009/08/92\00女\00单人\ 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。 -
您不清楚文件的格式。向你自己描述你想要的内容是什么(以及如何读回它),然后你就可以弄清楚如何编写它