1Danke
ERLEDIGT
JA
JA
ANTWORTEN
10
10
ZUGRIFFE
218
218
EMPFEHLEN
-
Hallo das ist die Aufgabe die ich seit nun 2 Tagen nicht auf die reihe kriege. Ich bin soweit dass ich die Datei einlesen kann und in einem Array speichern kann aber wie kann ich dann auf dieses Array zu greifen, die Chars in integers umwandeln und dann damit rechnen ?
Schreiben Sie ein C-Programm, das eine Datei <test.dat> einliest.
Die Datei sei wie folgt aufgebaut:
1. In der ersten Zeile steht eine natürliche Zahl
2. Ab der zweiten Zeile stehen pro Zeile jeweils zwei natürliche Zahlen, welche durch ein ’*’ getrennt sind
Beispiel:
200
1*3
2*3
Das Programm soll überprüfen, ob die Summe der Produkte ab der zweiten Zeile
gleich der in der ersten Zeile stehenden Zahl ist und eine entsprechende Meldung
zurückliefern.
Hier mein Code bisher
:
Code :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
#include<stdio.h> #include <stdlib.h> int main() { int summe; FILE *fp; FILE *ft; int i; int j; char temp; char k, title ; char array [20]; char ka[20]; // oeffnen im Lesemodus fp = fopen("zahlen.txt", "r"); ft = fopen("zahlen.txt","r"); if(fp == NULL) { printf("Datei konnte nicht geoeffnet werden.\n"); }else { for(i=0; i<10; i++) { fscanf(fp, "%c\n", &temp); printf("gelesen: %c\n", temp); ka[i] = fgetc(ft); } printf("ka ist gleich %c",ka[1]); k = ("%c",ka[1]); title = ("%c",ka[0]); printf ("k ist gleich %c , %c" ,k,title); fclose(fp); } return(0); }
-
Hi und Willkommen bei tutorials.de

Der Code hat ja irgendwie nicht viel mit der Aufgbe zu tun
Du öffnest die gleiche Datei zweimal, liest 10 Buchstaben ein...
Das Grundgerüst passt ja schon mal.
Gehen wir der Reihe nach vor, weil du hast anscheinend einige Verständnisprobleme.Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#include <stdio.h> int main() { FILE *f; f = fopen("zahlen.txt", "r"); if(f == NULL) { printf("Datei konnte nicht geoeffnet werden"); return 1; } fclose(f); return 0; }
Fragen zum Code oben? Irgendwelche?
Eine ordentliche Zeileneinrückung hilft übrigens beim Code-lesen.
Und die Farbe bringt man rein, indem man cpp statt code in den [] nimmt (hier im Forum).
Gruß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, ...?
-
JA ich habe in dem Code halt immer rumprobiert um zu gucken was man damit machen kann .
Der Code ist mir soweit klar. Datei wird geöffnet solange, das funktioniert macht er nix ansonsten gibt er Datei... werden aus. der file wird wieder gesschlossen
1. Frage wie kann ich die zahl aus der Txt datei auslesen und dann als integer verwenden ?
Bin halt blutiger anfänger hab mich aber versucht durch verschiedene Tutorials zu kämpfen aber so ganz hats noch nicht klick gemacht :/Geändert von steve12 (04.11.11 um 11:13 Uhr)
-
Dazu wollt ich grad kommen

