Hi Community,
dies ist mein erster Beitrag bzw meine erste Frage an euch:
Ich habe folgenden Code mithilfe von Microsoft Visual Studio geschrieben (bitte jetzt keine Diskussion darüber wie bescheiden das Programm ist
)
// file_verarbeitung.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#include „stdafx.h“
#include „string.h“
#include „stdio.h“
#include „stdlib.h“
//
char auswahl, filename[10], str[100];
FILE*fp;
void main()
{
do
{
printf(„neue Datei anlegen? j/n \n“);
fflush(stdin);
auswahl = getchar();
switch(auswahl)
{
case ‚j‘:
//Filename abfrage
fflush(stdin);
printf(„Dateiname?“);
fgets(filename, 10, stdin);
printf("%s", filename);
//File anlegens
fp = fopen(filename,„w+“);
//Filecontent
printf("Geben sie ein paar Worte ein : ");
fflush(stdin);
fgets(str, sizeof(str), stdin);
if(fwrite(&str, sizeof(str), 1, fp) != 1)
{
printf(„Oh, da ist wohl was schief gegangen…“);
}
//fclose(fp);
break;
}
} while(auswahl == ‚n‘);
system(„PAUSE“);
}
Im Großen und Ganzen soll bloß gefragt werden, ob eine Datei erstellt werden soll, wenn bejaht soll der Dateiname sowie der Inhalt abgefragt werden.
Wenn ich den Code nun aber ausführe, liefert mir der Debugger nach der Eingabe der „paar Worte“ folgende Fehlermeldung:
„Expression: (stream != NULL)“
ich verstehe einfach nicht welches Problem der Compiler hat… Hoffe ihr könnte mir helfen
Danke schon im Voraus.
Gruß
matze9881
Hallo
Ich habe das mal ein wenig zurecht gebogen. Den Code bitte in pre-Marken setzen, so wie hier, das ist besser leserlich:
// unnoetig fuer die Console:
// #include "stdafx.h"
// std-lib in :
#include
#include
#include
#include // fuer getch()
#include // Fehler-Check mit assert()
char auswahl, filename[32], str[100];
FILE \*fp = 0;
void main()
{
do
{
printf("neue Datei anlegen? j/n \n");
// fflush(stdin); // unnoetig
// besser mit getch():
auswahl = getch();
switch(auswahl)
{
case 'j':
//Filename abfrage
printf("Dateiname?\n");
scanf ("%s", filename);
//File anlegen
fp = fopen(filename,"wt");
assert (fp); // fehler-check
//Filecontent
printf("Geben sie ein paar Worte ein : ");
// schleife noetig:
do {
scanf ("%s", str); // je ein Wort einlesen
// fputs (str, fp); // in die Datei damit
if ( fprintf(fp, "%s ", str) 1);
// klar doch, schliessen ist OK:
fclose(fp);
break;
}
// war wohl so gemeint, mit != ?
} while(auswahl != 'n');
system("PAUSE");
}
Der Fehler mit „stream“ bezog sich wahrscheinlich auf den FILE-Zeiger. Bei mir tritt er nicht mehr auf.
lG
Martin B
Danke Martin!
Du hast mir echt geholfen.
habs jetzt folgendermaßen gelöst:
// file\_verarbeitung.cpp
// Autor: Matthias P.
// Bemerkung: Programm zum Schreiben einer Datei
#include
#include
#include
#include // fuer getch()
#include // Fehler-Check mit assert()
//
char auswahl, filename[10], str[100];
FILE \*fp;
void main()
{
do
{
printf("neue Datei anlegen? j/n \n");
auswahl = getch();
switch(auswahl)
{
case 'j':
//Filename abfrage
printf("Dateiname? \n");
scanf ("%s", &filename);
fflush(stdin);
//File anlegen
fp = fopen(filename,"wt");
assert (fp); // fehler-check
//Filecontent
printf("Geben sie ein paar Worte ein : ");
gets(str);
fwrite(&str, sizeof(str), 1, fp);
//File schließen
fclose(fp);
break;
}
} while(auswahl == 'n');
system("PAUSE");
}
==‚n‘ soll so bleiben, mann soll keine Wahl haben ^^
Vielen Dank nochmal.
Gruß Matze9881
Hallo Matze
Ein Hinweis noch:
fwrite(&str, sizeof(str), 1, fp);
finde ich nicht so gut, vgl. hier:
http://cplusplus.com/reference/clibrary/cstdio/fwrite/
Wenn Dir die „fwrite()“ lieber ist, bitte, aber dann wäre es doch besser so:
fwrite(str, // ohne das &, "str" ist schon ein Zeiger
sizeof(char), // Size in bytes of each element to be written.
100, // Number of elements, each one with a size of size bytes.
fp);
Zeiger und Arrays sind in C/C++ ja austauschbar. Mit dem ‚&‘ wäre das schon ein Doppelzeiger.
lG
Martin B