matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Hochschulmathe
  Status Uni-Analysis
    Status Reelle Analysis
    Status UKomplx
    Status Uni-Kompl. Analysis
    Status Differentialgl.
    Status Maß/Integrat-Theorie
    Status Funktionalanalysis
    Status Transformationen
    Status UAnaSon
  Status Uni-Lin. Algebra
    Status Abbildungen
    Status ULinAGS
    Status Matrizen
    Status Determinanten
    Status Eigenwerte
    Status Skalarprodukte
    Status Moduln/Vektorraum
    Status Sonstiges
  Status Algebra+Zahlentheo.
    Status Algebra
    Status Zahlentheorie
  Status Diskrete Mathematik
    Status Diskrete Optimierung
    Status Graphentheorie
    Status Operations Research
    Status Relationen
  Status Fachdidaktik
  Status Finanz+Versicherung
    Status Uni-Finanzmathematik
    Status Uni-Versicherungsmat
  Status Logik+Mengenlehre
    Status Logik
    Status Mengenlehre
  Status Numerik
    Status Lin. Gleich.-systeme
    Status Nichtlineare Gleich.
    Status Interpol.+Approx.
    Status Integr.+Differenz.
    Status Eigenwertprobleme
    Status DGL
  Status Uni-Stochastik
    Status Kombinatorik
    Status math. Statistik
    Status Statistik (Anwend.)
    Status stoch. Analysis
    Status stoch. Prozesse
    Status Wahrscheinlichkeitstheorie
  Status Topologie+Geometrie
  Status Uni-Sonstiges

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenC/C++EILT: Textdatei auslesen
Foren für weitere Studienfächer findest Du auf www.vorhilfe.de z.B. Astronomie • Medizin • Elektrotechnik • Maschinenbau • Bauingenieurwesen • Jura • Psychologie • Geowissenschaften
Forum "C/C++" - EILT: Textdatei auslesen
EILT: Textdatei auslesen < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

EILT: Textdatei auslesen: Fehlerhaftes auslesen
Status: (Frage) beantwortet Status 
Datum: 14:35 Fr 09.11.2007
Autor: Bacardix

Hi,
ich möchte eine Textdatei auslesen.
In der Datei steht ein 4-zeiliger Text:

Da steh ich nun,
ich armer Tor.
und bin so klug,
als wie zuvor!

Die Datei möchte ich auslesen und später auswerten.
Ich find leider den Fehler in meinem Programm nicht!
Er "verschluckt" die ersten beiden Buchstaben der Zeile 1 und gibt mir nur aus:
steh ich nun,
ich armer Tor.
und bin so klug,
als wie zuvor!

Hier mein Programm:
#include <stdio.h>


int main(void)
{
  FILE *fp1;
  int x=0,i=0;
  char string1[17],zeichen;
  printf("Zeichen:");
  scanf("%c",&zeichen);
  fp1=fopen("test.txt","r");
  fscanf(fp1,"%s",&string1);

   while(fgets(string1,17,fp1)!=0)
      {
          printf("%s",string1);      
          for(i=0;i<17;i++)
          {x+=(string1[i]==zeichen);}
      }
    
   [mm] printf("%d\n",x); [/mm]  
  system("PAUSE");
  return 0;
}
Wäre nett wenn mir das jmd beantworten könnte.

ein zweites Problem ist, dass ich einen bestimmten Buchstaben zählen möchte.
Ich lese den zu zählenden Buchstaben am Anfang des Programms ein und werte den string am ende der schleife einfach nur aus. Sollte der Buchstabe im string gefunden werden soll x inkrementiert werden.
Jedoch gibt er mir auch die anzahl der gefundenen Buchstaben fehlerhaft aus.
Wo liegt der Fehler?


Lg Bacardix


        
Bezug
EILT: Textdatei auslesen: Antwort
Status: (Antwort) fertig Status 
Datum: 18:16 Fr 09.11.2007
Autor: Martin243

Hallo,

da sind zwei Fehler:
1. In der Zeile
fscanf(fp1,"%s",&string1);
übergibst du eine Referenz auf einen Pointer. Das ist doppelt gemoppelt. Es müsste heißen:
fscanf(fp1,"%s", string1);

