PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : In Datei speichern



schorchi
16.06.2010, 18:31
Hallo,

ich brauche Hilfe für ein Kassenprogramm. Hier möchte ich den Gesamtpreis in einer Datei speichern, habe nur keine Lösung wie ich das hinbekommen kann. Währe nett wenn mir einer sagen kann wie das geht.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])

{

int i,x=500,anzahl,wahl,groesse;
double preis=0,gesamt=0,betrag=0;
char j;

printf("\n (0)\tGesamtpreis");
printf("\n-------------------------------------------------");
printf("\n (1)\tPommes\t\t\t1.00 Euro");
printf("\n (2)\tKroketten\t\t1.20 Euro");
printf("\n (3)\tCurrywurst\t\t2.10 Euro");
printf("\n (4)\tSchaschlik\t\t3.50 Euro");
printf("\n (5)\tSchnitzel\t\t4.00 Euro");
printf("\n (6)\tHamburger\t\t2.20 Euro");
printf("\n (7)\tCheeseburger\t\t2.50 Euro");
printf("\n (8)\tFrikadelle\t\t1.80 Euro");
printf("\n (9)\tCola Fanta Wasser\t1.00 Euro");
printf("\n(10)\tSalate\t\t\t2.00 Euro");
printf("\n(11)\tKetchup Mayonaise \t0.30 Euro");
printf("\n(12)\tExtras");



printf("\nAuswahl bitte:");


for (i=0;i<x;i++)
{
anzahl=0;
scanf("%i",&wahl);
if (wahl==1)
{
printf("\nkleine (1)\tmittlere (2)\tgrosse (3) ");
scanf("%i",&groesse);
if (groesse==1)
{
preis=1;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tkl. Pommes\t%.2lf\tEuro",anzahl,preis*anzahl);

gesamt=gesamt+preis*anzahl;
}
if (groesse==2)
{
preis=1.50;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tm. Pommes\t%.2lf\tEuro",anzahl,preis*anzahl);

gesamt=gesamt+preis*anzahl;
}
if (groesse==3)
{
preis=2;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tgr. Pommes\t%.2lf\tEuro",anzahl,preis*anzahl);

gesamt=gesamt+preis*anzahl;
}
}
if (wahl==2)
{
preis=1.20;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tKroketten\t%.2lf\tEuro",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}

if (wahl==3)
{

preis=2.10;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tCurrywurst\t%.2lf\tEuro",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}
if (wahl==4)
{
preis=3.50;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tSchaschlik\t%.2lf\tEuro",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}
if (wahl==5)
{
preis=4.0;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tSchnitzel\t%.2lf\tEuro",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}
if (wahl==6)
{
preis=2.20;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tHamburger\t%.2lf\tEuro",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}
if (wahl==7)
{
preis=2.50;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tCheeseburger\t%.2lf\tEuro",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}
if (wahl==8)
{
preis=1.80;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tFrikadelle\t%.2lf\tEuro",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}
if (wahl==9)
{
preis=1.0;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tGetraenk\t%.2lf\tEuro",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}
if (wahl==10)
{
preis=2.0;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tSalat\t%.2lf\tEuro",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}
if (wahl==11)
{
preis=0.30;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tKetchup/Mayo\t%.2lf\tEuro",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}
if (wahl==12)
{
printf("Betrag eingeben: ");
scanf("%lf",&preis);
printf("\n\tExtras\t%.2lf\tEuro",preis);
gesamt=gesamt+preis;
}


if (wahl==0)
{
i=500;
printf("\n-----------------------------------------------------------------");
printf("\nGesamtpreis\t%.2lf\tEuro\n",gesamt);
}
}

system("PAUSE");
return;
}

BurningWave
16.06.2010, 18:50
Benutze bitte Code-Tags, um deinen Code lesbarer zu gestalten.

Google hätte dir innerhalb von 2 sec geholfen:

http://www2.hs-fulda.de/~klingebiel/c-stdlib/stdio.htm
http://www.rrzn.uni-hannover.de/fileadmin/kurse/material/CKurs/c10_DateiIO.pdf

schorchi
16.06.2010, 19:27
Habe natürlich vorher schon nachgelesen, hat mir aber nicht weitergeholfen.

sternst
16.06.2010, 19:36
Habe natürlich vorher schon nachgelesen, hat mir aber nicht weitergeholfen.Das ist doch mal eine Aussage mit "haufenweise" Informationen darin.

Was genau erwartest du denn jetzt eigentlich vom Forum? Dass es dir die komplette Thematik in allen Einzelheiten und Details nochmal vorkaut? Das mindeste ist doch wohl, dass du uns erst mal wissen lässt, was genau du denn nicht verstanden hast, oder was genau denn nun nicht klappt.

Und so nebenbei: wo ist eigentlich der Bezug zu AVRs?

PS: Eines (was aber nichts mit deiner eigentlichen Frage zu tun hat) kann ich dir aber auch so schon sagen: Geldbeträge in Floats zu packen ist keine wirklich gute Idee. Das ist praktisch der klassische Anwendungsfall für Festkomma-Arithmetik.

BurningWave
16.06.2010, 19:52
Hab mir deinen Code nochmal durchgeschaut und finde ihn SCHRECKLICH. Hast du noch nie etwas von swich & case gehört? Außerdem dürfte sich das gar nicht compilieren lassen, da du keinen Wert zurück gibst, von deinem sonstigen Programmierstil, wie Variablendefinitionen usw. will ich gar nicht reden.

Ich will dich nicht beleidigen, aber gerade als Anfänger ist es wichtig, sich einen guten Programmierstil anzugewöhnen.

squelver
17.06.2010, 08:51
@_R2D2, ich denke, sowas kann man auch vorschlagen oder empfehlen und nicht immer gleich rumhacken \:D/

schorchi
17.06.2010, 16:38
@ sternst, mit AVRs hat es wohl nichts zu tun, aber ich dachte, dass ihr mir vielleicht doch helfen könnt.

@_R2D2

Habe deine Empfehlung gerne angenommen. Das Programm nochmal anders geschrieben.
Vielleicht ist es ja so etwas besser.
Das Programm lässt sich bei mir compilieren, aber es speichert einfach nicht in eine Datei und ich weiß nicht warum.
Wenn es euch nicht zu blöd ist, wäre es nett, wenn mir einer einen Rat geben kannn, was ich falsch mache.
Auch wenn der Quellcode nicht so prima ist, aber ich fange ja gerade erst an zu programmieren.

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
#include <string.h>

int main(int argc, char *argv[])

{

int i,y=500,anzahl,groesse;
double preis=0,gesamt=0,betrag=0;
char eingabe,antwort='N';
FILE *stream;
char dateiname[67];


do
{
system("cls");
printf("\n (Z)\tGesamtpreis");
printf("\n-------------------------------------------------");
printf("\n (A)\tPommes\t\t\t1.00 Euro");
printf("\n (B)\tKroketten\t\t1.20 Euro");
printf("\n (C)\tCurrywurst\t\t2.10 Euro");
printf("\n (D)\tSchaschlik\t\t3.50 Euro");
printf("\n (E)\tSchnitzel\t\t4.00 Euro");
printf("\n (F)\tHamburger\t\t2.20 Euro");
printf("\n (G)\tCheeseburger\t\t2.50 Euro");
printf("\n (H)\tFrikadelle\t\t1.80 Euro");
printf("\n (I)\tCola Fanta Wasser\t1.00 Euro");
printf("\n (J)\tSalate\t\t\t2.00 Euro");
printf("\n (K)\tKetchup Mayonaise \t0.30 Euro");
printf("\n (L)\tExtras");



printf("\nAuswahl bitte:");


for (i=0;i<y;i++)
{
anzahl=0;
eingabe=getchar();
switch(toupper(eingabe))
{

case 'A':
do
{
printf("\nkleine (1)\tmittlere (2)\tgrosse (3)\tWahl:");
scanf("%i",&groesse);
}while(groesse!=1&&groesse!=3&&groesse!=2);
if (groesse==1)
{
preis=1;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tkl. Pommes\t%.2lf\tEuro\tWahl:",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}
if (groesse==2)
{
preis=1.50;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tm. Pommes\t%.2lf\tEuro\tWahl:",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}
if (groesse==3)
{
preis=2;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tgr. Pommes\t%.2lf\tEuro\tWahl:",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}
break;

case 'B':
preis=1.20;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tKroketten\t%.2lf\tEuro\tWahl:",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
break;

case 'C':
preis=2.0;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tCurrywurst\t%.2lf\tEuro\tWahl:",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;

break;

case 'D':

preis=3.50;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tSchaschlik\t%.2lf\tEuro\tWahl:",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
break;
case 'E':
do
{
printf("\nWiener(1)\tJaeger (2)\tZigeuner (3)\tWahl:");
scanf("%i",&groesse);
}while(groesse!=1&&groesse!=3&&groesse!=2);
if (groesse==1)
{
preis=4.0;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tWienerschnitzel\t%.2lf\tEuro\tWahl:",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}
if (groesse==2)
{
preis=4.50;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tJaegerchnitzel\t%.2lf\tEuro\tWahl:",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}
if (groesse==3)
{
preis=4.50;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tZigeunerschnitzel\t%.2lf\tEuro\tWahl:",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;
}


break;

case 'F':
preis=2.20;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tHamburger\t%.2lf\tEuro\tWahl:",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;

break;
case 'G':
preis=2.50;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tCheeseburger\t%.2lf\tEuro\tWahl:",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;


break;

case 'H':
preis=1.80;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tFrikadelle\t%.2lf\tEuro\tWahl:",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;

break;
case 'I':
preis=1.0;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tGetraenk\t%.2lf\tEuro\tWahl:",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;

break;

case 'J':
preis=2.0;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tSalat\t%.2lf\tEuro\tWahl:",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;

break;
case 'K':
preis=0.30;
printf("\nAnzahl: ");
scanf("%i",&anzahl);
printf("\n%i\tKetchup/Mayo\t%.2lf\tEuro\tWahl:",anzahl,preis*anzahl);
gesamt=gesamt+preis*anzahl;

break;

case 'L':
printf("Betrag eingeben: ");
scanf("%lf",&preis);
printf("\n\tExtras\t%.2lf\tEuro\tWahl:",preis);
gesamt=gesamt+preis;

break;
case 'Z':
i=500;
printf("\n-----------------------------------------------------------------");
printf("\nGesamtpreis\t\t%.2lf\tEuro\n",gesamt);

break;

printf("\n\t\tGesamtbetrag erfassen\n");
printf("\nSpeichern unter >");
gets (dateiname);
if ((stream = fopen(dateiname,"w")) == NULL)
{
printf("Fehler beim oeffnen!!");
exit(1);

}
fprintf(stream,"\nGesamtbetrag\t\t%.2lf\tEuro\n",gesamt);
fclose(stream);

}

}
printf("\nNeuer Kunde?\t(J) (N): ");
antwort=toupper(getch());
}while(antwort!='N');
getch();
}

BurningWave
17.06.2010, 20:02
@_R2D2, ich denke, sowas kann man auch vorschlagen oder empfehlen und nicht immer gleich rumhacken

Sry, war ein bisschen unglücklich formuliert, also das sollen Ratschläge sein :wink:

Ich denke, dass das mit dem Dateinamen Probleme gibt. Probiere mal einen festen Dateinamen anzugeben. Außerdem kannst du mal fwrite() probieren. fprintf() habe ich noch nie benützt. Bist du sicher, dass die Codestelle überhaupt erreicht wird (ich kann das in deinem Code nicht so gut erkennen, da er immer noch unglücklich formatiert ist - packe ihn mal in [code ] //dein Code [/code ] Tags (ohne Leerzeichen), dann wird er gleich viel übersichtlicher dargestellt.

sternst
17.06.2010, 23:10
case 'Z':
i=500;
printf("\n-----------------------------------------------------------------");
printf("\nGesamtpreis\t\t%.2lf\tEuro\n",gesamt);

break;

printf("\n\t\tGesamtbetrag erfassen\n");
,,,Also momentan wird der Codeteil zum Speichern gar nicht ausgeführt.

BurningWave
18.06.2010, 20:22
Kann an einer fehlerhaften Klammer der Fehler liegen? Ich hab es mal korrigiert:



break;

} // sollte hier nicht eine Klammer hin, um switch zu beenden?

printf("\n\t\tGesamtbetrag erfassen\n");
printf("\nSpeichern unter >");
gets (dateiname);
if ((stream = fopen(dateiname,"w")) == NULL)
{
printf("Fehler beim oeffnen!!");
exit(1);

}
fprintf(stream,"\nGesamtbetrag\t\t%.2lf\tEuro\n",gesamt);
fclose(stream);

//} hier an falscher Stelle?

}
printf("\nNeuer Kunde?\t(J) (N): ");
antwort=toupper(getch());
}while(antwort!='N');
getch();
}

schorchi
18.06.2010, 22:32
@_R2D2
Danke für deine Mühe, aber leider geht es auch so nicht. Ich werde weiter suchen.

Danke nochmal
Habe es mal was abgekürzt dann ist es besser zu überblicken versuche es auch jetzt mal in code zu packen. Hoffentlich mach ich es richtig.


#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <conio.h>
#include <string.h>

int main(int argc, char *argv[])

{

int i,y=500,anzahl,groesse;
double preis=0,gesamt=0,betrag=0;
char eingabe,antwort='N';
FILE *stream;
char dateiname[67];


do
{


system("cls");
printf("\n (Z)\tGesamtpreis");
printf("\n-------------------------------------------------");
printf("\n (L)\tExtras");
printf("\nAuswahl bitte:");
for (i=0;i<y;i++)
{
anzahl=0;
gesamt=0;
preis=0;
betrag=0;
eingabe=getchar();
switch(toupper(eingabe))
{


case 'L':
printf("Betrag eingeben: ");
scanf("%lf",&preis);
printf("\n\tExtras\t%.2lf\tEuro\tWahl:",preis);
gesamt=gesamt+preis;

break;
case 'Z':
i=500;
printf("\n-----------------------------------------------------------------");
printf("\nGesamtpreis\t\t%.2lf\tEuro\n",gesamt);

break;

} // sollte hier nicht eine Klammer hin, um switch zu beenden?

printf("\n\t\tGesamtbetrag erfassen\n");
printf("\nSpeichern unter >");
gets (dateiname);
if ((stream = fopen(dateiname,"w")) == NULL)
{
printf("Fehler beim oeffnen!!");
exit(1);

}
fprintf(stream,"\nGesamtbetrag\t\t%.2lf\tEuro\n",gesamt);
fclose(stream);
}
printf("\nNeuer Kunde?\t(J) (N): ");
antwort=toupper(getch());
}while(antwort!='N');
getch();
}

schorchi
18.06.2010, 22:36
Auch Danke an sternst!!

BurningWave
18.06.2010, 23:26
Schreibe mal ein neues Programm, das nur das minimalste macht, also Datei öffnen, Zeichenkette schreiben, Datei schließen. Z.B. so:



int main()
{
FILE *pFile = fopen("text.txt", "w");
char text[] = "Hello World";

fwrite(text, sizeof(text), 1, pFile);
fclose(pFile);

return 0;
}

schorchi
19.06.2010, 12:43
@_R2D2

Danke für deine Hilfe, habe das Problem behoben. Mit festem Dateinamen ging es dann endlich.