Tagchen, ich bin es mal wieder.
Ich schreibe gerade ein kleines Übungsprogramm.
Es soll über die Konsole laufen und eine ganz einfache Prozentrechnung mit einer unbekannten Zahl durchführen.
Leider sind meine C Kenntnisse wirklich sehr bescheiden, deshalb wird so einiges nicht optimal sein. Aber ich wollte halt was fertigbringen, bevor ich ein halbes Buch durchgelesen habe.
Es gab jetzt beim kompilieren einen ganzen Haufen Fehler und Warnungen.
Einige Fehler oder Warnungen verstehe ich überhaupt nicht. Das Meiste habe ich selbst schon entfernt, es waren oft Flüchtigkeitsfehler oder Sachen, die ich vergessen hatte (ach, da muss ein ; hin?), aber nun bin ich relativ am Ende angekommen und weiß nicht weiter.
Ich würde mich sehr darüber freuen, wenn mir jemand mal ein wenig helfen könnte.
Bitte aber nicht gleich den ganzen Code umwerfen. Ich weiß, es wird dutzende Möglichkeiten geben, das einfacher, schlanker und besser zu machen, aber ich wollte es einfach mit meinen momentanen Kenntnissen schaffen.
//Prozentrechnung
#include <stdio.h> //keine Ahnung, ob ich mehr brauche.
int main () //für diese Zeile zeigt er mir an: fatal error: Internal error: 'Access violation' at 0x0040f0f7.
{
int auswahl (); //hier sollte die Auswahlfunktion starten, um zu bestimmen, was gerechnet werden soll.
{
Label1:; //goto-Punkt, um das Programm erneut zu starten.
//Gerade frag ich mich, ob ein erneutes deklarieren der Variablen bei jedem "neu berechnen" überhaupt gut ist.
//soll ich Label1 besser ein bisschen weiter runter schieben, die Variabeln erstmal "leer" erzeugen
//und nach Label1 auf 0 setzen?
int ausw = 0; //nötig für die auswahl int gw = 0; //Grundwert-Variable int pw = 0; //Prozentwert-Variable int ps = 0; //Prozentsatz-Variable
printf("Was soll berechnet werden?\n\n\n\n Prozentwert: 1\n Prozentsatz: 2\n Grundwert: 3\n");
scanf("%d",&ausw); //Warnung für diese Zeile: warning #2030: '=' used in a conditional expression.
if (ausw = 1)
{
printf("Berechnung des Prozentwertes.\n\n");
printf("Bitte geben sie den Grundwert ein.\n\n");
scanf("%d",&gw);
printf("Bitte geben sie den Prozentsatz ein.\n\n");
scanf("%d",&ps);
pw = ps * gw / 100;
printf("Der Prozentwert beträgt: %d.\n\n",pw);
Label2:; //Wieder ein goto-Punkt. An diesem wird die Variable ausw auf 0 gesetzt und es kommt zu einer erneuten
// Entscheidung mit Hilfe von ausw. Ist das überhaupt so korrekt oder soll ich ne zweite Variable für
// diese Abfrage nehmen?
ausw = 0;
printf("Weiterrechnen oder beenden?\n\n\n"); //warning #2030: '=' used in a conditional expression.
printf("Weiterrechnen: 1\n\n");
printf("Beenden: 2\n\n");
scanf("%d",&ausw); //warning #2030: '=' used in a conditional expression. if (ausw = 1)
goto Label1; //Wenn weitergerechnet werden soll, springt man zurück auf den Anfang
// des Programms.
else if (ausw = 2) //Ansonsten springt man auf einen NOCH NICHT EINGERICHTETEN goto Label3; // goto-Punkt, der das Programm mit einer Verabschiedung beenden soll.
else
printf("Bitte geben sie eine Zahl zwischen 1 und 2 ein.\n\n"); //Bei ner Fehlerhaften Eingabe warning #2030: '=' used in a conditional expression.
//geht es von Vorne los. goto Label2; //warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'.
} //warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'.
else if (ausw = 2) //hier das Gleiche für den Prozentsatz. warning #2233: Insufficient number of arguments to 'printf' according to the format string.
printf("Berechnung des Prozentsatzes.\n\n");
printf("Bitte geben sie den Grundwert ein.\n\n");
scanf("%d",gw);
printf("Bitte geben sie den Prozentwert ein.\n\n");
scanf("%d",pw); //Fehlermeldung: error #2157: Unrecognized statement. error #2001: Syntax error: expected ';' but found 'if'.
ps = pw * 100 / gw; //warning #2030: '=' used in a conditional expression.
printf("Der Prozensatz beträgt %d %.\n\n");
//warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'. goto Label2;
//warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'.
else if (ausw = 3) //und hier für den Grundwert.
printf("Berechnung des Grundwertes.\n\n"); //warning #2233: Insufficient number of arguments to 'printf' according to the format string.
printf("Bitte geben sie den Prozentwert ein.\n\n");
scanf("%d",pw);
printf("Bitte geben sie den Prozentsatz ein.\n\n");
scanf("%d",ps); //error #2157: Unrecognized statement.
gw = pw * 100 / ps; //error #2001: Syntax error: expected ';' but found 'printf'.
printf("Der Grundwert beträgt %d. \n\n");
goto Label2;
else//und hier haben wir das letzte Stück der anfänglichen Abfrage.
//sofern eine fehlerhafte Eingabe kommt, kommt man wieder an den Anfang zurück.
printf("Bitte geben sie eine Zahl zwischen 1 und 3 ein.");
goto Label1;
//Prozentrechnung
#include <stdio.h> //keine Ahnung, ob ich mehr brauche.
int main () //für diese Zeile zeigt er mir an: fatal error: Internal error: 'Access violation' at 0x0040f0f7.
{
int auswahl (); //hier sollte die Auswahlfunktion starten, um zu bestimmen, was gerechnet werden soll.
{
Label1:; //goto-Punkt, um das Programm erneut zu starten.
//Gerade frag ich mich, ob ein erneutes deklarieren der Variablen bei jedem "neu berechnen" überhaupt gut ist.
//soll ich Label1 besser ein bisschen weiter runter schieben, die Variabeln erstmal "leer" erzeugen
//und nach Label1 auf 0 setzen?
int ausw = 0; //nötig für die auswahl int gw = 0; //Grundwert-Variable int pw = 0; //Prozentwert-Variable int ps = 0; //Prozentsatz-Variable
printf("Was soll berechnet werden?\n\n\n\n Prozentwert: 1\n Prozentsatz: 2\n Grundwert: 3\n");
scanf("%d",&ausw); //Warnung für diese Zeile: warning #2030: '=' used in a conditional expression.
if (ausw = 1)
{
printf("Berechnung des Prozentwertes.\n\n");
printf("Bitte geben sie den Grundwert ein.\n\n");
scanf("%d",&gw);
printf("Bitte geben sie den Prozentsatz ein.\n\n");
scanf("%d",&ps);
pw = ps * gw / 100;
printf("Der Prozentwert beträgt: %d.\n\n",pw);
Label2:; //Wieder ein goto-Punkt. An diesem wird die Variable ausw auf 0 gesetzt und es kommt zu einer erneuten
// Entscheidung mit Hilfe von ausw. Ist das überhaupt so korrekt oder soll ich ne zweite Variable für
// diese Abfrage nehmen?
ausw = 0;
printf("Weiterrechnen oder beenden?\n\n\n"); //warning #2030: '=' used in a conditional expression.
printf("Weiterrechnen: 1\n\n");
printf("Beenden: 2\n\n");
scanf("%d",&ausw); //warning #2030: '=' used in a conditional expression. if (ausw = 1)
goto Label1; //Wenn weitergerechnet werden soll, springt man zurück auf den Anfang
// des Programms.
else if (ausw = 2) //Ansonsten springt man auf einen NOCH NICHT EINGERICHTETEN goto Label3; // goto-Punkt, der das Programm mit einer Verabschiedung beenden soll.
else
printf("Bitte geben sie eine Zahl zwischen 1 und 2 ein.\n\n"); //Bei ner Fehlerhaften Eingabe warning #2030: '=' used in a conditional expression.
//geht es von Vorne los. goto Label2; //warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'.
} //warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'.
else if (ausw = 2) //hier das Gleiche für den Prozentsatz. warning #2233: Insufficient number of arguments to 'printf' according to the format string.
printf("Berechnung des Prozentsatzes.\n\n");
printf("Bitte geben sie den Grundwert ein.\n\n");
scanf("%d",gw);
printf("Bitte geben sie den Prozentwert ein.\n\n");
scanf("%d",pw); //Fehlermeldung: error #2157: Unrecognized statement. error #2001: Syntax error: expected ';' but found 'if'.
ps = pw * 100 / gw; //warning #2030: '=' used in a conditional expression.
printf("Der Prozensatz beträgt %d %.\n\n");
//warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'. goto Label2;
//warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'.
else if (ausw = 3) //und hier für den Grundwert.
printf("Berechnung des Grundwertes.\n\n"); //warning #2233: Insufficient number of arguments to 'printf' according to the format string.
printf("Bitte geben sie den Prozentwert ein.\n\n");
scanf("%d",pw);
printf("Bitte geben sie den Prozentsatz ein.\n\n");
scanf("%d",ps); //error #2157: Unrecognized statement.
gw = pw * 100 / ps; //error #2001: Syntax error: expected ';' but found 'printf'.
printf("Der Grundwert beträgt %d. \n\n");
goto Label2;
else//und hier haben wir das letzte Stück der anfänglichen Abfrage.
//sofern eine fehlerhafte Eingabe kommt, kommt man wieder an den Anfang zurück.
printf("Bitte geben sie eine Zahl zwischen 1 und 3 ein.");
goto Label1;
//Prozentrechnung
#include <stdio.h> //keine Ahnung, ob ich mehr brauche.
int main () //für diese Zeile zeigt er mir an: fatal error: Internal error: 'Access violation' at 0x0040f0f7.
{
int auswahl (); //hier sollte die Auswahlfunktion starten, um zu bestimmen, was gerechnet werden soll.
{
Label1:; //goto-Punkt, um das Programm erneut zu starten.
//Gerade frag ich mich, ob ein erneutes deklarieren der Variablen bei jedem "neu berechnen" überhaupt gut ist.
//soll ich Label1 besser ein bisschen weiter runter schieben, die Variabeln erstmal "leer" erzeugen
//und nach Label1 auf 0 setzen?
int ausw = 0; //nötig für die auswahl int gw = 0; //Grundwert-Variable int pw = 0; //Prozentwert-Variable int ps = 0; //Prozentsatz-Variable
printf("Was soll berechnet werden?\n\n\n\n Prozentwert: 1\n Prozentsatz: 2\n Grundwert: 3\n");
scanf("%d",&ausw); //Warnung für diese Zeile: warning #2030: '=' used in a conditional expression.
if (ausw = 1)
{
printf("Berechnung des Prozentwertes.\n\n");
printf("Bitte geben sie den Grundwert ein.\n\n");
scanf("%d",&gw);
printf("Bitte geben sie den Prozentsatz ein.\n\n");
scanf("%d",&ps);
pw = ps * gw / 100;
printf("Der Prozentwert beträgt: %d.\n\n",pw);
Label2:; //Wieder ein goto-Punkt. An diesem wird die Variable ausw auf 0 gesetzt und es kommt zu einer erneuten
// Entscheidung mit Hilfe von ausw. Ist das überhaupt so korrekt oder soll ich ne zweite Variable für
// diese Abfrage nehmen?
ausw = 0;
printf("Weiterrechnen oder beenden?\n\n\n"); //warning #2030: '=' used in a conditional expression.
printf("Weiterrechnen: 1\n\n");
printf("Beenden: 2\n\n");
scanf("%d",&ausw); //warning #2030: '=' used in a conditional expression. if (ausw = 1)
goto Label1; //Wenn weitergerechnet werden soll, springt man zurück auf den Anfang
// des Programms.
else if (ausw = 2) //Ansonsten springt man auf einen NOCH NICHT EINGERICHTETEN goto Label3; // goto-Punkt, der das Programm mit einer Verabschiedung beenden soll.
else
printf("Bitte geben sie eine Zahl zwischen 1 und 2 ein.\n\n"); //Bei ner Fehlerhaften Eingabe warning #2030: '=' used in a conditional expression.
//geht es von Vorne los. goto Label2; //warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'.
} //warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'.
else if (ausw = 2) //hier das Gleiche für den Prozentsatz. warning #2233: Insufficient number of arguments to 'printf' according to the format string.
printf("Berechnung des Prozentsatzes.\n\n");
printf("Bitte geben sie den Grundwert ein.\n\n");
scanf("%d",gw);
printf("Bitte geben sie den Prozentwert ein.\n\n");
scanf("%d",pw); //Fehlermeldung: error #2157: Unrecognized statement. error #2001: Syntax error: expected ';' but found 'if'.
ps = pw * 100 / gw; //warning #2030: '=' used in a conditional expression.
printf("Der Prozensatz beträgt %d %.\n\n");
//warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'. goto Label2;
//warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'.
else if (ausw = 3) //und hier für den Grundwert.
printf("Berechnung des Grundwertes.\n\n"); //warning #2233: Insufficient number of arguments to 'printf' according to the format string.
printf("Bitte geben sie den Prozentwert ein.\n\n");
scanf("%d",pw);
printf("Bitte geben sie den Prozentsatz ein.\n\n");
scanf("%d",ps); //error #2157: Unrecognized statement.
gw = pw * 100 / ps; //error #2001: Syntax error: expected ';' but found 'printf'.
printf("Der Grundwert beträgt %d. \n\n");
goto Label2;
else//und hier haben wir das letzte Stück der anfänglichen Abfrage.
//sofern eine fehlerhafte Eingabe kommt, kommt man wieder an den Anfang zurück.
printf("Bitte geben sie eine Zahl zwischen 1 und 3 ein.");
goto Label1;
Kopiere doch bitte die Warnungen und Fehlermeldungen ebenfalls hier her, hmm?
Edit: Spontan fällt mir auf, dass deine if/elseif/else nur durch Einrückungen getrennt sind, das funktioniert in C nicht. Du musst den ganzen Code mit { und } umklammern:
Jo mach ich gleich. Aber erst werde ich deinen Rat beherzigen und den Code entsprechend abändern. Dann verschwindet eventuell eh einiges an Fehlern.
Zu deinem Rat an sich: Na Super! Da googlet man rum, liest Tipps und Anleitungen und dann findet man keine einzige verdammte Quelle, die korrekte Synthax angibt?
Das mit den geschweiften Klammern kam mir auch nur logisch vor, aber man ist ja Anfänger und macht nach, was man liest...*grummel*
Schonmal vielen Dank, ich werde das im Laufe des Tages entsprechend ändern!
Also euer Spamschutz ist ja mehr als merkwürdig. Ich kann Aufgaben lösen, wie ich will. Abschicken darf ich den Kram dann immer noch nicht.
Ok, dann halt eingeloggt.
Habe deinen Rat befolgt und so gut wie alle Fehler sind dadurch verschwunden.
Übrig blieben nur WARNUNGEN, ein völlig logischer Fehler (Label3 ist noch nirgendwo eingesetzt, das kommt noch) und der zu Anfang erwähnte Fehler in der 5. Zeile.
c(23): warning #2030: '=' used in a conditional expression.
c(40): warning #2030: '=' used in a conditional expression.
c(44): warning #2030: '=' used in a conditional expression.
c(54): warning #2030: '=' used in a conditional expression.
c(56): warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'.
c(58): warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'.
c(60): warning #2233: Insufficient number of arguments to 'printf' according to the format string.
c(66): warning #2030: '=' used in a conditional expression.
c(68): warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'.
c(70): warning #2234: Argument 2 to 'scanf' does not match the format string; expected 'int *' but found 'int'.
c(73): warning #2233: Insufficient number of arguments to 'printf' according to the format string.
c(44): error #2147: Undefined label 'Label3'.
c(5): fatal error: Internal error: 'Access violation' at 0x0040f0f7.
Es werden also die Platzhalter der Reihe nach durch die hinter dem String
angegebenen Werte ersetzt.
Aber bevor ich hier noch etwas falsches sage,
schau dir lieber diesen Link an:
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
Weiter unten auf der Seite stehen auch Beispiele.
Darf ich mal fragen was das werden soll? Und goto's ?
_________________ "Besser" impliziert "Anders" aber "Anders" impliziert noch lange nicht "Besser"
Die alte Kuh so schnell vergisst, dass sie selbst mal Kalb gewesen ist!
Da bin ich wieder!
Danke für die Hilfe bei Printf, hab jetzt wirklich nur noch den zu vernachlässigen Fehler mit Label3 und den Fatal Error.
c(5): fatal error: Internal error: 'Access violation' at 0x0040f0f7.
Ansonsten ist alles ok.
Zitat:
C/C++ Code:
int main ()
{
int auswahl ();
{
Label1:;
C/C++ Code:
int main ()
{
int auswahl ();
{
Label1:;
C/C++ Code:
int main ()
{
int auswahl ();
{
Label1:;
Darf ich mal fragen was das werden soll? Und goto's ?
Äh keine Ahnung was das werden soll. Muss das nicht so sein?
Ich dachte, ich brauch ne allgemeine Startfunktion und dann Unterfunktionen für jede weitere, beliebig oft wiederholbare Aktion des Programms. Dass hier alles in einen Topf geschmissen wurde und in die Funktion "Auswahl" jetzt auch alle Berechnungen reingeschmissen habe, ist vielleicht nicht optimal.
Allgemein macht mir die Strukturierung noch große Probleme. Könnte auch daran liegen, dass ich C noch nicht gut "spreche". Was die gotos angeht: Ich weiß, das kann ich durch Verschachtelungen lösen und gotos sind (aus welchem Grund auch immer, ich weiß es nicht) nicht gern gesehen.
Ich fand es für dieses Übungsprogramm recht praktisch, weil ich Punkte hatte, an denen ich immer wieder vorbeikam. Weiterrechnen? Gut! goto Label 1. Nein? Ok, Tschüss und nach Label 3. Label 2 hätte ich mir auch sparen können, indem ich nur bestimmte Eingaben zulassen würde, aber damit kenne ich mich noch nicht aus.
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.