tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
20
ZUGRIFFE
1484
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    newbie89 newbie89 ist offline Mitglied Bronze
    Registriert seit
    Aug 2009
    Beiträge
    31
    Hi,

    ich möchte eine datei einlesen die so aus sieht:

    5
    10
    15
    20
    25
    30
    .... das bis 100

    und zwar möchte ich die zeile für zeile einlesen und dann pro zeile die eingelesene zahl mit einer variable vergleichen.
    nehm ich da am besten eine for schleife z.b. so

    FILE*fp;
    int daten[100];
    int i;
    float min;

    fp= fopen ("C:\\ProgramFiles\\cpp\\Katalog1.txt","a+");
    if (fp==NULL)
    printf("Fehler beim Oeffnen.\n");
    else
    printf("Datei erfolgreich eingelesen.\n");


    /* while (fgets(daten, sizeof(daten),fp) !=0)
    fputs (daten,stdout);
    min='C'-'daten[]';
    printf("%f",min);*/

    for (i=0;i<=(sizeof(daten));i++)
    {
    fscanf("%i", &daten[i]) ;

    }
    oder wie gehe ich da am besten vor ...
     

  2. #2
    Avatar von devDevil
    devDevil devDevil ist offline Mitglied Platin
    Registriert seit
    Jun 2005
    Beiträge
    662
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    #include <stdio.h>
     
    int main() 
    {
      FILE* ptr_file = fopen("fscanf.txt", "r");
     
      if (!ptr_file) 
      {
        printf("Error: can't open file.\n");
        return 1;
      }
      printf("File opened successfully.\n");
     
      int temp = -1;
      while (!feof(ptr_file) && temp != 20) /* hier 20 anpassen ... */
          fscanf(ptr_file, "%d", &temp);
      printf(temp == 20 ? "Number found!" : "Number not found!");
     
      fclose(ptr_file);
      return 0;
    }
    newbie89 bedankt sich. 

  3. #3
    newbie89 newbie89 ist offline Mitglied Bronze
    Registriert seit
    Aug 2009
    Beiträge
    31
    Zitat Zitat von devDevil Beitrag anzeigen
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    #include <stdio.h>
     
    int main() 
    {
      FILE* ptr_file = fopen("fscanf.txt", "r");
     
      if (!ptr_file) 
      {
        printf("Error: can't open file.\n");
        return 1;
      }
      printf("File opened successfully.\n");
     
      int temp = -1;
      while (!feof(ptr_file) && temp != 20) /* hier 20 anpassen ... */
          fscanf(ptr_file, "%d", &temp);
      printf(temp == 20 ? "Number found!" : "Number not found!");
     
      fclose(ptr_file);
      return 0;
    }
    Problem das ich eigentlich hauptsächlich hatte war das ich nicht zeilenwert um zeilenwert mit der variable vergleichen kann... kann man vielleicht noch ein paar erklärende sätze dazuschreiben. Danke
     

  4. #4
    Jacal Jacal ist offline Mitglied Bronze
    Registriert seit
    Aug 2008
    Beiträge
    31
    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
    
    #include <stdio.h>
     
    int main()
    {
      // Datei "fscanf.txt" öffnen, "r" heißt nur lesen.
      FILE* ptr_file = fopen("fscanf.txt", "r");
     
      if (!ptr_file)
      {
        // Die Datei existiert nicht - abbrechen!
        printf("Error: can't open file.\n");
        return 1;
      }
      printf("File opened successfully.\n");
     
      // Temporäre Integer-Variable, die zum Einlesen der Zahlen verwendet wird.
      int temp = -1;
      // Solange temp ungleich 20 (oder einer anderen variablen Zahl) ist, suchen wir
      // weiter, undzwar solange, bis das Dateiende erreicht ist (!feof(ptr_file)).
      while (!feof(ptr_file) && temp != 20) /* hier 20 anpassen ... */
          // Eine Zahl aus der Datei einlesen, wird in temp gespeichert
          fscanf(ptr_file, "%d", &temp);
     
      // Wenn temp gleich 20 (oder einer anderen variablen Zahl) ist, wurde die gesuchte
      // Zahl gefunden, andernfalls nicht.
      printf(temp == 20 ? "Number found!" : "Number not found!");
     
      // Datei schließen
      fclose(ptr_file);
     
      return 0;
    }
     

  5. #5
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.800
    Blog-Einträge
    5
    Zitat Zitat von devDevil Beitrag anzeigen
    Code cpp:
    1
    2
    3
    
      int temp = -1;
      while (!feof(ptr_file) && temp != 20) /* hier 20 anpassen ... */
          fscanf(ptr_file, "%d", &temp);
    Das ergibt allerdings eine Endlosschleife, wenn in der Datei nicht als Ganzzahl interpretierbare Zeichen auftauchen. Man sollte hier besser den Rückgabewert von fscanf als Abbruchbedingung verwenden.

    Grüße, Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  6. #6
    newbie89 newbie89 ist offline Mitglied Bronze
    Registriert seit
    Aug 2009
    Beiträge
    31
    kann ich anstatt einer fixen zahl wie etwa die 20 hier nicht irgendwas anderes benutzen denn wenn sich die liste nun verändert aber der code gleich bleibt hab ich ein problem.

    und wie sieht das jetzt mit dem vergleich aus ich kapier nicht ganz wie ich zeile um zeile mit meinem zu vor errechneten wert vergleichen kann das versteh ich einfach hier noch nicht...
     

  7. #7
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Zitat Zitat von newbie89 Beitrag anzeigen
    kann ich anstatt einer fixen zahl wie etwa die 20 hier nicht irgendwas anderes benutzen denn wenn sich die liste nun verändert aber der code gleich bleibt hab ich ein problem.
    Nimm einfach statt der '20' die Variable mit dem von Dir berechneten Wert ! !

    Zitat Zitat von newbie89 Beitrag anzeigen
    und wie sieht das jetzt mit dem vergleich aus ich kapier nicht ganz wie ich zeile um zeile mit meinem zu vor errechneten wert vergleichen kann das versteh ich einfach hier noch nicht...
    Was genau verstehst Du daran nicht
    Es werden zeilenweise die Werte aus der Datei nach 'temp' eingelesen und dann jeweils mit dem gewünschten Vergleichswert (hier fix '20' oder eben die Variable) verglichen .....

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  8. #8
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    ok, vielleicht ist die While-Schleife so besser und verständlicher:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    int iValue = 20;  // der gesuchte Wert
     
    while( !feof(ptr_file) )
    {
        // Eine Zahl aus der Datei einlesen, wird in temp gespeichert
        fscanf(ptr_file, "%d", &temp);
     
        // Wenn temp gleich der gesuchten Zahl ist
        if( temp == iValue )
        {
            printf( "Number found !" );
            break;  // Schleifenabbruch
        }
        else
        {
            printf( "Number not found !" ); // Weitersuchen!!
        }
    } // while

    Gruß
    Klaus
    newbie89 bedankt sich. 
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  9. #9
    newbie89 newbie89 ist offline Mitglied Bronze
    Registriert seit
    Aug 2009
    Beiträge
    31
    mh ok werd ich gleich mal probieren...

    wie siehts mit der variante aus kann man das hierdraus auch noch weiterbauen

    while (fgets(daten, sizeof(daten),fp) !=0)
     

  10. #10
    newbie89 newbie89 ist offline Mitglied Bronze
    Registriert seit
    Aug 2009
    Beiträge
    31
    mhh das ist nicht das was ich suche ich möchte zeile für zeile mit meiner variable vergleichen und dann in jeder schleife praktisch den abstand zwischen dateiwert und variable ermitteln und wenn die datei ferrtig durchsucht ist will ich haben das der wert mit der geringsten differenz aus meiner datei ausgegeben wird.... eine zahl aus einer datei suchen ist was anderes oder steh ich jetzt völlig aufm schlauch
     

  11. #11
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    zuerst einmal: halte Dich bitte an die Netiquette:
    http://www.tutorials.de/index.php?pg=netiquette

    Besonders auf lesbare Texte Dank Groß- und Kleinschreibung etc. wird hier sehr viel Wert gelegt!

    Zitat Zitat von newbie89 Beitrag anzeigen
    mhh das ist nicht das was ich suche ich möchte zeile für zeile mit meiner variable vergleichen und dann in jeder schleife praktisch den abstand zwischen dateiwert und variable ermitteln und wenn die datei ferrtig durchsucht ist will ich haben das der wert mit der geringsten differenz aus meiner datei ausgegeben wird.... eine zahl aus einer datei suchen ist was anderes oder steh ich jetzt völlig aufm schlauch
    Hmm, das ist ja nun eine völlig andere Aufgabenstellung

    So auf die Schnelle:
    (a) dann brich halt die Schleife NICHT ab .....
    (b) mach KEINEN Vergleich zw. 'temp' und Variable auf Gleichheit, sondern prüfe die Differenz!
    (c) merke Dir bei jedem Schleifenduchlauf zum einen die Differenz (wenn sie kleiner als die bisherige ist) und dann ggf. den dazugehörigen Wert!

    Es sollte eigentlich kein Problem, die zuvor gepostete Schleife dahingehend anzupassen .....

    Gruß
    Klaus
    newbie89 bedankt sich. 
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  12. #12
    newbie89 newbie89 ist offline Mitglied Bronze
    Registriert seit
    Aug 2009
    Beiträge
    31
    Hi, vielleicht kann hier mal einer drüberschauen wo liegt der Fehler?
    C ist eine Variable die global definiert ist. Mein Vergleichswert bzw. Variable


    void auswahl1 (void)
    {

    FILE*fp;
    float minalt=100,minneu=0, WERT,temp;

    fp= fopen ("C:\\ProgramFiles\\cpp\\Katalog1.txt","a+");
    if (fp==NULL)
    printf("Fehler beim Oeffnen.\n");
    else
    printf("Datei erfolgreich eingelesen.\n");


    while (!feof(fp))
    {
    fscanf(fp, "%d", &temp);
    minneu=(C- temp);

    if (minneu<minalt)
    WERT=temp;
    minalt=minneu;

    }


    fclose (fp);

    }
    Geändert von newbie89 (19.08.09 um 12:11 Uhr)
     

  13. #13
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Nutze bitte auch die Code-Tags ! ! !
    Entweder den '#'-Button im Editor oder durch Einklammerung von [*CODE][*/CODE] (ohne die Sternchen) ! !

    Erste Frage: was für ein Fehler ? ? ?
    Zweite Frage: warum GLOBALE Variablen ? ? ?

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  14. #14
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Zitat Zitat von newbie89 Beitrag anzeigen
    ...
    if (minneu<minalt)
    WERT=temp;
    minalt=minneu;
    ...
    Dein Fehler liegt genau hier - schau Dir mal Deine if-Anweisung genau an ! ! !

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  15. #15
    newbie89 newbie89 ist offline Mitglied Bronze
    Registriert seit
    Aug 2009
    Beiträge
    31
    Also ich habe ein main in diesem main wird die funktion aus dem letzten beitragaufgerufen.
    Von einer anderen Funktion wird meine Vergleichsvariable C errechnet, dass ich sie nun in meiner anderen Funktion verwenden kann muss ich sie doch global machen.

    Fehler ist dass ich für meinen WERT immer 0.00000 erhalte.

    Danke
     

Ähnliche Themen

  1. .txt Datei einlesen und verarbeiten
    Von Alexander87 im Forum Java
    Antworten: 7
    Letzter Beitrag: 09.11.09, 08:42
  2. Antworten: 0
    Letzter Beitrag: 29.08.08, 06:19
  3. Antworten: 4
    Letzter Beitrag: 14.08.08, 20:05
  4. Antworten: 6
    Letzter Beitrag: 20.05.05, 10:04
  5. Daten aus Datei in listbox einlesen
    Von momoxp im Forum Visual Basic 6.0
    Antworten: 6
    Letzter Beitrag: 04.03.04, 12:45

Stichworte