2016-12-06 49 views
0

這是我的「電話簿」程序的一部分。用文件io打印整行

void viewall(){ 
    int n, checking = 0; 
    char name[50]; 

    fp = fopen("Phonebook.txt","r"); 
    printf ("\n\n"); 

    fscanf (fp, "%s %d", name, &n); 
    while (!feof(fp)){ 
     printf (" %s +880%d\n", name, n); 
     fscanf (fp, "%s %d", name, &n); 
     ++checking; 
    } 

    if (checking == 0){ 
     printf (" Contact List is Empty. No Contacts to Show..."); 
    } 

    printf ("\n\n"); 
    fclose(fp); 

    menu(); 
} 

此部分顯示列表中的所有聯繫人。但是,如果任何聯繫人名稱有兩個部分,他們會分開。例如:我輸入Anik Shahriar作爲姓名,然後輸入我的電話號碼。我看着我的文件,這個數據在那裏應該如何。

Anik Shahriar 01*******93 

但是當我想顯示所有的聯繫人。它得到了印像這樣:

Anik 0 
Shahriar 01*******93 

我怎樣才能使程序打印整個行?

+0

當你說'fscanf(fp,「%s%d」,name,&n)'你正在編程時發現'Anik'這是一個字符串,然後看到一個空格並尋找一個數字並且找不到它(「Shahriar」是一個字符串),所以它把'0'放在'n'中。 __然後___找到「Shahriar」和電話號碼,該部分正確。總之,除非你有名字和姓氏的變量,否則你不能用空格來分隔名和姓。 – Jerfov2

+0

它工作@ user3121023但另一個問題。這次名稱打印在同一行,但聯繫號碼打印在下一行。 –

+0

它沒有之前。他們在同一條線上。在使用fgets之後,他們分開排隊。我如何終止fgets中的'\ n'? –

回答

1

此行爲是由線

fscanf (fp, "%s %d", name, &n); 

格式標識符%S爲單串的掃描引起。任何空格字符結束掃描。

http://www.cplusplus.com/reference/cstdio/scanf/

%S
字符串字符
任何數量的非空白字符, 停在找到的第一個空白字符的。在存儲的序列末尾自動添加終止空字符 。

我建議使用ca CSV文件並使用類似的格式字符串。

scanf("%[^,] %d", name, number) 

不要忘記測試scanf結果值。

+0

因爲我是一個討厭的人 - 看起來很有趣,你鏈接到一個'C++'網站來回答'c'問題;) – KevinDTimm