Inhalte aus externer Datei auslesen und ausgeben!!HILFE!!
-
Hallo zusammen,
im Studium habe ich eine C-Aufgabe bekommen. Da ich eigentlich nicht aus der Informatik komme, tue ich mich etwas schwer damit. Ich hoffe es kann jemand helfen
Habe auch schon google bemüht, jedoch bisher keine akkurate Lösung gefunden.Aufgabe:
Es soll mittels der scanf Funktion Inhalte aus einer Datei ausgewertet und in der Konsole ausgegeben werden.
In der externen Datei befinden sich mehrere Zeilen, die wie folgt aussehen:
EDSA,48,15.000,9,3.600,01/01/2002,13:59:00,Albstadt-Degerfeld,878,0
Ich habe mir dann folgenden Code überlegt (Wie schon beschrieben, bin ich nicht der Programmierer vorm Herrn):
#include <stdio.h> #include <stdlib.h> int main() { FILE *info; int i; char icao; double breitengradGrad; double breitengradMin, laengengradGrad, laengengradMin; char name[43] ; info=fopen("test.txt","r"); while (scanf(info,"%c,%d,%d,%d,%d,%c",&icao,&breitengradGrad, &breitengradMin, &laengengradGrad, &laengengradMin, &name) ) {printf("%c,%d,%d,%d,%d,%c \n",&icao,&breitengradGrad, &breitengradMin, &laengengradGrad, &laengengradMin, &name);} fclose(info); return EXIT_SUCCESS; }
Leider gibt mir meine Plattform nichts aus. Habe zwar die Fehler beseitigen können, jedoch passiert in der Ausgabe nichts was mich fröhlich stimmt.
Ich würde mich freuen, wenn sich jemand dieser Mammut-Aufgabe annehmen würde, mir zu erklären wo ich die Denkfehler habe
Vielen Dank im Voraus Leute!!!
Gruß
-
Hallo,
welchen Compiler verwendest du? Stell mal die Warnungen bei dem an bzw. beachte diese: du hast falsche Formatflags bei scanf angegeben - für double mußt du "%lf" verwenden. Und bei printf mußt du den Adressoperator weglassen und "%f" für double-Werte angeben.
Die weiteren Fehler findest du dann wohl ganz alleinUnd formatiere deinen Code hier im Forum mittels des "C"-Buttons.
P.S. Als Referenz kann ich dir en.cppreference.com empfehlen, z.B. für scanf und printf.
-
Ein char ist für ein Zeichen da. Zeichenfolgen wie EDSA passen da nicht rein.
Und lies dir mal durch, welche Bedeutung der Rückgabewert von scanf hat: http://www.cplusplus.com/reference/cstdio/scanf/
-
Danke für eure Tips! Ich habe folgende Warnung, die ich jedoch nicht eindeutig zuweisen kann:
||In function 'main':|
|17|warning: passing argument 1 of 'scanf' from incompatible pointer type [enabled by default]|347|note: expected 'const char *' but argument is of type 'struct FILE *'|
||=== Build finished: 0 errors, 1 warnings (0 minutes, 0 seconds) ===|Vllt könnt Ihr mir daraufhin noch einen Tip geben.
Danke!!
-
Inhalte aus externer Datei auslesen und ausgeben!!HILFE!!
Marktschreierisch. Gewöhne dir ab, hier die Leute zu nötigen.
Habe auch schon google bemüht, jedoch bisher keine akkurate Lösung gefunden.
Tja, das sagen sie alle. Googeln kannst du auch nicht.
Es soll mittels der scanf Funktion Inhalte aus einer Datei ausgewertet und in der Konsole ausgegeben werden.
scanf liest aus stdin, nicht (direkt) aus einer Datei. Also entweder deine Aufgabenstellung ist Schrott oder du kannst nicht richtig abschreiben.
char icao; double breitengradGrad; double breitengradMin, laengengradGrad, laengengradMin; char name[43] ; while (scanf(info,"%c,%d,%d,%d,%d,%c",&icao,&breitengradGrad, &breitengradMin, &laengengradGrad, &laengengradMin, &name)
Du kennst die Basisdatentypen nicht, und auch nicht deren Formatspezifizierer für scanf.
note: expected 'const char *' but argument is of type 'struct FILE *'|
Der Compiler sagt dir genau, was falsch ist. Das bisschen Englisch wirst du ja wohl noch begreifen.
Das ist der zarte Hinweis, dass als erstes Argument was anderes übergeben als erwartet wird; du sollst fscanf benutzen, nicht scanf.
Außerdem solltest du immer den Rückgabewert von *scanf auswerten, und zwar explizit. Dazu ist es natürlich notwendig, die Spezifikation von scanf zu lesen.
Lesen kannst du doch, oder?
Für Datumsfelder gibt es keine direkte Unterstützung von scanf, die musst du als String lesen. Ein String ist in C eine Folge von char, abgeschlossen mit '\0'.
-
Hab es zum Glück auch ohne deine interessanten Kommentare geschafft "Wutz". Danke an die restlichen für Ihre Hilfe.
-
EDSA sind 4 zeichen. dafür brauchst du mindestens ein char buf[5].
passend dazu ist das format %s, du benutzt aber %c
zum datentyp double gehört %lf du benutzt %d
das format für deine varialbe nameist ebenfalls falsch, siehe oben.
desweiteren übergibst du &name, das ist falsch, nameist schon die addresse des arrays
-
schuela schrieb:
Hab es zum Glück auch ohne deine interessanten Kommentare geschafft "Wutz". Danke an die restlichen für Ihre Hilfe.
format-error!
die anführungszeichen kannste weglassen.
er weiß schon ganz genau, warum er sich so nennt.