Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

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");

}

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!!

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.

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. ;)

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

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

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

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

@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:

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

@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.

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

Ist meiner Meinung nach Ansichtssache, wie man Postings von "Nichtwissenden" interpretiert. Aber egal.

eod

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.