scanf & datei einlesen via konsolenkommando



  • hy!

    ich habe gerade ein Problem, wie ich mein Programm zu bekomme folgendes richtig umzusetzen:

    Aus der Datei in.dat sollen immer 2 Zahlen eingelesen werden, miteinander addiert und das ergebnis in die datei out.dat geschrieben werden. Das Programm soll dies so oft wiederholen, bis das Dateiende erreicht ist.

    Das Programm wird auf der Kommandozeile aufgerufen:

    ./add <in.dat | ./add >out.dat
    

    (vorgabe vom Prof)

    Nun habe ich folgendes geschrieben:

    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
      int puffer1, puffer2, i;
    
      for (i=0;i<100;i++) {  // absicherung, hoert auto. nach 100 zahlen auf
        if (scanf ("%d %d", &puffer1, &puffer2) != EOF) {
          puffer1 = puffer1 + puffer2;
          printf("puffer1 = %d + %d", puffer1, puffer2);
          printf("%d \n", puffer1);
    
          sleep(0.2);
        }
        else {
          break;
        }
      }
    
      return (0);
    }
    

    das hier ist die in.dat:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
    

    und das hier ist ein auszug der datei out.dat:

    puffer1 = -1208701104 + 134513881-1208701104 
    puffer1 = -1208701104 + 134513881-1208701104 
    puffer1 = -1208701104 + 134513881-1208701104 
    puffer1 = -1208701104 + 134513881-1208701104 
    puffer1 = -1208701104 + 134513881-1208701104 
    puffer1 = -1208701104 + 134513881-1208701104 
    puffer1 = -1208701104 + 134513881-1208701104 
    puffer1 = -1208701104 + 134513881-1208701104 
    puffer1 = -1208701104 + 134513881-1208701104 
    puffer1 = -1208701104 + 134513881-1208701104 
    puffer1 = -1208701104 + 134513881-1208701104 
    puffer1 = -1208701104 + 134513881-1208701104 
    puffer1 = -1208701104 + 134513881-1208701104 
    puffer1 = -1208701104 + 134513881-1208701104 
    puffer1 = -1208701104 + 134513881-1208701104 
    puffer1 = -1208701104 + 134513881-1208701104
    

    was macht der für ein mist beim einlesen der zahlen?
    oder geht der in der datei nicht automatisch weiter und liest immer nur die erste zahl ein, aber das sehe ich ja auch nicht in der out.dat. wenn ich das programm normal aufrufe und zahlen einzeln eingebe via konsole, funzt alles prima ...



  • Du öffnest weder eine Datei zum Lesen, noch eine zum Schreiben.
    Ein Wunder das deine Output-Datei überhaupt über Inhalt verfügt.
    Ausserdem schreibt man in eine Datei mit

    fprintf(...)
    

    und liest mit

    fscanf(...)
    


  • MiP schrieb:

    Du öffnest weder eine Datei zum Lesen, noch eine zum Schreiben.
    Ein Wunder das deine Output-Datei überhaupt über Inhalt verfügt.
    Ausserdem schreibt man in eine Datei mit

    fprintf(...)
    

    und liest mit

    fscanf(...)
    

    ex.aveal schrieb:

    Das Programm wird auf der Kommandozeile aufgerufen:

    ./add <in.dat | ./add >out.dat
    

    (vorgabe vom Prof)

    ^^^ bitte ganz lesen!!! scanf ist in diesem fall gleich mit fscanf(stdin, ...)



  • Kann es sein, dass die Dateinamen der Ein- und Ausgabedatei beim Start als Parameter übergeben werden sollen ?

    meinProgramm.exe in.dat out.dat
    

    Ansonsten verstehe ich nicht, was das soll.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-237938-and-highlight-is-parameter.html



  • MiP schrieb:

    Kann es sein, dass die Dateinamen der Ein- und Ausgabedatei beim Start als Parameter übergeben werden sollen ?

    meinProgramm.exe in.dat out.dat
    

    Ansonsten verstehe ich nicht, was das soll.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-237938-and-highlight-is-parameter.html

    Ja genau, als Parameter.
    Läuft alles unter Unix/Linux. Rufe das Programm über das Terminal (bei Windows dos-konsole) auf



  • Wie Du die übergebenen Dateinamen extrahierst, kannst Du in dem von mir eingefügten Link nachlesen.
    Mit diesen Dateinamen öffnest Du dann 2 Dateien, eine zum Lesen, eine zum Schreiben.
    Ein Beispiel findest Du hier
    http://www.cplusplus.com/reference/clibrary/cstdio/fopen/
    Zum Lesen/Schreiben benutzt Du dann
    fprintf(...) und fscanf(...)
    http://www.cplusplus.com/reference/clibrary/cstdio/fprintf/


Anmelden zum Antworten