我有兩個問題,第一個是,我無法讓我的線匹配打印出我的陣列。我只能得到第一行匹配!格式化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