2015-09-20 57 views
0

所以我想格式化此行去的printf似乎覆蓋自身

******************* Flight Reservation Request ********************** 
email name (M 1986/01/01) 

但所有它打印是

******************* Flight Reservation Request ********************** 
(M 1986/01/01) 

,這是否是

FILE * pFileCust; // stream Input for Customer Reservation data 
void processCommandSwitches(int argc, char * argv[], char * * ppszCustomerFileName); 
void processReservations(); 
int main(int argc, char * argv[]) { 
    char * pszCustomerFileName = NULL; 
    // Process the command switches 
    processCommandSwitches(argc, argv, & pszCustomerFileName); 
    // open the Customer Reservation stream data file 
    if (pszCustomerFileName == NULL) 
     exitError(ERR_MISSING_SWITCH, "-c"); 
    pFileCust = fopen(pszCustomerFileName, "r"); 
    if (pFileCust == NULL) 
     exitError(ERR_CUSTOMER_RES_FILENAME, pszCustomerFileName); 
    // process the Reservations 
    processReservations(); 
    fclose(pFileCust); 
    printf("\n"); // included so that you can put a breakpoint on this line 
    return 0; 
} 
/****** you need to document and code this function *****/ 
void processReservations() { 
    rewind(pFileCust); 
    char gender[1]; 
    char dob[11]; 
    char emailAddress[53]; 
    char fullName[31]; 
    char address[31]; 
    char city[21]; 
    char state[31]; 
    char zip[61]; 
    fscanf(pFileCust, "%s %s %s %31[^\n]", gender, dob, emailAddress, fullName); 
    printReservations(emailAddress, fullName, gender, dob, address, city, state, zip); 
} 
printReservations(char email[], char name[], char gender[], char dob[], char address[], char city[], char state[], char zip[]) { 
    printf("******************* Flight Reservation Request **********************\n"); 
    printf("%s %s (%s %s)\n", email, name, gender, dob); 
} 
代碼

輸入文件

M 1986/01/01 [email protected] Pete Moss 
123 Boggy Lane,New Orleans,LA,70112 
H100.15005 2  
H222.15005 2 
H200.15010 2 
H333.15010 2  
END 0 
M 1957/02/02 [email protected]______________________ 
456 Kernel,San Antonio,TX,78210 
H222.15005 10 
HXXX.XXXXX 10 
H333.15010 5 
END 0 
F 1958/03/03 [email protected] Penny Loafer 
789 Walking St,Philadelphia,PA,19102 
H444.15001 1 
H333.15010 1 
END 0 
M 1979/04/04 [email protected] Adam Sandler 
444 Golf View,Hollywood,CA,92274 
H100.15005 3 
END 0 
F 1989/05/05 [email protected] Melba Toast 
222 Cracker Blvd,San Antonio,TX,78222 
H333.15010 2 
H444.15015 2 
END 0 
+0

關於此參數:'char * * ppszCustomerFileName','* *'不是有效的運算符。正確的操作符是'**'I.E.關於這一行沒有內部空間 – user3629249

+0

:'processCommandSwitches(argc,argv,&pszCustomerFileName);'pszCustomerFileName已經是'char **',所以現在添加'&'意味着被調用函數將接收char ***參數。請查閱/ google /'threestarprogrammer' – user3629249

回答

1

在此基礎上建議離退休忍者:

您可能必須在字符串中嵌入\ r。如果您正在讀取在不使用\ r \ n作爲行結束的操作系統上的Windows上創建的文件,則可能會發生這種情況。

我改變了我的代碼:

fscanf(pFileCust, "%s %s %s %31[^\n]", gender, dob, emailAddress, fullName); 

這樣:

fscanf(pFileCust, "%s %s %s %31[^\r\n]", gender, dob, emailAddress, fullName); 

這個固定的問題,現在我的輸出看起來正常。

+0

請解釋爲什麼此更改是必要的;不同的OS可能? – Evert

+0

@Evert根據我讀的課程信息,對於那些選擇在VS中進行操作的人來說,它似乎是Windows和Linux的混合體。他們只是要求它必須在Linux上運行。感覺這些文件中的一些可能在操作系統 –

+1

@MichaelPetch之間穿梭我想我是迂腐或教育。我本可以自己添加解釋(我看到你做了),但希望OP做到這一點。否則,它將成爲一個沒有解釋的複製粘貼答案。手動戈麥斯:你仍然可能想接受這個答案作爲正確的/工作的答案。 – Evert