Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Moin!

Ich habe folgendes Problem:

ich möchte mit fopen eine Datei öffnen, den Dateinamen aber als Variable einfügen:

z.B. fopen(dateiname,"a");

das geht aber nicht, der Standartsyntax ist ja z.B. fopen("test.txt","a");

kann mir da jemand helfen??

Thx im Voraus

Geschrieben

Okay mit der Variable in fopen(varibale_des_dateinamens,"a) funktioniert, das heißt, es wird eine Datei angelegt, komischerweise ist der Name der Natei "@"

Hier mal mein Quellcode:

#include <stdio.h>

int main()

{

char filename[4];

fflush(stdin);

printf("Das ist ein Testprogramm zur Datei I/O\n\n");

scanf("Filename: %c",filename);

fflush(stdin);

getchar();

fopen(filename,"a");

}

PS.: Danke für die Hilfe

Geschrieben

Du liest ja auch nur ein character ein ("%c"), uebergibts dabei aber die Adresse des Arrays. Einen String kannst Du mit "%s" einlesen, solltest das Array aber ausreichend gross dimensionieren (4 ist etwas wenig). Aus Sicherheitsgründen solltest Du aber auf "fgets()" zurückgreifen, da Du hier auch die Länge des Strings angeben kannst.

Nic

Geschrieben

Probiers mal hiermit:

#include <stdio.h>

int main()

{

char filename[4];

fflush(stdin);

printf("Das ist ein Testprogramm zur Datei I/O\n\n");

scanf("%s", filename);

fflush(stdin);

fopen(filename,"a");

}

Geschrieben

@muhahahe.de & Schwarzl

Ich rate dringend dazu, dass ihr euch fflush(stdin) abzugewöhnen. Mag sein, dass das auf eurem Compiler/BS funktioniert, aber laut Standard ist das Verhalten von fflush auf Input-Streams undefiniert. ;)

Geschrieben

Wirklich?? :confused:

Ehrlich gesagt hab ich das so bei einem C Anfängerkurs während meines Studiums gelernt. Und das erst letztes Semester. Da muß ich meinem Prof wohl mal auf die Füsse treten!!

Geschrieben

Na herzlichsten Dank auch!

Ist aber schon verwunderlich, dass man bei einem char array %s verwenden muß....

naja c is halt schon ein bisschen anders *g*

Mein Lehrer meinte auch, das fflush(stdin) schon funktioniert bei Eingaben.

Geschrieben
Originally posted by nic_power

Bist Du dir sicher, dass sich diese Aussage nicht auf das flushen von stdout bezog?

Ja :)

Quelle:

http://std.dkuug.dk/JTC1/SC22/WG14/www/docs/n843.htm

(Achtung: 1,4 MByte!)

7.19.5.2 The fflush function

Synopsis

[#1]

#include <stdio.h>

int fflush(FILE *stream);

Description

[#2] If stream points to an output stream or an update

stream in which the most recent operation was not input, the

fflush function causes any unwritten data for that stream to

be delivered to the host environment to be written to the

file; otherwise, the behavior is undefined.

Ich weiß, dass es bei vielen Compilern funktioniert. Man sollte sich aber nicht darauf verlassen. ;)

Geschrieben

Ich glaube da haben wir uns jetzt mißverstanden. Meine Antwort bezog sich auf den Prof bzw. die Aussage von Schwarzl, nicht auf Deine Antwort. Ich wollte eigentlich wissen, ob der Prof tatsächlich empfiehlt ein Flush auf input streams durchzuführen.

Nic

Geschrieben
Originally posted by Klotzkopp

@muhahahe.de & Schwarzl

Ich rate dringend dazu, dass ihr euch fflush(stdin) abzugewöhnen. Mag sein, dass das auf eurem Compiler/BS funktioniert, aber laut Standard ist das Verhalten von fflush auf Input-Streams undefiniert. ;)

Kannst du mir vielleicht eine alternative dazu nenen?

Weil ich kann mich erinnern das ich früher in der Schule öfters mal das Problem

hatte das ein cin oder scanf() einfach übersprungen wurde. Ein fflush(stdin)

hat das Problem immer gelöst.

Ich habs auch schon desöfteren dazu benutzt um eine Datei, deren Daten sich

noch im Puffer befanden, zum schreiben zu zwingen.

Gruß

Guybrush

Geschrieben
Originally posted by muhahahe.de

