Strcmp() fkt. nicht
Hoffe, dass ich im richtigen Forum gelandet bin...
Möchte gerne zwei Dateien öffnen und vergleichen.
Die Dateien werden auch geöffnet. Nicht wundern ich habe mir die eingelesenen Strings ausgeben lassen, um herauszufinden was strcmp() überhaupt vergleicht.
Jetzt meine Fragen:
1. Warum wird die while-Schleife nicht richtig ausgewertet? (compare wird viermal ausgeführt, obwohl es nur jeweils zwei Zeilen in den beiden .txt-Dateien gibt)
2. Warum gibt fgets() zwei Mal so einen kryptischen String aus?
Konsole:
Code:
Möchte gerne zwei Dateien öffnen und vergleichen.
Die Dateien werden auch geöffnet. Nicht wundern ich habe mir die eingelesenen Strings ausgeben lassen, um herauszufinden was strcmp() überhaupt vergleicht.
Jetzt meine Fragen:
1. Warum wird die while-Schleife nicht richtig ausgewertet? (compare wird viermal ausgeführt, obwohl es nur jeweils zwei Zeilen in den beiden .txt-Dateien gibt)
2. Warum gibt fgets() zwei Mal so einen kryptischen String aus?
Konsole:
Unterschiedliche Datensaetze
Satz1: Dies ist der erste Satz.Dies ist der erste Satz.Dies ist der erste Satz.
Satz2: (ç a*]ì axì a�ÕÍ"
Unterschiedliche Datensaetze
Satz1: Dies ist der erste Satz.Dies ist der erste Satz.Dies ist der erste Satz.
Satz2: (ç a*]ì axì a�ÕÍ"
Unterschiedliche Datensaetze
Satz1: Dies ist der erste Satz.Dies ist der erste Satz.Dies ist der erste Satz.
Satz2: Dies ist der erste Satz.Dies ist der erste Satz.Dies ist der erste Satz.
Identische Datensaetze
Satz1: Dies ist der erste Satz.Dies ist der erste Satz.Dies ist der erste Satz.
Satz2: Dies ist der erste Satz.Dies ist der erste Satz.Dies ist der erste Satz.
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSTRING 81
/*
*
*/
int main() {
FILE *d1_ptr, *d2_ptr;
char compare1[MAXSTRING], compare2[MAXSTRING];
if((d1_ptr=fopen("c:\\compare\\t1.txt","r"))==NULL || (d2_ptr=fopen("c:\\compare\\t2.txt","r"))==NULL)
{
perror("Fehler beim öffnen der Datei");
exit(2);
}
else
{
while (fgets(compare1, MAXSTRING, d1_ptr)!=NULL || fgets(compare2, MAXSTRING, d2_ptr)!=NULL)
{
if ((strcmp(compare1, compare2))==0)
{
printf("Identische Datensaetze");
printf("\nSatz1: %s \nSatz2: %s\n", &compare1, &compare2);
}
else
{
printf("Unterschiedliche Datensaetze");
printf("\nSatz1: %s \nSatz2: %s\n", &compare1, &compare2);
}
}
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 174957
Url: https://administrator.de/contentid/174957
Ausgedruckt am: 26.11.2024 um 10:11 Uhr
1 Kommentar
1. Warum wird die while-Schleife nicht richtig ausgewertet?
Weil die C-Auswertung Lazy ist.
Oder anders gesagt: Wenn die erste Bedingung in einem ODER wahr ist dann ist es auch egal was mit der Zweiten ist.
Entsprechend wird zuerst nur die linke Datei und danach die rechte ausgelesen.
2. Warum gibt fgets() zwei Mal so einen kryptischen String aus?
Weil du deine Variablen nicht sauber initialisierst und irgendwo durch den RAM wilderst...
&compare1
Ist übrigens quatsch. Eine Variable auf einen Array ist immer ein Pointer.
Das funktioniert bei dir überhaupt nur weil manche Compiler die Eigenschaft haben den Fehler "auszukorrigieren".