2. Was willst du überhaupt mit dieser Zeile? Lass sie weg und alles funktioniert.


Gruß
Martin

Bezug
                
Bezug
EILT: Textdatei auslesen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:27 Fr 09.11.2007
Autor: Bacardix

Supi...ja hast recht die Zeile war sinnlos!
Jetzt habe ich aber noch ein Problem mit den Buchstaben zählen!
Er gibt mir bei keinem Buchstaben die richtige anzahl aus!
Meistens ist der Wert um 1 höher.
Aber beim Buchstaben "e" zum Beispiel ist x=6 obwohl nur 3 e's drin sind!???

Bezug
                        
Bezug
EILT: Textdatei auslesen: Antwort
Status: (Antwort) fertig Status 
Datum: 19:00 Fr 09.11.2007
Autor: Martin243

Ach ja!
Schauen wir uns deine Einlese- und Auswertungschleifen an:

   while(fgets(string1,17,fp1)!=0)  //Wir lesen einen String unbekannter Länge ein
      {
          printf("%s",string1);      
          for(i=0;i<17;i++)  //Hier gehen wir von einem 17 Zeichen langen String aus
          {x+=(string1[i]==zeichen);}
      }

Wenn der neue String kürzer ist als der alte, dann bleiben noch die alten Buchstaben im Speicher. Da du aber immer alle 17 auswertest, geht es in die Hose. Also: Auf terminierende Null achten!

Was mich erstaunt: Ich bekomme nicht 6 sondern 4 es.


Gruß
Martin

Bezug
                                
Bezug
EILT: Textdatei auslesen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 19:56 Fr 09.11.2007
Autor: Bacardix

mmmhhh komisch. Also irgendwie bekomme ich auch nach jeder zeile immer doppelt angezeigt wieviele zeichen in der zeile sind, obwohl ich den befehl nur 1 mal aufrufe!
Jede Zeile hat 16 Zeichen...gebe ich also ein:
for (i=0;i<16;i++) stimmt es immernoch nicht!
Ich weiß das am Ende jeder zeile eine "0" kommt (deswegen meine 17 Zeichen). Wie kann ich denn vorgeben das die for-Schleife nach der 0 aufhören soll? ich habs mit i==0 probiert. Geht aber nicht!

Sorry bin noch nicht ganz so c-erfahren!

Bezug
                                        
Bezug
EILT: Textdatei auslesen: Antwort
Status: (Antwort) fertig Status 
Datum: 23:02 Fr 09.11.2007
Autor: Martin243

Hallo,

> Sorry bin noch nicht ganz so c-erfahren!

Macht nix! Du gibst dein Bestes.


> Jede Zeile hat 16 Zeichen...

Echt? Zähl nach.


Ich habe mir das mal genauer angesehen und festgestellt:
1. Bei einigen Zeilen steht noch ein Leerzeichen am Ende, also bis zu 17 Zeichen!
2. Das newline ist da noch gar nicht mitgezählt!
3. Es wird sechsmal eingelesen: Erste Zeile, Rest der ersten Zeile, zweite Zeile, dritte Zeile, Rest der dritten Zeile, vierte Zeile.

Eine Soforthilfemaßnahme wäre direkt zu Beginn der for-Schleife:
if (!string1[i]) break;

Sauberer würde es allerdings, wenn du zeichenweise einlesen würdest.
Oder aber du nimmst den Code mit der Korrektur von oben und legst ihn für ein paar Zeichen mehr aus, also z.B. für 20. Dann passiert das mehrfache Lesen nicht mehr.


Gruß
Martin

Bezug
                                                
Bezug
EILT: Textdatei auslesen: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 00:13 Sa 10.11.2007
Autor: Bacardix

Super Martin...so gehts!
Vielen Dank.
Die eigentliche Aufgabe war es den Text zeilenweise auszugeben, zeilenweise einen bestimmten Buchstaben zu zählen und am Ende die Gesamtanzahl des Buchstabens im Text auszugeben! Das habe ich jetzt mit deiner Hilfe, und sogar ziemlich kurz und knapp (hätten es auch ohne schleifen machen können, so dass das Programm sehr lang wird) geschafft.

Vielen Dank für deine Hilfe!

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.unimatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]