2013-03-05 42 views
4
int main(int argc, char** argv) 
{ 
//Local Declaration 
char last_name[20]; 
char first_name[20]; 
char phone_number[20]; 
char address[30]; 

//Statement 
printf("Enter your last name: "); 
fgets(last_name, 20, stdin); 

printf("Enter your first name: "); 
fgets(first_name, 20, stdin); 

printf("Enter your phone number: "); 
fgets(phone_number, 20, stdin); 

printf("Enter your address: "); 
fgets(address, 30, stdin); 

printf("=====Address book=====\n"); 
printf("Name: %s%s\n", first_name, last_name); 
printf("Phone Number: %s\n", phone_number); 
printf("Address: %s\n", address); 
return (EXIT_SUCCESS); 
} 

結果並沒有像我預想的那樣出來......我的意思是名字和姓氏在一行(例如馬克扎克伯格)。但它出來像這樣fgets意外的結果

馬克

扎克伯格

這裏有什麼問題?爲什麼中間有一條新線?

+2

'fgets'不會跳過'\ n',那你的工作 – 2013-03-05 09:48:52

回答

4

參見手冊頁

引用:

與fgets()至多一個小於從流,並將它們存儲大小的字符讀取到緩衝器由s指向。讀取在EOF或換行符後停止。如果讀取換行符,則將其存儲到緩衝區中。終止空字節(aq \ 0aq)存儲在緩衝區中的最後一個字符之後。

所以由fgets讀取的字符串在最後包括新的行字符。您需要將其刪除。

EDIT

要刪除線的端部(並允許DOS)做

int end = strlen(first_name) - 1; 
if (end >= 0 && '\n' == first_name[end]) 
{ 
    first_name[end--] = 0; 
    if (end >= 0 && '\r' == first_name[end]) first_name[end] = 0; 
} 
+0

感謝您的回覆!但那麼最後如何去除換行符? – 2013-03-05 09:59:46

+0

任何人都可以想出一個比它更好的方法:'first_name [strcspn(first_name,「\ n」)] ='\ 0';'? – Sebivor 2013-03-05 10:02:10

+0

@modifiablelvalue - 我沒有在我的回覆中使用該功能? – 2013-03-05 10:09:00

1

如由Ed建議,見說明書,以簡單的方式通過' '(簡單空間)替換'\n'可能是:

first_name[strlen(first_name) - 1] = ' '; 

strlen使用string.h,不要忘了包括它

+0

如果最後一個字符不是「\ n'',這會消除重要字符的不良副作用。 – Sebivor 2013-03-05 10:04:35

+0

@modifiablelvalue我知道,我只想給OP – 2013-03-05 10:06:22

+0

提供一個提示。謝謝。這絕對有效:) – 2013-03-05 10:07:47

0

fgets(),將存儲在變量FIRST_NAME「\ n」,當你按下回車鍵,鍵入關口後,使存儲在FIRST_NAME字符串爲「馬克\ n」,printf()將只是做自己的工作,並打印換行符。

另一個好的選擇是使用fscanf()

fscanf (stdin, "%s", first_name); 

編輯:

要檢查fscanf()錯誤。

char str[50]; 
int bytes = -1; 
fscanf (stdin, "%s%n",str,&bytes); 
if(bytes == -1) 
    perror("\nIncomplete Bytes Parsed\n"); 
+0

我喜歡這個。不幸的是,你沒有深入研究fscanf的回報價值。如果您可以向OP顯示如何確保fscanf成功,您可以從我那裏獲得+票。 – Sebivor 2013-03-05 13:23:09

+0

@modifiablelvalue,不錯的建議,真的有幫助.... – 2013-03-05 13:57:26