Du verwendest immer %c im Code.
Das ist für Einzel-Buchstaben.
Keine ganzen Sätze und schon gar keine int-Zahlen.
Für int ist %d gedacht (wie man übrigens in der Doku nachlesen kann).
Weiters gibt scanf die ANzahl der erfolgreich eingelesenen Variablen zurück.
Wenn als ein %d eingelesen werden soll, muss 1 zurückgegeben werden.
Sonst ist ein Fehler aufgetreten, zB. die Datei hat keinen Inhalt
oder es waren Buchstaben, wo eine Zahl sein sollte.
In der ersten Dateizeile steht also eine einzelne Zahl, die für das Programm ziemlich wichtig ist.
Wenn die nicht eingelesen werden konnte mcht es keinen Sinn, weiterzumachen: Programmende.
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
#include <stdio.h> int main() { FILE *f; int hauptzahl; f = fopen("zahlen.txt", "r"); if(f == NULL) { printf("Datei konnte nicht geoeffnet werden"); return 1; } if(1 != fscanf(f, "%d", &hauptzahl)) { printf("Einlesefehler"); return 2; } fclose(f); return 0; }
Warum return 2?
Wenn ein Programm Fehlerfrei durchläuft, soll es 0 zurückgeben, sonst was anderes.
Wenn man da dann auch noch verschiedene Zahlen nimmt,
kann der Aufrufende an der Zahl erkennen, welcher Fehler aufgetreten ist.
Bis hierher klar?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, ...?
-
Wird der eingelesen integer dann in Hauptzahl gespeichert ? und liest fscanf das ganze Programme oder nur eine zeile ? Bei meiner sache stand /n hinter dem %c heißt das also es wird nur eine Zeile ausgelesen ? ..
Hatte das garnicht beachtet mit dem %c das macht natürlich sinn -- dachte aber schon weil in zeile 2 ja dann ein * stehen soll dass man iwie chars einlesen muss und die umwandeln .
Sonst soweit klar . DANKE !!
-
Ja, der int wird in hauptzahl gespeichert.
Wieviel fscanf einliest hängt vom %... ab. Bei %d maximal eine Zeile.
%c liest keine ganze Zeile ein, sondern nur einen einsamen Buchstaben.
Und wegen dem * in den folgenden Zeilen:
Der ist zwar da; interessant für dich sind ja aber nur die beiden Zahlen vorne und hinten.
In dem Fall musst du den * gar nicht einlesen, sondern nur scanf beim Zahlen-einlesen sagen,
dass da einer dazwischen zu erwarten ist.
Rest kommt gleich noch hierher...
edit:
Deine Aufgabe sagt jetzt also:
Alle Mal-Rechnungen darunter müssen ausmultipliziert werden, und dann die Ergebnisse addieren.
Das Endergebnis soll die hauptzahl ergeben.
In dem Fall wird zuerst einmal eine Variable summe gemacht, sowie zahl1 und zahl2.
zahl1 und zahl2 werden immer die zwei Zahlen pro Zeile sein,
die dann multipliziert und zu summe addiert werden.
Da braucht man eine Schleife, in der man solange einlesen kann, bis die Datei aus ist:
(Komplettcode kommt unten nochmal)Code cpp:1 2 3
while(!feof(f)) { }
Die Dateizeilen, die jetzt kommen werden, haben alle zuerst eine Zahl,
dann das *-Zeichen, dann wieder eine Zahl.
Wenn da eine Zeile aus der Reihe tanzt ist das kein Grund, das Programm zu beenden,
sondern man kann die Zeile einfach ignorieren.
dH: Man liest ja pro Zeile zwei ints ein. Wenn fscanf nicht 2 zurückgibt ist die Zeile ungültig
und wird nicht zu summe dazugerechnet.
Code cpp:1 2 3 4 5 6
summe = 0; while(!feof(f)) { if(2 == fscanf(f, "%d*%d", &zahl1, &zahl2)) summe += (zahl1 * zahl2); }
...So, das wars dann eigentlich. Mehr ist nicht mehr zu machen.
Komplettcode:
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
#include <stdio.h> int main() { FILE *f; int hauptzahl, summe, zahl1, zahl2; f = fopen("zahlen.txt", "r"); if(f == NULL) { printf("Datei konnte nicht geoeffnet werden"); return 1; } if(1 != fscanf(f, "%d", &hauptzahl)) { printf("Einlesefehler"); return 2; } summe = 0; while(!feof(f)) { if(2 == fscanf(f, "%d*%d", &zahl1, &zahl2)) summe += (zahl1 * zahl2); } fclose(f); return 0; }
Fragen immer gern gesehen
Gruß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, ...?
-
aha bin ich ja mal gespannt wie das geht mit dem scanf das mitzuteilen .. hammer vielen dank für die HIlfe !! ich muss sagen es war ganz klar mein riesen Fehler einfach aus tutorials code zu kopieren ohne ihn wirklich komplett verstanden zu haben
-
Jo, das mit dem * sollte vllt. etwas ausführlicher sein...
Alles, was bei scanf drinsteht und kein %... ist, wird dort fix erwartet.
Mit "%d" liest man eine Zahl ein
Mit "%dabc%d" liest man ein %d ein, nach dem abc kommen muss, dann noch ein %d.
Wenn da kein abc war, wird nicht 2 zurückgegeben (für 2 %d), also Fehler.
Und mit "%d*%d" muss eben ein * dazwischen sein.
scanf weiss, dass die zweite Zahl erst danach beginnt,
und prüft gleichzeitig, ob wohl der * da ist, und nichts anderes.
Rest ist im oberen Beitrag, falls du es noch nicht gesehen hast.
Gruß
PS: Bitte Netiquette §15 beachten.
Auf korrektes Deutsch (inkl. Groß-/Kleinschreibung) wird hier viel Wert gelegt.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, ...?
-
DAnke danke muss das jetzt mal alles austesten und mit rumspielen schon mal vielen Dank !!
edit: So sieht jetzt das komplette Programm aus . Habs nicht ganz hinbekommen auch die erste Zeile mit auslesen zu lassen weil der sobald er die erste ausgelesen hat gleich komplett aufgegeben hat und nichts weiter gemacht. Daher hab ich das so gelöst mit nem 2 Aufruf der Datei . Geht das auch anders ?
Und letze Frage - Wie kann man dir nen Kasten Bier zu kommen lassen ? Hast mir super geholfen
! VIELEN DANK !
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
#include <stdio.h> int main() { FILE *f; FILE *ft; int hauptzahl, summe,zahl, zahl1, zahl2,zahl3; f = fopen("zahlen.txt", "r"); ft = fopen("zahlen.txt","r"); if(f == NULL) { printf("Datei konnte nicht geoeffnet werden"); return 1; } if(1 != fscanf(f, "%d", &hauptzahl)) { printf("Einlesefehler"); return 2; } summe = 0; while(!feof(f)) { if(2 == fscanf(f, "%d*%d", &zahl1, &zahl2)) summe += (zahl1 * zahl2); } printf("Die Summe ist %d\n",summe); fscanf (ft, "%d", &zahl); printf( "Zahl ist %d \n", zahl); if(ft == NULL) { printf("Datei konnte nicht geoeffnet werden"); return 1; } if(1 != fscanf(ft, "%d", &hauptzahl)) { printf("Einlesefehler"); return 2; } if (zahl > summe) { printf("Summe ist kleiner als die Produkte"); } if (zahl < summe) { printf("Summe ist groesser als die Produkte"); } if (zahl == summe) { printf("Summe ist gleich gross wie die Produkte"); } fclose(f); fclose(ft); return 0; }
-
Die Ausgabe am Schluss...die hab ich doch glatt vergessen.
Aber wegen dem zweiten Öffnen: Hab mein Programm nicht getestet, sollte aber scho ohne Änderungen gehen. Werds jetzt testen...
edit:
Bei mir funktionierts ohne Änderungen.
Hab nur noch eine Ausgabe am Schluss eingefügt, ob die Zahlen gleich sind:
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
#include <stdio.h> int main() { FILE *f; int hauptzahl, summe, zahl1, zahl2; f = fopen("zahlen.txt", "r"); if(f == NULL) { printf("Datei konnte nicht geoeffnet werden"); return 1; } if(1 != fscanf(f, "%d", &hauptzahl)) { printf("Einlesefehler"); return 2; } summe = 0; while(!feof(f)) { if(2 == fscanf(f, "%d*%d", &zahl1, &zahl2)) summe += (zahl1 * zahl2); } if(hauptzahl == summe) printf("OK\n"); else printf("Nicht gleich\n"); fclose(f); return 0; }
Die zahlen.txt:
Code :1 2 3
100 5*5 5*15
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, ...?
-
Jo hast recht geht auch so
!THX
Ähnliche Themen
-
Problem: Werte aus Datei in Map einlesen?
Von LadyMarion im Forum C/C++Antworten: 0Letzter Beitrag: 12.08.08, 10:36 -
Problem beim TXT-Datei einlesen
Von freek0815 im Forum JavaAntworten: 2Letzter Beitrag: 10.09.07, 08:51 -
Datei einlesen Problem
Von Hallasas im Forum C/C++Antworten: 3Letzter Beitrag: 27.08.07, 10:39 -
Problem beim Datei einlesen
Von avenger2099 im Forum C/C++Antworten: 7Letzter Beitrag: 18.05.05, 10:37 -
c# - Problem mit Einlesen aus einer Datei
Von belfry im Forum .NET ArchivAntworten: 1Letzter Beitrag: 07.02.05, 23:33





Zitieren

Login