Okay mit der Variable in fopen(varibale_des_dateinamens,"a) funktioniert, das heißt, es wird eine Datei angelegt, komischerweise ist der Name der Natei "@"

Hier mal mein Quellcode:

#include <stdio.h>

int main()

{

char filename[4];

fflush(stdin);

printf("Das ist ein Testprogramm zur Datei I/O\n\n");

scanf("Filename: %c",filename);

fflush(stdin);

getchar();

fopen(filename,"a");

}

PS.: Danke für die Hilfe

Ich habe mal gelernt, erst sollte man gehen koennen bevor man fliegen will .... wie waere es mal ein Buch ueber C herzunehmen und die ersten 30 Seiten konzentriert durchzuarbeiten ?

Dann wuerde es dir wie Schuppen von den Augen fallen.

Frank

Geschrieben
Originally posted by Schwarzl

Wirklich?? :confused:

Ehrlich gesagt hab ich das so bei einem C Anfängerkurs während meines Studiums gelernt. Und das erst letztes Semester. Da muß ich meinem Prof wohl mal auf die Füsse treten!!

Was hast du denn studiert ?

Frank

Geschrieben

@nic_power

Sicher nicht. Wir haben ein ähnliches Beispiel bei uns in einer Übungsstunde gehabt. Das wurde so verwendet und mein Dozent hat auch gemeint, daß das hier so gemacht würde. Wie gesagt, da werde ich ihn nochmal darauf ansprechen.

@SgtBadAzz

Ich studiere Verwaltungsinformatik. Studiengang an der FH und der BFH Hof. Eigentlich peinlich, daß die einem zukünftigen Informatiker falsche Sachen beibringen. Wie gesagt, war allerdings auch erst die Vorlesung Programmieren für Anfänger in C im ersten Semester. Vielleicht haben die uns das dort nur der Einfachheit halber beigebracht. Aber erwähnen hätten die das schon können :(

Im zweiten fangen wir mit C++ an. Schaun ma mal, wie es da weitergeht :confused:

Geschrieben
Originally posted by Guybrush Threepwood

Kannst du mir vielleicht eine alternative dazu nenen?

Weil ich kann mich erinnern das ich früher in der Schule öfters mal das Problem

hatte das ein cin oder scanf() einfach übersprungen wurde. Ein fflush(stdin)

hat das Problem immer gelöst.

Ich habs auch schon desöfteren dazu benutzt um eine Datei, deren Daten sich

noch im Puffer befanden, zum schreiben zu zwingen.

Gruß

Guybrush

Wenn scanf oder cin uebersprungen wurde, dann liegt das i.d.R. daran dass

CRLF (RETURN) zweimal betaetigt wurde obwohl das eigentich nur einmal

betaetigt werden sollte, das kann an dicken Fingern liegen oder daran

das die Tastatur spinnt etc. etc.

Ich kenne das fflush nur bei der Ausgabe, was ja auch Sinn macht.

Frakn

Geschrieben

@SgtBadAzz:

Hiermit entschuldige ich mich für das posten einer Frage in diesem Forum.........

Der Quellcode aus einer Problemstellung heraus entstanden. Da ich zugegebener Maßen ein C greenhorn mit nicht all zuviel Zeit bin, hatte ich erst das Problem und dann das c "Wissen".

Ich habe mit diesem Forum bisher gute Erfahrungen gemacht, bemühe mich auch selber ein toleranter Mensch bzgl. "nicht Wissenden" zu sein und finde deinen Beitrag deshalb schon etwas daneben.

Und du mußt zugeben, dass der zusammenhang einen char-arry mit %s "darzustellen" nicht ganz logisch ist.

Geschrieben
Originally posted by muhahahe.de

@SgtBadAzz:

Hiermit entschuldige ich mich für das posten einer Frage in diesem Forum.........

Der Quellcode aus einer Problemstellung heraus entstanden. Da ich zugegebener Maßen ein C greenhorn mit nicht all zuviel Zeit bin, hatte ich erst das Problem und dann das c "Wissen".

Ich habe mit diesem Forum bisher gute Erfahrungen gemacht, bemühe mich auch selber ein toleranter Mensch bzgl. "nicht Wissenden" zu sein und finde deinen Beitrag deshalb schon etwas daneben.

Und du mußt zugeben, dass der zusammenhang einen char-arry mit %s "darzustellen" nicht ganz logisch ist.

Du brauchst dich nicht zu entschuldigen , aber mal ehrlich waere das nicht ganz einfach zu beantworten gewesen wenn mal mein paar Seiten in einem entsprechenden Buch nachsieht. Mich stoert es manchmal das es teilweise nicht Unwissenheit ist aus der diese Fragen entstehen sondern, sorry, Faulheit oder Bequemlichkeit nicht mal in entsprechender Literatur nachzusehen.

Frank

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...