我有两个问题,第一个是,我无法让我的线匹配打印出我的阵列。我只能得到第一行匹配!格式化printf和额外的字符串打印?
void printStructs(struct student *list, int size){
int j = 0;
printf("Last Name, First Name Term ID Course Section\n");
printf("-------------------------------- ---- --------- ------ -------\n");
while(j < size){
printf("%s, %-21s %-5d %-11d %s%d %7s\n", list[j].lastname, list[j].firstname, list[j].term, list[j].id, list[j].subjectname,list[j].catalog, list[j].section);
j++;
}
}
这给了我这个输出!
了解如何只有第一个被正确一字排开?我如何获得剩余的线路来做到这一点!?
现在我的第二个问题是我只是根本看不到。注意显示姓氏前倒数第二行的额外“Susan”?那来自哪里!?它适用于所有其他名称,我在这里没有看到什么?
编辑:涉及额外名称的错误不能在这里找到!只是意识到它与我的循环初始化该名称的值有关,如果我无法弄清楚,将进一步编辑,现在忽略!
EDIT2“额外字符串问题!”:
好了,所以我缩小了其中的问题,但不完全为什么它会发生,我相信它是与分隔符...这里是代码
studentsRead = readStudentList(inputf, students, N);
printf("%s\n", students[6].lastname);
printStructs(students, studentsRead);
/*for (j = 1 ; j <= 10-1 ; j++){
for(k = 0 ; k <= 10-2 ; k++){
if(students[k] > students[k+1]){
temp = students[k];
students[k] = students[k+1];
students[k+1] = temp;
}
}
}*/
fclose(inputf);
return 0;
}
int readStudentList(FILE *f, struct student *list, int maxSize){
char buff[65];
int count = 0;
while((count < maxSize) && (fgets(buff, sizeof(buff), f) != NULL)){
struct student item;
if(parseStudent(&item, buff)){
list[count++] = item;
}
}
return count;
}
int parseStudent(struct student *person, char *data){
char *ptr;
int i = 0;
ptr = strtok(data, DELIM);
person[i].term = atoi(ptr);
ptr = strtok(NULL, DELIM);
person[i].id = atoi(ptr);
ptr = strtok(NULL, DELIM);
strcpy(person[i].lastname, ptr);
printf("%s\n", person[i].lastname);
ptr = strtok(NULL, DELIM);
strcpy(person[i].firstname, ptr);
ptr = strtok(NULL, DELIM);
strcpy(person[i].subjectname, ptr);
ptr = strtok(NULL, DELIM);
person[i].catalog = atoi(ptr);
ptr = strtok(NULL, DELIM);
strcpy(person[i].section, ptr);
}
通过这段代码,所有东西都会正常打印,直到readStudentList调用之后,printf才会打印出来,这会在最后打印出名字为String的名字。尽管打印在我的解析函数中,姓氏似乎正常显示?我一直在试图把打印出来的地方,看看它出错哪里,但其中有些甚至不会打印任何东西?
我几乎无法读取您的输出。裁剪出更大的图片会比这更好:-) – 2013-03-02 04:25:13
@Aniket:对于大多数当前浏览器,您应该能够右键单击图片并在新标签页(或新窗口)中打开它,您可以然后查看全尺寸。 – 2013-03-02 04:28:24
计算姓氏中的字母并将其与列偏移相匹配,您会看到对齐方式。您希望为组合名称指定一个宽度限制,这意味着要单独构建组合。 – jthill 2013-03-02 04:31:44