2016-12-06 7 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(); 
} 

この部分はすべての連絡先をリストに表示します。しかし、連絡先の名前に2つの部分がある場合、それらは分かれています。たとえば、名前としてAnik Shahriarに入力してから自分の番号を入力します。私は私のファイルを見て、このデータはそこにあるべきだった。

Anik Shahriar 01*******93 

しかし、すべての連絡先を表示したいとき。

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

どうすればプログラムを行全体に印刷できますか?

+0

( "Shahriar"は文字列です)ので、 'n'に' 0'を入れます。 __The__それは "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結果の値をテストするのを忘れないでください。 'fscanf(fp、 "%s%d"、name、&n) `あなたがプログラムである` Anik`が文字列であることを見て、スペースを見て数字を探して見つからないときは

+0

私はパンダントなので、 'C++'質問に答えるために 'C++'ウェブサイトにリンクするのは面白いようです;) – KevinDTimm