tutorials.de Buch-Aktion 05/2012
Like Tree5Danke
  • 1 Beitrag von sheel
  • 1 Beitrag von sheel
  • 1 Beitrag von sheel
  • 1 Beitrag von ComFreek
  • 1 Beitrag von sheel
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
249
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Googlehupf Googlehupf ist offline Mitglied Silber
    Registriert seit
    Jun 2011
    Beiträge
    76
    Hallo,

    ich hab ein Problem.
    Aufgabenstellung etc. steht im Code als Comment.

    Nur wenn ich bei "count_lines" schon bis zum Ende der Datei gehe.

    Darum wird die while bei search_hash nicht berücksichtig, richtig?

    Kann man das net irgenwie resetten?

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    
    /*Aufgabe:
       Schreiben Sie zwei Unterprogramme:
       a) Ein Unterprogramm um die Zeilen in einem File zu zählen und ans 
          Hautptprogramm zurueck zugeben. 
     
             
       b) Ein Unterprogramm um die Zeilen im File durchzusuchen und alle Zeilen die
          mit einem # beginnen in ein neues File.
          zu schreiben.
    */
     
    #include <stdio.h>
     
    #define MAX_LEN 100
     
    int count_lines(FILE* text, FILE* erg);
    void search_hash(FILE* text, FILE* erg);
     
     
    int count_lines(FILE* text, FILE* erg)
    {
      int anz=0;
     
      char a[MAX_LEN];
     
      while(!feof(text))
      {
        fgets(a,MAX_LEN,text);
        anz++;
      }
     
      return(anz);
    }
     
    void search_hash(FILE* text, FILE* erg)
    {
      char b[MAX_LEN];
     
      while(!feof(text))
      {
        fgets(b,MAX_LEN,text);
     
        if(b[0] == '#')
        {
          fprintf(erg,"%s",b);    
        }
      }
    }
     
    int main()
    {
      FILE*text=NULL;
      FILE*erg=NULL;
     
      int anz=0;
     
      text=fopen("text.txt","r");
      if(text == NULL)
      {
        printf("fehler beim lesen(text.txt)");
        exit(-1);
      }
     
      anz=count_lines(text,erg);
     
      erg=fopen("erg.txt","w");
      if(erg == NULL)
      {
        printf("fehler beim schreiben(erg.txt)");
        exit(-1);
      }
     
      search_hash(text,erg);
     
      fclose(text);
      fclose(erg);
     
      return(0);
    }

    MfG Googlehupf
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi

    Warum heißt die eine Funktion search_hash? Wo ist da der hash?

    Was macht count_lines mit Zeilen, die länger als 100 sind?
    search_hash genauso.

    Bei der "Fehler bei schreiben"-Meldung sollte die Lesedatei im if wieder geclosed werden.

    Zum resetten:
    Code cpp:
    1
    
    fseek(text, 0, SEEK_SET);

    Gruß
    Googlehupf bedankt sich. 
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  3. #3
    Googlehupf Googlehupf ist offline Mitglied Silber
    Registriert seit
    Jun 2011
    Beiträge
    76
    Zitat Zitat von sheel Beitrag anzeigen
    Hi

    Warum heißt die eine Funktion search_hash? Wo ist da der hash?

    Was macht count_lines mit Zeilen, die länger als 100 sind?
    search_hash genauso.
    Naja in der Text-Datei: text.txt steht drinnen:
    #ich habe
    urlaub
    #das wetter
    ist schön

    hier kann man ja das hash sehn .
    Geändert von Googlehupf (04.09.11 um 20:00 Uhr)
     

  4. #4
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Also bei "Hash" denk ich eher an sowas: 0x1e4b3hha
    # ist eine Raute.

    Egal...
    Googlehupf bedankt sich. 
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  5. #5
    Googlehupf Googlehupf ist offline Mitglied Silber
    Registriert seit
    Jun 2011
    Beiträge
    76
    Ok dann sorry falsche Übersetzung von mir .

    und bei fscanf wäre das dann fflush(stdin)?
     

  6. #6
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Was wäre fflush(stdin)?

    Das fseek von oben setzt die Stelle, an der gelesen wird, wieder an den Dateianfang.

    fflush macht was ganz anderes: Bei irgendeinem Schreibvorgang, bei dem die Daten vom Betriebssystem zwischengespeichert werden, den Buffer leeren und wirklich rausschreiben.
    Beispiel: Schreiben einer Datei.
    Wenn es nur wenig Byte sind werden die von Windows zwischengespeichert, statt sofort auf die Festplatte geschrieben.
    Beim fclose wird dann erst wirklich geschrieben. Mit fflush kann man das schon vorher erzwingen, ohne die Datei zu schließen.

    Bei irgendeinem Eingabezeug (wie fscanf, scanf etc) hat fflush übrigens gar nichts zu suchen
    NUR bei Ausgabe (Bildschirm, Datei etc). Alles, was rausgeht..

    Gruß
    Googlehupf bedankt sich. 
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  7. #7
    Avatar von ComFreek
    ComFreek ComFreek ist offline [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.358
    Blog-Einträge
    4
    Zitat Zitat von sheel Beitrag anzeigen
    Also bei "Hash" denk ich eher an sowas: 0x1e4b3hha
    # ist eine Raute.

    Egal...
    Zwar off-topic, aber bei Wikipedia wirds es auch erwähnt: http://de.wikipedia.org/wiki/Hash.
    Auch wenn man bei Google sucht tauchen einige Forenbeiträge auf.

    Der erste Gedanke war bei mir aber auch MD5-Hash oder sowas.
    Googlehupf bedankt sich. 
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  8. #8
    Googlehupf Googlehupf ist offline Mitglied Silber
    Registriert seit
    Jun 2011
    Beiträge
    76
    Ok, ich danke euch.

    Dadurch das ich noch Fragen habe... stelle ich sie hier gleich.

    Mein Problem ist, dass ich in der letzten Zeile kein '\n' befinden, kann ich auch nicht die Summe von den Zahlen, Buchstaben mit einer # ausgeben.

    Da gibt es einen Trick mit dem Return Value von fscanf oder?

    Wenn kein Feld eingelesen werden kann das is der Rückgabewert 0 und sonst 1 oder?

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    
    /*Aufgabe:
       Schreiben Sie zwei Unterprogramme:
       a) Ein Unterprogramm um zeilenweise eine Kontrollzahl zu errechnen
          und diese Zahl am Ende der Zeile einzufügen.
          Die Kontrollzahl ist die Summe aller ASCII-Codes in der Zeile ohne die Leerzeichen.
          Die Zahl soll am Ende der Zeile mit einem # getrennt ausgegeben werden.
          
          Hinweis! Verwenden Sie zum einlesen %c
          
       
       b) Ein Unterprogramm um alle Werte im File auf mm umzurechnen und am Bildschirm auszugeben.
     
    */
     
    #include <stdio.h>
     
    #define MAX_LEN 100
     
     
    void convert(FILE* text, FILE* erg);
    void count_kontrollzahl(FILE* text, FILE* erg);
     
     
    void convert(FILE* text, FILE* erg)
    {
      char b[MAX_LEN];
      int a=0;
      int erg1=0;
     
      while(!feof(text))
      {
        fscanf(text,"%d%s\n",&a,b);
     
        if((b[0] == 'm') && (b[1] == 'm'))
        {
          erg1=a*1;
          printf("%dmm\n",erg1);
        }
     
        if((b[0] == 'm') && (b[1] == '\0'))
        {
          erg1=a*1000;
          printf("%dmm\n",erg1);
        }
     
        if((b[0] == 'd') && (b[1] == 'm'))
        {
          erg1=a*100;
          printf("%dmm\n",erg1);
        }
     
        if((b[0] == 'c') && (b[1] == 'm'))
        {
          erg1=a*10;
          printf("%dmm\n",erg1);
        }
      }
     
      rewind(text);
    }
     
    void count_kontrollzahl(FILE* text, FILE* erg)
    {
      char a='x';
      int x=0;
      int sum=0;
     
      while(!feof(text))
      {
        fscanf(text,"%c",&a);
     
        if(a == '\n')
        {
          a='#';
          fprintf(erg,"%c%d\n",a,sum);
        }
        else
        {
          fprintf(erg,"%c",a);
        }
        
        sum+=a;
      }
    }
     
     
    int main()
    {
      FILE*text=NULL;
      FILE*erg=NULL;
     
      text=fopen("text.txt","r");
      if(text == NULL)
      {
        printf("fehler beim lesen(text.txt)");
        exit(-1);
      }
     
      convert(text,erg);
     
      erg=fopen("erg.txt","w");
      if(text == NULL)
      {
        printf("fehler beim schreiben(erg.txt)");
        exit(-1);
      }
     
      count_kontrollzahl(text,erg);
     
      fclose(text);
      fclose(erg);
    }

    LG Googlehupf
     

  9. #9
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Wie schaut denn das File diesmal aus?
    Und warum muss man %c verwenden? Sowas blödes...
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  10. #10
    Googlehupf Googlehupf ist offline Mitglied Silber
    Registriert seit
    Jun 2011
    Beiträge
    76
    Zitat Zitat von sheel Beitrag anzeigen
    Wie schaut denn das File diesmal aus?
    Und warum muss man %c verwenden? Sowas blödes...
    Naja, weis net.

    In text.txt steht:
    100m
    1000mm
    10cm
    1dm

    Und anscheinend kann man das mit der letzen Zeile, wo kein \n ist, irgendwie mit dem Rückgabewert von fscanf lösen ->

    Code cpp:
    1
    2
    
    retval=fscanf(...)
    if(retval == 1 .....)
     

  11. #11
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Ja.
    Bei einem %c wird im OK-Fall 1 zurückgegeben, sonst nicht 1.
    Googlehupf bedankt sich. 
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 09.07.11, 09:38
  2. File Input/Output
    Von Googlehupf im Forum C/C++
    Antworten: 10
    Letzter Beitrag: 05.06.11, 12:34
  3. Übungen für File Input Output
    Von C_Boy im Forum C/C++
    Antworten: 11
    Letzter Beitrag: 17.05.11, 15:12
  4. Antworten: 2
    Letzter Beitrag: 26.07.06, 09:16
  5. input/output probleme
    Von Darko im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 25.04.04, 11:01