2016-12-06 3 views
0

Dies ist ein Teil meines 'Telefonbuch' Programms.ganze Zeile mit Datei drucken 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(); 
} 

In diesem Bereich werden alle Kontakte in der Liste angezeigt. Aber wenn ein Kontaktname zwei Teile hat, werden sie getrennt. Zum Beispiel: Ich gebe Anik Shahriar als Name ein und gebe dann meine Nummer ein. Ich schaute auf meine Datei und diese Daten waren da, wie es sein sollte.

Anik Shahriar 01*******93 

Aber wenn ich alle Kontakte anzeigen wollte. Es wurde wie folgt gedruckt:

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

Wie kann ich das Programm drucken die gesamte Zeile?

+0

Wenn Sie sagen 'fscanf (fp,"% s% d ", Name, & n)' Sie sind Programm findet 'Anik', die eine Zeichenfolge ist dann sieht ein Leerzeichen und sucht nach einer Zahl und findet es nicht ("Shahriar" ist eine Zeichenkette), also wird "0" in "n" geschrieben. __Then__ es findet "Shahriar" und die Telefonnummer, die Teile richtig. Zusammenfassend können Sie kein Leerzeichen verwenden, um den Vor- und Nachnamen zu trennen, es sei denn, Sie haben eine Variable für den Vor- und Nachnamen. – Jerfov2

+0

Es funktionierte @ user3121023 Aber ein anderes Problem. Diesmal wird der Name in derselben Zeile gedruckt, aber die Kontaktnummer wird in der nächsten Zeile gedruckt. –

+0

Es war nicht vorher. Sie waren auf der gleichen Linie. Nach der Verwendung von Fgets sind sie in einer separaten Zeile. Wie beende ich '\ n' von fgets? –

Antwort

1

Dieses Verhalten wird durch die Linien verursacht

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

Die Formatkennung% s-Scans für einen einzelnen String. Ein beliebiges Leerzeichen beendet den Scanvorgang.

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

% s
String von Zeichen
Eine beliebige Anzahl von Nicht-Leerzeichen, gefunden beim ersten Leerzeichen zu stoppen. Ein abschließendes Nullzeichen wird automatisch am Ende der gespeicherten Sequenz hinzugefügt.

Ich schlage vor, Ca CSV-Datei zu verwenden und eine Formatzeichenkette wie zu verwenden.

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

Vergessen Sie nicht, den scanf Ergebniswert zu testen.

+0

Weil ich ein Pedant bin - es scheint komisch, dass Sie auf eine 'C++' Website verlinken, um eine 'c' Frage zu beantworten;) – KevinDTimm