Problem mit strncmp
-
Hallo Comm,
ich habe folgendes Problem.
Ich hab zunächst ein Programm das eine .txt. Datei ausliest. Nun will ich dem Programm eine strncmp Funktion zufügen, mit der in der ersten Zeile der txt die ersten 4 Buchstaben überprüft werden, denn diese sollen immer _RBG sein, sonst soll das Programm schließen ( _ soll eigentlcih ein LEERZEICHEN sein!).
Also hier einmal die txt Datei wie sie grob aussieht wobei es ja im Prinzip nur auf die ersten 4 Zeichen ankommt:
"
RBG
Müller
H.Lang
18. 3.2008
950.000000 5300.00000 1080.00000 2410.00000 0.00000000E+00
19 1 0 0 0 0
4210.00000 3010.00000 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00
4 3 0 0 0 0
1 3 9 0 0 0 ..."#include <stdio.h> #include <stdlib.h> #include <string.h> char datnam[40] = "SPZ 180 .rbg"; /* nur global moeglich !! */ int main( void ) { FILE * datei; /* Struktur fuer Datei */ char zeile[80]; /* Annahme: max 80 Zeichen */ datei = fopen( datnam, "r" ); /* r = read */ if( datei == 0 ) { printf("Fehler: Datei existiert nicht"); return 1; } if(strncmp( str1, str2, 4) != 0) printf("Sie haben die falsche Datei gewählt!!"); return 1; fgets( zeile, 79, datei ); while( ! feof(datei) ) { printf("%s", zeile ); fgets( zeile, 79, datei ); } getchar(); fclose( datei ); return 0; }
das Problem istd as ich nicht mehr genau weiter weiss was ich mit dem str1 und dem str2 machen soll??
Ich hoffe es ist verständlcih
-
Hi!
Es gibt mehrere Möglichkeiten, eine davon guckst du:
#include <stdio.h> enum {linelen=80}; const char* indenifier = " RGB"; int main() { char* file = "test.txt"; char buf [linelen+1] = {0}; FILE* fp = fopen(file,"r"); if ( fp == NULL ) return 0; fgets (buf, strlen(indenifier)+1, fp); if (0 != strcmp(buf,indenifier)) puts("Invalid file format."); else puts ("Fileformat ok."); fclose(fp); return 0; }
Gruß,
B.B.
-
ich check das nicht, kannste das vllt in meins einbauen???
-
Was ist denn unverständlich?
-
#include <stdio.h> #include <stdlib.h> #include <string.h> char datnam[40] = "SPZ 180 .rbg"; /* nur global moeglich !! */ char zeile[80]; /* Annahme: max 80 Zeichen */ const char* indenifier = " RGB"; int main( void ) { char buf [zeile+1] = {0}; FILE* datei = fopen( datnam, "r" ); /* r = read */ if( datei == 0 ) // statt 0=NULL? { printf("Fehler: Datei existiert nicht"); return 1; } fgets( zeile, strlen(indenifier)+1, datei ); if(strncmp( zeile, indenifier) != 0) printf("Sie haben die falsche Datei gewählt!!"); return 1; while( ! feof(datei) ) { printf("%s", zeile ); fgets( zeile, 79, datei ); } getchar(); fclose( datei ); return 0; }
so ich habs nun so abgeändert aber irgendwie klappt das nciht
und vor allem wir haben ja jetzt nirgends mehr angegeben wieviel zeichen überprüft werdn soltlen
-
Hier noch mal überarbeitet:
#include <stdio.h> char datnam[40] = "test.txt"; /* nur global moeglich !! nö, auch lokal machbar!*/ char zeile[80]; /* Annahme: max 80 Zeichen */ const char* identifier = " RGB"; int main( void ) { FILE* datei = fopen( datnam, "r" ); /* r = read */ if( datei == NULL ) // statt 0=NULL? Egal. { printf("Fehler: Datei existiert nicht"); return 1; } fgets( zeile, strlen(identifier)+1, datei ); if(strncmp( zeile, identifier) != 0) { printf("Sie haben die falsche Datei gewählt!!"); fclose(datei); return 1; } while( NULL != fgets( zeile, 79, datei ) ) printf("%s", zeile ); getchar(); fclose( datei ); return 0; }
Die Anzahl der Zeichen wird beim Einlesen festgelegt.
-
also ich habe noch folgendes Problem... wenn ich das Programm so starte wie du mir das hier geschrieben hast kommt in der zeile mit der strncmp funktion immer ein fehler.
und da die syntax
int strncmp(const char *s1, const char *s2, size_t n);
lautet
hab ich die zeile nun so verändertif(strncmp( zeile, identifier, 4) != 0)
und dann klappt das program aber es schließt sich immer sofort. ich hab da schon versucht ab und zu ein getchar(); zischen zu bauen aber es bringt nichts
also mein aktueller quellcode:#include <stdio.h> char datnam[40] = "SPZ 180 .rbg"; char zeile[80]; /* Annahme: max 80 Zeichen */ const char* identifier = " RGB"; int main( void ) { FILE* datei = fopen( datnam, "r" ); /* r = read */ if( datei == NULL ) { printf("Fehler: Datei existiert nicht"); return 1; } fgets( zeile, strlen(identifier)+1, datei ); if(strncmp( zeile, identifier, 4) != 0) { printf("Sie haben die falsche Datei gewählt!!"); fclose(datei); return 1; } while( NULL != fgets( zeile, 79, datei ) ) printf("%s", zeile ); getchar(); fclose( datei ); return 0; }
-
Hast Recht, bei der überarbeiteten Version hab ich vergessen strncmp durch strcmp zu ersetzen.
Kannst also if(strcmp( zeile, identifier) != 0)) schreiben, die Anzahl wird beim Einlesen berücksichtigt.Füge noch dort getchar ein, wo das Programm rausspringen kann, bei den return.
Dann schließt sich auch nichts.Gruß,
B.B.