Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » strncmp

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.05.2009, 16:18 Uhr
~ilfe
Gast


Halli Halo !

Ich habe ein dringendes Problem mit meinem Programm. es soll eine txt datei auslesen können und die ersten 4 Zeichen der txt mit " RBG" vergleichen!
Leider weiss ich nicht genau was ich mit str1 machen soll in der strncmp Funktion!

C++:
/* Aufgabe des Programms:
Es soll eine Datei geöffnet werden können und die erste Zeile soll nach
" RBG" geprüft werden*/




#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char datnam[40] = "SPZ 180 .rbg";
char i;

int main( void )
{
    FILE * datei;  
    char zeile[80];
      
    datei = fopen( datnam, "r" );  //einlesen der Datei
    if( datei == 0 )
    {
        printf("Fehler: Datei existiert nicht");
        return 1;
    }
    
    i = strncmp ( str1, " RBG", 4);
    if (i != 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 );
    }



Leider konnte mir bisher keienr helfen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.05.2009, 17:07 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja du musst halt natürlich erstmal die 4 bytes aus der datei lesen, welche du dann vergleichen willst. also z.b so:


C++:
  char str1[4];
  fgets( str1, 4, datei );
    i = strncmp ( str1, " RBG", 4);
    if (i != 0)
    {
        printf("Sie haben die falsche Datei gewählt!");
        return 1;
    }
        
    ...



ansonsten: warum hast du "i" global gemacht? beim dateinamen kann ichs ja noch verstehen, aber das "i"? globale variablen sind bäh ... immer den kleinsten bereich ("scope") verwenden der möglich ist

aso und für "C" muss natürlich die deklaration von str1 zu den anderen deklarationen dazu, aber das denke ich weißt du ...
--
class God : public ChuckNorris { };

Dieser Post wurde am 01.05.2009 um 17:08 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.05.2009, 17:14 Uhr
0xdeadbeef
Gott
(Operator)


str1 muss mindestens eine Länge von 5 haben, sonst wird das mit dem Sentinel nichts.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.05.2009, 10:15 Uhr
~life
Gast



C++:
int main( void )
{
    FILE * datei;  
    char zeile[80];
    char i, str1[5];  
    
    datei = fopen( datnam, "r" );  //einlesen der Datei
    if( datei == 0 )
    {
        printf("Fehler: Datei existiert nicht");
        getchar();
        return 1;
    }
    
    fgets( str1, 4, datei );
    i = strncmp ( zeile ," RBG", 4);
    if (i != 0)
    {
        printf("Sie haben die falsche Datei gewaehlt!");
        getchar();
        return 1;
    }
        
    fgets( zeile, 79, datei );
    while( ! feof(datei) )
    {
        printf("%s", zeile );
        fgets( zeile, 79, datei );
    }
        
        
    getchar();
    fclose( datei );
    return 0;
}



so hab ich das programm abgeändert, aber irgendwie scheint es nicht richtig zu sein denn wenn cih sone datei hervorrufe die mit " RBG" anfängt schribetd er mir das ich die falsche datei gewählt habe.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.05.2009, 15:58 Uhr
0xdeadbeef
Gott
(Operator)


Das liegt daran, dass du in zeile einliest, aber str1 mit " RGB" vergleichst.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.05.2009, 16:05 Uhr
~life
Gast


Das versteh ich nicht, ich will doch str1 mit " RBG" vergleichen?
Kannste mir das richtig zeigen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.05.2009, 17:41 Uhr
TOSHMAX



Du vergleichst nicht str1 mit " RGB" sondern zeile.

Richtig müsste es heißen:

C++:
    fgets( str1, 5, datei );
    i = strncmp ( str1, " RBG", 4);


Dieser Post wurde am 02.05.2009 um 17:41 Uhr von TOSHMAX editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.05.2009, 18:13 Uhr
~life
Gast


WOW !! Super danke euch allen!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.05.2009, 22:03 Uhr
~life
Gast


Halo habe doch noch eine Frage!


C++:
    fgets( str1, 5, datei );
    i = strncmp ( str1 ," RBG", 4);
    if (i != 0)



warum muss oben eine 5 angegeben werden? ich will doch nur 4 Zeichen überprüfen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
02.05.2009, 22:18 Uhr
0xdeadbeef
Gott
(Operator)


Strings werden durch ein Null-Byte (sog. Sentinel) am Ende abgeschlossen, also braucht ein String am Ende Platz für ein zusätzliches Zeichen. fgets erwartet die Länge des Buffers, die benutzt werden darf, als Parameter, deswegen die 5.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: