我这里有一个source.txt文件: https://palomar.blackboard.com/bbcswebdav/pid-1168887-dt-content-rid-3710280_1/courses/2177-70219/payfile%281%29.txt
void readData() { // Scans each line from the .txt and puts each line into an element in the array
FILE *fp;
fp = fopen("info.txt", "r");
char Line[100];
int i = 0;
while (!feof(fp)) {
char agetemp[3];
char tenuretemp[2];
char salarytemp[7];
fgets(Line, 100, fp);
strsub(Line, employee[i].first, 0, 6);
strsub(Line, employee[i].initial, 8, 9);
strsub(Line, employee[i].last, 10, 18);
strsub(Line, employee[i].street, 20, 35);
strsub(Line, employee[i].city, 37, 46);
strsub(Line, employee[i].state, 49, 50);
strsub(Line, employee[i].zip, 52, 56);
strsub(Line, employee[i].sex, 61, 61);
strsub(Line, agetemp, 58, 59);
employee[i].age = atoi(agetemp); // converted the age column to an int
strsub(Line, tenuretemp, 63, 63);
employee[i].tenure = atoi(tenuretemp); // converted tenure column to an int
strsub(Line, salarytemp, 65, 70);
employee[i].salary = atof(salarytemp); // converted the salary column to float
i++;
}
}
我的任务是给我一个用户自定义的函数,名为strsub,在这里定义:
void strsub(char buf[], char sub[], int start, int end) { // function template for strsub
int i, j;
for (j = 0, i = start; i <= end; i++, j++) {
sub[j] = buf[i];
}
sub[j] = '\0';
}
所以基本上当我扫描源.txt文件时,strsub函数会挑出特定的段并将它们放入其各自的结构数组中。它在大多数情况下都可以正常工作,例如当我打印出employee[2].city
时:
那里没有错。但是,当我尝试打印出employee[i].first
变量时,它会将一堆字母拼凑起来,比我告诉它要多,而且我不知道为什么。这是我尝试打印employee[2].first
时的图片:
在readData()
中,我只告诉它从0到6,为什么它比我说的更多输入而不仅仅是前7个字符?
哦,这也是我的结构;我把它放在一个单独的头文件中:
struct info {
char first[7];
char initial[1];
char last[9];
char street[16];
char city[11];
char state[2];
char zip[5];
int age;
char sex[1];
int tenure;
double salary;
};
答案 0 :(得分:0)
我们需要看到员工的记录结构。如果first被定义为char [7],则它没有足够的内存来容纳0-6(即7 char)+ null终止。此外,如果initial为1 char,则如果输入为8,9,则您的函数将处理2个字符。