2014-06-23 26 views
0

我在嘗試讀取C中的空格字符時遇到問題。我想要做的是在詢問名和姓時讀取用戶輸入。在詢問用戶輸入時讀取空格C

例如,我提示用戶輸入他們的名字,他們鍵入類似「彼得史密斯」的東西。有了這些信息,我想把它寫入一個文件。

將它寫入文件時,文件只讀取姓氏「Smith」。我如何閱讀整個字符串?

以下是我問:

printf("\nPlease enter your first and last name: \n"); 
scanf("%[^\n]", name); 
fgets(name, sizeof(name), stdin); 
+0

您可以執行strchr。 http://www.cplusplus.com/reference/cstring/strchr/ 然後,一旦你發現空白區可能存儲在一個變量 – KRUKUSA

+0

再次閱讀scanf的手冊頁。也許'%s'甚至'%s%s'會更合適。 – lornix

+3

scanf的這種用法對我很有用。但是,fgets部分是什麼?也許問題出在你程序的另一部分。 –

回答

2

我不認爲你的問題出在您發佈的片斷。下面是我在我的Linux系統上寫道,試圖查明問題的示例程序:

#include <stdio.h> 

int main() 
{ 
    char name[128]; 
    int num_scans = 0; 
    FILE *out = fopen("name.txt", "w"); 

    if(out == NULL) 
    { 
     printf("Failed to open file for write.\n"); 
     return 1; 
    } 

    printf("\nPlease enter your first and last name: \n"); 
    num_scans = scanf("%127[^\n]", name); 

    if(num_scans < 1) 
    { 
     printf("Error reading name.\n"); 
     return 2; 
    } 

    fprintf(out, "%s\n", name); 

    fclose(out); 

    return 0; 
} 

這似乎爲我工作:

$cat name.txt 
Peter Smith 

如果您發佈的代碼,你用來寫名字一個文件,可能會顯示錯誤的來源。

+2

在'scanf()'格式中使用'「%127 [^ \ n]」會更安全。當然,你也應該檢查'scanf()'的返回值。換行之前的空白幾乎總是不必要的(儘管這是從問題中複製而來)。 –

2

代碼工作正常。 fgets調用會替換您爲名字讀取的值。

你應該堅持一種輸入方案。當你在輸入範例之間切換時會發生「奇怪」的事情。 (從技術上講,它們正是應該發生的事情,但典型的用戶往往不太確切地知道每個功能的工作方式,以及輸入流保留在什麼狀態。)