Verfügbare Informationen zu "Mein erstes Programm"
Qualität des Beitrags: Beteiligte Poster: Teron Gorefiend - dani93 - DrPhil_Guth - Xin - Metamorph Forum: Tutorials.at Forenbeschreibung: Programmierforum aus dem Unterforum: C / C++ Antworten: 72 Forum gestartet am: Mittwoch 19.04.2006 Sprache: deutsch Link zum Originaltopic: Mein erstes Programm Letzte Antwort: vor 14 Jahren, 8 Monaten, 22 Tagen, 18 Stunden, 2 Minuten
Alle Beiträge und Antworten zu "Mein erstes Programm"
Re: Mein erstes Programm
Teron Gorefiend - 23.06.2008, 20:03Mein erstes Programm
Nach bestandener Abschlussprüfung und mit dem Gewissen das jetzt 1 Jahr Fachhochschule auf mich zukommt (jeden tag nur bis 1Uhr Schule^^)
habe ich mich mal hingesetzt und angefangen zu Programmieren. AUch wenn ich Großteil von einem Tutorial abgeschaut habe was so ähnlich aufgebaut war freue ich mich doch endlich mein erstes Program mfertig zu haben, es mag den einen oder anderen vielleicht nicht so toll vorkommen aber ich bin vorerst zufrieden
Es handelt sich um ein Programm, welches die Note ausrechnet nachdem man die Prozentzahl der erreichten Punkte eingegeben hat
Zitat:
#include <stdio.h>
int main()
{
int prozentzahl;
printf("Geben sie Ihre erreichte prozentzahl an: ");
scanf("%i", &prozentzahl);
if (prozentzahl >100)
printf("\nSie haben ueber 100 Prozent Sie sind ein Cheater.", prozentzahl);
else if ((prozentzahl <=100) && (prozentzahl >=92))
printf("\nFuer %i Prozent gibt es eine 1 Gratuliere.", prozentzahl);
else if ((prozentzahl <=91) && (prozentzahl >=81))
printf("\nFuer %i Prozent gibt es eine 2 Super.", prozentzahl);
else if ((prozentzahl <=80) && (prozentzahl >=66))
printf("\nFuer %i Prozent gibt es eine 3 Naja.", prozentzahl);
else if ((prozentzahl <=65) && (prozentzahl >=50))
printf("\nFuer %i Prozent gibt es eine 4 Haette besser werden koennen.", prozentzahl);
else if ((prozentzahl <=49) && (prozentzahl >=20))
printf("\nFuer %i Prozent gibt es eine 5 Leider nicht bestanden.", prozentzahl);
else if ((prozentzahl <=19) && (prozentzahl >=0))
printf("\nFuer %i Prozent gibt es eine 6 .", prozentzahl);
else if (prozentzahl <0)
printf("\nSie haben Minuspunkte bekommen Kein Kommentar.", prozentzahl);
else
printf("\nBitte geben die Werte von 0 bis 100 ein.");
}
Was mich nur stört ist, wenn man z.b. einen Buchstaben oder ein Wort eingibt z.b. Hallo erscheint nicht die else Bedingung sondern die erste if, das verwundert mich noch nen bisschen
Achja: gibts irgendeine möglichkeit, dieses Programm optisch zu verfeinern, also kein dos fenster sondern blauer balken wo man seine zahl eingeben muss, und läße sich das irgendwie als .exe speichern?
Re: Mein erstes Programm
dani93 - 23.06.2008, 20:42
Hallo
Also erstmal solltest du den
Code: Code-Tag
anstelle des
Zitat: Zitat-Tag
verwenden.
@Moderator: Gehört dieses Thema nicht eher in die C/C++ Ecke?
Weiters: funktioniert das Programm auch? Ich meine wird etwas angezeigt?
Ich würde hier einiges ausbessern:
1. prozentzahl ist aber ziemlich lang. Warum nicht gleich proz?
2. Erreichte Punkte als Integer (Ganzzahl) ? Dafür eignet sich ein float besser. %.2f damit werden nur 2 Kommastellen ausgegeben/eingelesen.
Ich würde es eher so machen:
Code: #include <stdio.h>
#include <conio.h>
int main ()
{
float proz;
printf("Geben sie Ihre erreichte prozentzahl an: ");
scanf("%.2f", &proz);
if (proz>100)
{
printf("\nSie haben ueber 100 Prozent Sie sind ein Cheater.");
}
else if ((proz<=100) && (proz>=92))
{
printf("\nFuer %.2f Prozent gibt es eine 1 Gratuliere.", proz);
}
else if ((proz<=91) && (proz>=81))
{
printf("\nFuer %.2f Prozent gibt es eine 2 Super.", proz);
}
else if ((proz<=80) && (proz>=66))
{
printf("\nFuer %.2f Prozent gibt es eine 3 Naja.", proz);
}
else if ((proz<=65) && (proz>=50))
{
printf("\nFuer %.2f Prozent gibt es eine 4 Haette besser werden koennen.", proz);
}
else if ((proz<=49) && (proz>=20))
{
printf("\nFuer %.2f Prozent gibt es eine 5 Leider nicht bestanden.", proz);
}
else if ((proz<=19) && (proz>=0))
{
printf("\nFuer %.2f Prozent gibt es eine 6 .", proz);
}
else if (proz<0)
{
printf("\nSie haben Minuspunkte bekommen Kein Kommentar.");
}
else
{
printf("\nBitte geben die Werte von 0 bis 100 ein.");
}
getch ();
return 0;
}
Naja um meine Einzüge korrekt darzustellen, ist wohl das Fenster zu klein.
Jedenfalls solltest du jeden neuen Funktionsblock (weeeeeit) einrücken (Ja, ich habs verstanden Xin ^^).
Wenn du das Tutorial gelesen hast, weißt du ja, was getch () ist.
Etwas ist aber doch falsch:
printf("\nSie haben ueber 100 Prozent Sie sind ein Cheater.", prozentzahl);
printf("\nSie haben Minuspunkte bekommen Kein Kommentar.", prozentzahl);
Wozu das? Es werden doch keine Elemente ausgegeben. Ich habe dies in der obigen (UNGETESTETEN) Version schon ausgebessert.
Zitat: Was mich nur stört ist, wenn man z.b. einen Buchstaben oder ein Wort eingibt z.b. Hallo erscheint nicht die else Bedingung sondern die erste if, das verwundert mich noch nen bisschen
Das ist, weil mit scanf () nur zahlen und keine Buchstaben eingegeben werden können.
Zitat: Was mich nur stört ist, wenn man z.b. einen Buchstaben oder ein Wort eingibt z.b. Hallo erscheint nicht die else Bedingung sondern die erste if, das verwundert mich noch nen bisschen
Blauer Balken? Bitte etwas genauer! Es ist wahrscheinlich nicht das, was du dir vorstellst, aber unter Windows kannst du den Hintergrund des Programmes ändern, indem du in der Taskleiste einen Rechtsklick auf das Feld des Programmes machst, dann auf Eigenschaften, Farben und dann auf Fensterhintergrund gehst. Dort kannst du dann eine Farbe aussuchen.
Hoffe ich habe dir geholfen.
lg
Re: Mein erstes Programm
DrPhil_Guth - 23.06.2008, 21:23
@dani
dani93 hat folgendes geschrieben:
Ich würde hier einiges ausbessern:
1. prozentzahl ist aber ziemlich lang. Warum nicht gleich proz?
Wenn es sein Wunsch ist lange Variablennamen zu schreiben, würde ich es so lassen. Es ist besser die Variablennamen sind zu lang (dann dauert zwar das tippen länger) als zu kurz (denn dann kennt sich keiner mehr aus). Ein beispiel: In einer Prozedur eines Prozesses werden Prozente ausgerechnet. (; Hier przdr, prznt, pzs oder sonstige abkürzungen zu findet ist ziemlich irreführend.
dani93 hat folgendes geschrieben: Ich würde es eher so machen:
Code: #include <stdio.h>
#include <conio.h>
int main ()
{
float proz;
printf("Geben sie Ihre erreichte prozentzahl an: ");
scanf("%.2f", &proz);
if (proz>100)
{
printf("\nSie haben ueber 100 Prozent Sie sind ein Cheater.");
}
else if ((proz<=100) && (proz>=92))
{
printf("\nFuer %.2f Prozent gibt es eine 1 Gratuliere.", proz);
}
else if ((proz<=91) && (proz>=81))
{
printf("\nFuer %.2f Prozent gibt es eine 2 Super.", proz);
}
else if ((proz<=80) && (proz>=66))
{
printf("\nFuer %.2f Prozent gibt es eine 3 Naja.", proz);
}
else if ((proz<=65) && (proz>=50))
{
printf("\nFuer %.2f Prozent gibt es eine 4 Haette besser werden koennen.", proz);
}
/* [SCHNIP] */
getch ();
}
Naja um meine Einzüge korrekt darzustellen, ist wohl das Fenster zu klein.
Jedenfalls solltest du jeden neuen Funktionsblock (weeeeeit) einrücken (Ja, ich habs verstanden Xin ^^).
Also ich weiß zwar nicht was du von Xin verstanden hast, aber ich bin mir ziemlich sicher so hat ers nicht gemeint. Und ich bin mir auch sicher der poster hat's auch nicht so gemein.
Du musst diese else-if abfrage anders betrachten: wie eine case abfrage mit bereichen statt fixen werten. Insofern ist die struktur FLACH und nicht verschachtelt.
Ich glaub du hast das nicht so ganz verstanden, welche anweisungen wann ausgeführt werden.
Wenn ein if block (oder ein elseif, while, for ...) mit geschwungenen klammern steht werden die anweisungen innerhalb der klammern ausgeführt. Wenn keine klammern stehen, dann wird die nächste anweisung (bis zum nächten semikolon) ausgeführt.
dani93 hat folgendes geschrieben: Wenn du das Tutorial gelesen hast, weißt du ja, was getch () ist.
drphil_guth++ hat folgendes geschrieben: WARNING: getch() has been declared deprecated. Please use getchar() or std::getline() instead.
dani93 hat folgendes geschrieben:
printf("\nSie haben ueber 100 Prozent Sie sind ein Cheater.", prozentzahl);
printf("\nSie haben Minuspunkte bekommen Kein Kommentar.", prozentzahl);
Das kommt vom Copy und Pasten. Stimmts oder hab ich recht? (-;
@Teron Gorefiend
Teron Gorefiend hat folgendes geschrieben: Achja: gibts irgendeine möglichkeit, dieses Programm optisch zu verfeinern, also kein dos fenster sondern blauer balken wo man seine zahl eingeben muss, und läße sich das irgendwie als .exe speichern?
Ja, das lässt sich machen. Bitte wirf den Compiler aus dem Tutorial direkt in den Papierkorb (such vorher deinen quellcode, eine *.c datei und speichere sie irgendwo ab).
Dann lade dir Code::Blocks runter, und probier damit mal ein bisschen herum. Ich bin mir sicher, dann macht das Programmieren gleich mehr spaß.
mfg, DrPhil_Guth
Re: Mein erstes Programm
Teron Gorefiend - 23.06.2008, 21:48
@dani, ich verstehe nicht warum ich %2i &2f und sowas machen muss, ich habs mal getestet bei mir hat er die Zahlen immer richtig gerundet, und meistens erh#lt man bei Prüfungen eh nur gerade zahlen
Zitat: Blauer Balken? Bitte etwas genauer! Es ist wahrscheinlich nicht das, was du dir vorstellst, aber unter Windows kannst du den Hintergrund des Programmes ändern, indem du in der Taskleiste einen Rechtsklick auf das Feld des Programmes machst, dann auf Eigenschaften, Farben und dann auf Fensterhintergrund gehst. Dort kannst du dann eine Farbe aussuchen.
Hoffe ich habe dir geholfen.
naja ich meinte eher ob ich meinen eigenen Balken basteln könnte wo mann dann seine Zahl eingeben muss und der ergebnis erscheint. also das keine commandozeile erscheint
Zitat: Das kommt vom Copy und Pasten. Stimmts oder hab ich recht? (-;
ah schuldig in allen Anklagepunkten :(. Naja c&p habe ich nicht gemacht aber ich habe es fast 1 zu 1 abgeschrieben, erst einmal damit ich was schreiben kann ohne nicht alle 2 Sekunden wieder aufs orginal zu starren
Mit Code Blocks arbeite ich gerade, macht wohl Spaß damit zu arbeiten,m auf jeden Fall wesentlich mehr als mit meinem ersten programm
Edit: ich habe mein programm als .exe auf dem destop liegen aber wenn ich es öffne kommt zwar die Kommandozeile die mich auch auffordert eine zahl einzugeben, aber sobald ich was eingebe verschwindet die Kommandozeile
Re: Mein erstes Programm
dani93 - 23.06.2008, 22:22
DrPhil_Guth hat folgendes geschrieben:
Also ich weiß zwar nicht was du von Xin verstanden hast, aber ich bin mir ziemlich sicher so hat ers nicht gemeint. Und ich bin mir auch sicher der poster hat's auch nicht so gemein.
Er hat gesagt ich soll meinen Code weiter einrücken.
DrPhil_Guth hat folgendes geschrieben:
Du musst diese else-if abfrage anders betrachten: wie eine case abfrage mit bereichen statt fixen werten. Insofern ist die struktur FLACH und nicht verschachtelt.
Ok da hast du wohl recht.
Zitat: Wenn ein if block (oder ein elseif, while, for ...) mit geschwungenen klammern steht werden die anweisungen innerhalb der klammern ausgeführt. Wenn keine klammern stehen, dann wird die nächste anweisung (bis zum nächten semikolon) ausgeführt.
Das ist mir schon klar, aber mit Klammern ist es übersichtlicher. Also wie ich es gemacht habe, ist es nicht falsch, nur eigentlich überflüssig.
Ist es so in Ordnung?
Code: #include <stdio.h>
#include <conio.h>
int main ()
{
float proz;
printf("Geben sie Ihre erreichte prozentzahl an: ");
scanf("%.2f", &proz);
if (proz>100)
printf("\nSie haben ueber 100 Prozent Sie sind ein Cheater.");
else if ((proz<=100) && (proz>=92))
printf("\nFuer %.2f Prozent gibt es eine 1 Gratuliere.", proz);
else if ((proz<=91) && (proz>=81))
printf("\nFuer %.2f Prozent gibt es eine 2 Super.", proz);
//...
getch ();
return 0; //<--gehört ja auch noch her
} [/quote]
Re: Mein erstes Programm
Xin - 24.06.2008, 11:43
DrPhil_Guth hat folgendes geschrieben:
Also ich weiß zwar nicht was du von Xin verstanden hast, aber ich bin mir ziemlich sicher so hat ers nicht gemeint.
Ich bin mir da auch ziemlich sicher ;-)
dani93 hat folgendes geschrieben: Er hat gesagt ich soll meinen Code weiter einrücken.
Jow... weiter.. aber nicht immer weiter ;-)
if und else sollten auf einer Ebene stehen, genauso ist es üblich if und "else if" auf eine Ebene zu stellen, obwohl man da durchaus auch rausziehen kann, aber das sollte man sich gut überlegen, wenn man das if braucht, um eine Art switch() zu bauen. Du ziehst Dein else aber weiter raus, als Dein if.
dani93 hat folgendes geschrieben: Ist es so in Ordnung?
Finde ich verwirrend, weil Du die printfs auf gleiche Ebene bringst, wie die ifs. Versuch Dich in der Regel an eine standardisierte Einrückung zu halten, z.B. 2, 4 oder 8 Leerzeichen (Tabs sind nicht mehr gern gesehen).
Wenn es um eine Form von switch handelt (wie hier)
Code: #include <stdio.h>
#include <conio.h>
int main ()
{
float proz;
printf("Geben sie Ihre erreichte prozentzahl an: ");
scanf("%.2f", &proz);
if (proz>100)
printf("\nSie haben ueber 100 Prozent Sie sind ein Cheater.");
else if ((proz<=100) && (proz>=92))
printf("\nFuer %.2f Prozent gibt es eine 1 Gratuliere.", proz);
else if ((proz<=91) && (proz>=81))
printf("\nFuer %.2f Prozent gibt es eine 2 Super.", proz);
//...
getch ();
return 0; //<--gehört ja auch noch her
}
oder wenn (eher unhängige) Bedingungen geprüft werden (die printfs stehen nicht auf der gleichen Ebene, wie das if, das sie bedingt):
Code: #include <stdio.h>
#include <conio.h>
int main ()
{
float proz;
printf("Geben sie Ihre erreichte prozentzahl an: ");
scanf("%.2f", &proz);
if (proz>100)
printf("\nSie haben ueber 100 Prozent Sie sind ein Cheater.");
else
if ((proz<=100) && (proz>=92))
printf("\nFuer %.2f Prozent gibt es eine 1 Gratuliere.", proz);
else
if ((proz<=91) && (proz>=81))
printf("\nFuer %.2f Prozent gibt es eine 2 Super.", proz);
//...
getch ();
return 0; //<--gehört ja auch noch her
}
Ich (im Gegensatz zu den meisten Konventionen) schätze bei sehr kurzen Statements eine tabellarische Übersicht, die man auch wunderbar in Code packen kann:
Code: #include <stdio.h>
#include <conio.h>
int main ()
{
float proz;
printf("Geben sie Ihre erreichte prozentzahl an: ");
scanf("%.2f", &proz);
if ( proz > 100 ) printf("\nSie haben ueber 100 Prozent Sie sind ein Cheater." );
else if ( (proz<= 100 ) && (proz >= 92) ) printf("\nFuer %.2f Prozent gibt es eine 1 Gratuliere.", proz);
else if ( (proz <= 91) && (proz >= 81) ) printf("\nFuer %.2f Prozent gibt es eine 2 Super.", proz);
//...
getch ();
return 0; //<--gehört ja auch noch her
}
Für mich stellt sich die Frage nicht, was davon übersichtlicher ist, soweit bin ich da mit den meisten Code-Konventionen einer Meinung...
Re: Mein erstes Programm
dani93 - 24.06.2008, 15:31
Zitat: Finde ich verwirrend, weil Du die printfs auf gleiche Ebene bringst, wie die ifs. Versuch Dich in der Regel an eine standardisierte Einrückung zu halten, z.B. 2, 4 oder 8 Leerzeichen (Tabs sind nicht mehr gern gesehen).
Ist ja standardisiert. 5 Leerzeichen. Das die printfs genau unter den ifs stehen ist eher ein blöder Zufall.
Re: Mein erstes Programm
Metamorph - 24.06.2008, 15:55
Zitat: Edit: ich habe mein programm als .exe auf dem destop liegen aber wenn ich es öffne kommt zwar die Kommandozeile die mich auch auffordert eine zahl einzugeben, aber sobald ich was eingebe verschwindet die Kommandozeile
Dein Programm führt alles aus. Die Ergebniss werden dir auch angezeigt. Allerdings geht das so schnell, dass du nichts mehr erkennen kannst.
Du musst dem Programm den Befehl geben, dass es nach der Ausgabe stoppt und erst dann weiter macht (in diesem Fall beenden), wenn du eine Taste gedrückt hast.
Code:
int main(){
/*code*/
getchar();
return EXIT_SUCCESS; /* oder return 0; */
}
Unter Windows gibt es noch die Funktion getch();.
Würde ich aber nicht empfehlen, weil diese nur unter Windows läuft.
Re: Mein erstes Programm
Xin - 24.06.2008, 17:19
dani93 hat folgendes geschrieben: Zitat: Finde ich verwirrend, weil Du die printfs auf gleiche Ebene bringst, wie die ifs. Versuch Dich in der Regel an eine standardisierte Einrückung zu halten, z.B. 2, 4 oder 8 Leerzeichen (Tabs sind nicht mehr gern gesehen).
Ist ja standardisiert. 5 Leerzeichen. Das die printfs genau unter den ifs stehen ist eher ein blöder Zufall.
Ich kenne niemand, der eine Einrückung von 5 benutzt. 8 war lange Zeit Standard, sehe ich äußerst selten, 4 ist heutzutage üblich, ich benutze 2.
Wenn in Begründungen Worte wie "eher ein blöder Zufall" auftauchen, dann stellt sich mir die Frage, ob das nicht vielleicht eher eine blöde Begründung ist ;)
Grundsätzlich kannst Du natürlich einrücken, wie Du magst und solange es regelmäßig gleich eingerückt ist, ist ja auch alles okay. Es fiel mir halt nur auf.
Re: Mein erstes Programm
Teron Gorefiend - 24.06.2008, 17:23
also wenn ich
float prozentzahl;
nehme kommt bei Buchstaben zwar eine Fehlermeldung jedoch auch, wenn ich gültige zahlen im bereich von 1-100 nehme
bei int prozentzahl;
wird bei Zahlen zwar der passende Text angezeigt aber bei Buchstaben kommt die erste if bedingung.
hab sonst eigendlich alles so wie bei euch mit float prozentzahl;
Re: Mein erstes Programm
Xin - 24.06.2008, 19:16
Teron Gorefiend hat folgendes geschrieben: also wenn ich
float prozentzahl;
nehme kommt bei Buchstaben zwar eine Fehlermeldung jedoch auch, wenn ich gültige zahlen im bereich von 1-100 nehme
bei int prozentzahl;
wird bei Zahlen zwar der passende Text angezeigt aber bei Buchstaben kommt die erste if bedingung.
hab sonst eigendlich alles so wie bei euch mit float prozentzahl;
Prozentzahl mit Buchstaben?
current code please...
Re: Mein erstes Programm
dani93 - 25.06.2008, 15:00
Er meint (glaube ich), dass eine Fehlermeldung erscheinen sollte, wenn ein Buchstabe/Text eingegeben wird. Dann kannst du (in diesem Fall) die Zahl als char einlesen. Aber Achtung! Char geht nur bis 256.
Beispiel:
Code: //...
char prozentzahl;
//...
scanf ("%c", &prozentzahl); // %c, weil es ein character ist.
if (prozentzahl >'100') // Anführungszeichen !!! --> Shift+#
printf("\nSie haben ueber 100 Prozent Sie sind ein Cheater.");
else if ((prozentzahl <='100') && (prozentzahl >='92'))
printf("\nFuer %c Prozent gibt es eine 1 Gratuliere.", prozentzahl);
//...
else if ((prozentzahl <='91') && (prozentzahl >='81'))
printf("\nFuer %c Prozent gibt es eine 2 Super.", prozentzahl);
Hoffe ich habe das richtig verstanden...
Re: Mein erstes Programm
Teron Gorefiend - 25.06.2008, 18:50
@dani93 meinst du so:
Code:
#include <stdio.h>
#include <conio.h>
int main()
{
char prozentzahl;
printf("Geben sie Ihre erreichte prozentzahl an: ");
scanf("%c", &prozentzahl);
if (prozentzahl >'100')
printf("\nSie haben ueber 100 Prozent Sie sind ein Cheater.", prozentzahl);
else if ((prozentzahl <='100') && (prozentzahl >='92'))
printf("\nFuer %c Prozent gibt es eine 1 Gratuliere.", prozentzahl);
else if ((prozentzahl <='91') && (prozentzahl >='81'))
printf("\nFuer %c Prozent gibt es eine 2 Super.", prozentzahl);
else if ((prozentzahl <='80') && (prozentzahl >='66'))
printf("\nFuer %c Prozent gibt es eine 3 Naja.", prozentzahl);
else if ((prozentzahl <='65') && (prozentzahl >='50'))
printf("\nFuer %c Prozent gibt es eine 4 Haette besser werden koennen.", prozentzahl);
else if ((prozentzahl <='49') && (prozentzahl >='20'))
printf("\nFuer %c Prozent gibt es eine 5 Leider nicht bestanden.", prozentzahl);
else if ((prozentzahl <='19') && (prozentzahl >='0'))
printf("\nFuer %c Prozent gibt es eine 6 Grottenschlecht.", prozentzahl);
else if (prozentzahl <'0')
printf("\nSie haben Minuspunkte bekommen Kein Kommentar.", prozentzahl);
else
printf("\nBitte geben Sie ihre erreichte Prozentzahl von 0-100 ein.");
getch();
return 0;
}
Also wenn ich das so eintippe wird nur die erste zahl gewertet, also immer ne 6
bei buchstaben und wörtern wird ebenfalls nur der erste Buchstabe gewertert und immer ne 6 gegeben
Re: Mein erstes Programm
dani93 - 25.06.2008, 19:23
Sorry, hab ich (mal wieder) kompletten Blödsinn verzapft :(
Bei mir hats bisher immer funktioniert, weil ich so eine Eingabe fürs Menü überprüft habe. Und da waren die Zahlen immer einstellig.
Ich suche gerade nach eienr anderen Lösung.
Unser Lehrer hat mal irgendwas von fflush (stdin) gemurmelt, aber richtig erklärt hat er es uns nicht...
EDIT: Und du hast wieder c&p gemacht^^
Re: Mein erstes Programm
Xin - 25.06.2008, 19:56
dani93 hat folgendes geschrieben: Sorry, hab ich (mal wieder) kompletten Blödsinn verzapft :(
Jow... wenn Du einen Wert ausliest, dann ist er weg.
Gut, es gibt afair eine Möglichkeit den Wert wieder in den Stream zurückzupushen.
dani93 hat folgendes geschrieben: Bei mir hats bisher immer funktioniert, weil ich so eine Eingabe fürs Menü überprüft habe. Und da waren die Zahlen immer einstellig.
Da ist der Knackpunkt.
dani93 hat folgendes geschrieben: Ich suche gerade nach eienr anderen Lösung.
Du erinnerst Dich daran, dass ich mal scanf() verteufelt habe und Übergabeparameter als bessere Alternative angeboten habe?
Vielleicht bietest Du das als Alternative an?
(int main( int argv, char ** argv ) )
dani93 hat folgendes geschrieben: Unser Lehrer hat mal irgendwas von fflush (stdin) gemurmelt, aber richtig erklärt hat er es uns nicht...
flush( .. ) leert einen Buffer.
flush( stdin ) wirft alle Zeichen weg, die eingegeben, aber noch nicht ausgelesen wurden.
flush( stdout ) wirft alle gepufferten Zeichen aus dem Ausgabepuffer werden zuerst auf die Ausgabe (also den Bildschirm ausgegeben). Das ist sinnvoll, wenn man einen Text ausgeben möchte, aber noch kein '\n' Zeichen ausgeben will.
Re: Mein erstes Programm
dani93 - 25.06.2008, 20:29
Würd ich ja gerne, wenn ich wissen würde wie man diese Parameter verwendet...
Also ich mal gegoogelt und das gefunden.
Aber ich versteh immer noch nicht wie der Inhalt von argv festgelegt ist.
Wenn ich das 0te Argument als String ausgebe, erhalte ich immer den Pfad des Programmes. Und wie legt man andere fest?
Frage: du hast (int main( int argv, char ** argv ) ) geeschrieben. Bekommt man dann nicht einen Multiple-Declaration-Error, weil beide den gleichen Namen haben?
Immer Internet finde ich immer argc als Counter.
Re: Mein erstes Programm
Xin - 25.06.2008, 20:56
dani93 hat folgendes geschrieben: Würd ich ja gerne, wenn ich wissen würde wie man diese Parameter verwendet...
Ich hatte afair mal ein Beispielprogramm gebracht:
dani93 hat folgendes geschrieben: Aber ich versteh immer noch nicht wie der Inhalt von argv festgelegt ist.
Wenn ich das 0te Argument als String ausgebe, erhalte ich immer den Pfad des Programmes. Und wie legt man andere fest?
Naja, Du übergibst es halt:
Spiel damit mal was:
Code:
#include <stdio.h>
int main( int argc, char ** argv )
{
printf( "Anzahl Argumente: %d\n", argc );
for( int i = 0; i < argc; i++ )
{
printf( "%d. Argument: %s\n", argv[ i ] );
}
}
Und nach dem Kompilieren spielst Du was damit
Code:
$ programm Argument1 Argument2 Argument 4
dani93 hat folgendes geschrieben: Frage: du hast (int main( int argv, char ** argv ) ) geeschrieben. Bekommt man dann nicht einen Multiple-Declaration-Error, weil beide den gleichen Namen haben?
Immer Internet finde ich immer argc als Counter.
Bekommt man, die übliche Bezeichnungen sind argc und argv, allerdings kann man sie beliebig wählen, es sind ja auch nur Variablennamen. Nur gleich sollten sie natürlich nicht heißen, da hast Du recht.
Re: Mein erstes Programm
dani93 - 25.06.2008, 21:56
Zitat: Nur gleich sollten sie natürlich nicht heißen, da hast Du recht.
Dass das auch noch vorkommt ^^
Werde mir den Code mal genau anschaun.
Re: Mein erstes Programm
dani93 - 25.06.2008, 22:00
Ich bin gleich so gut in Fahrt, ich muss dich schon wieder korrigieren.
Dieses printf in der Schleife:
Code: printf( "%d. Argument: %s\n", argv[i]);
Hier ist der umgekehrte Fehler des Programmes, um das es hier eigentlich geht. Es fehlt ein Argument: i
Also
Code: printf( "%d. Argument: %s\n", i, argv[i]);
noch schöner kommts jedoch mit i+1, da man dann kein 0tes Argument hat.
Irgendwie hab ich fertiggebracht, $ programm Argument1 Argument2 Argument 4 in das Programm zu laden. Versteh ich das richtig, dass man diese Argumente einfach vor dem Compilieren eingeben kann? Mir kommt jedenfalls folgendes raus:
Re: Mein erstes Programm
Xin - 25.06.2008, 22:05
dani93 hat folgendes geschrieben: Zitat: Nur gleich sollten sie natürlich nicht heißen, da hast Du recht.
Dass das auch noch vorkommt ^^
Werde mir den Code mal genau anschaun.
Soll vorkommen ^^
dani93 hat folgendes geschrieben: Ich bin gleich so gut in Fahrt, ich muss dich schon wieder korrigieren.
Ich teste die Codes nicht, sondern schreibe sie nur rein.
dani93 hat folgendes geschrieben: Dieses printf in der Schleife:
Code: printf( "%d. Argument: %s\n", argv[i]);
Hier ist der umgekehrte Fehler des Programmes, um das es hier eigentlich geht. Es fehlt ein Argument: argc
Also
Code: printf( "%d. Argument: %s\n", argc, argv[i]);
Schau Dir den Code genauer an ^^
Code: printf( "%d. Argument: %s\n", i, argv[i]);
Re: Mein erstes Programm
dani93 - 25.06.2008, 22:11
Zitat: Schau Dir den Code genauer an ^^
Ich war gerade noch beim editieren^^
Übrigens hab ich im oberen Post ein Bild eingefügt.
Re: Mein erstes Programm
DrPhil_Guth - 25.06.2008, 22:30
Xin hat folgendes geschrieben:
dani93 hat folgendes geschrieben: Unser Lehrer hat mal irgendwas von fflush (stdin) gemurmelt, aber richtig erklärt hat er es uns nicht...
flush( .. ) leert einen Buffer.
flush( stdin ) wirft alle Zeichen weg, die eingegeben, aber noch nicht ausgelesen wurden.
flush( stdout ) wirft alle gepufferten Zeichen aus dem Ausgabepuffer werden zuerst auf die Ausgabe (also den Bildschirm ausgegeben). Das ist sinnvoll, wenn man einen Text ausgeben möchte, aber noch kein '\n' Zeichen ausgeben will.
Da muss ich widersprechen und Warnen. Verlasst euch nie nie nie nie darauf dass fflush den eingapepuffer löscht. In der FAQ könnt ihr nachlesen, wie mans richtig macht:
http://www.iphpbb.com/board/viewtopic.php?nxu=53411326nx34195&p=2756#2756
Hier ein auszug aus der Linux manpage. Soweit ich das verstanden habe ist hier das verhalten UNDEFINED.
Weiter unten ein auszug aus cplusplus.com/refrence, da steht mehr oder weniger IMPLEMENTATION DEFINED.
man 3 fflush hat folgendes geschrieben: FFLUSH(3) Linux Programmer’s Manual FFLUSH(3)
NAME
fflush - flush a stream
SYNOPSIS
#include <stdio.h>
int fflush(FILE *stream);
DESCRIPTION
The function fflush() forces a write of all user-space buffered data
for the given output or update stream via the stream’s underlying write
function. The open status of the stream is unaffected.
...
http://www.cplusplus.com/reference/clibrary/cstdio/fflush.html hat folgendes geschrieben: int fflush ( FILE * stream );
<cstdio>
Flush stream
If the given stream was open for writing and the last i/o operation was an output operation, any unwritten data in the output buffer is written to the file.
If it was open for reading and the last operation was an input operation, the behavior depends on the specific library implementation. In some implementations this causes the input buffer to be cleared, but this is not standard behavior.
If the argument is a null pointer, all open files are flushed.
The stream remains open after this call.
When a file is closed, either because of a call to fclose or because the program terminates, all the buffers associated with it are automatically flushed.
Wegen manchen compilern ist das märchen aufgekommen, dass man mit fflush(stdin); den eingabepuffer löschen kann.
Re: Mein erstes Programm
Xin - 25.06.2008, 23:48
dani93 hat folgendes geschrieben:
Code: printf( "%d. Argument: %s\n", i, argv[i]);
noch schöner kommts jedoch mit i+1, da man dann kein 0tes Argument hat.
Argument 0 ist immer der Programmname.
dani93 hat folgendes geschrieben: Irgendwie hab ich fertiggebracht, $ programm Argument1 Argument2 Argument 4 in das Programm zu laden. Versteh ich das richtig, dass man diese Argumente einfach vor dem Compilieren eingeben kann?
*lach* (bis ich kapiert habe, was Du da tust...)
Also $ meint den Promt in einer Shell. Programm meint das Programm, dass Du kompiliert hast und Argument1 ist das erste Argument - daher der Name...
Die Argumente übergibst Du an das kompilierte Prorgamm, nicht an den Compiler. Der Shell-Interpreter macht daraus ein char*-Array der Länge argc, welches Du in argv übergeben bekommst.
DrPhil_Guth hat folgendes geschrieben: Xin hat folgendes geschrieben:
flush( stdin ) wirft alle Zeichen weg, die eingegeben, aber noch nicht ausgelesen wurden.
Da muss ich widersprechen und Warnen. Verlasst euch nie nie nie nie darauf dass fflush den eingapepuffer löscht.
Jow, habe ich auch schonmal irgendwo gelesen. Grundsätzlich rate ich von scanf() grundsätzlich ab, was (hier) den Einsatz von fflush(stdin) überflüssig macht.
Re: Mein erstes Programm
Metamorph - 26.06.2008, 01:03
Wenn du noch Probleme mit den Kommandozeilenparametern haben solltest, dann denk mal ein reines Kommandozeilenprogramm.
Beispiel ping:
Code:
C:\ping 127.0.0.1
In diesem Fall ist ist Argument 0 der Name des Programmes, Argument 1 Parameterwert, den das Programm auswertet.
Code:
C:\ping -t 127.0.0.1
Hier ist Argument 1 eine zusätzliche Anweisung an das Programm. In diesem Fall soll es solange den Localhost anpingen, bis der Benutzer das Programm manuell abbricht.
Natürlich muss das Programm vorher kompiliert sein. Kommandozeilenparameter sind Anweisung, die zur Laufzeit eingegeben werden.
In der Kommandozeile musst du dich natürlich erstmal in dem Verzeichnis befinden, in dem auch das Programm ist.
Edit:
Habe noch was vergessen.
Die einzelnen Argumente werden durch Leerzeichen getrennt, damit es keine Verwechslungen gibt.
Re: Mein erstes Programm
dani93 - 26.06.2008, 14:42
Zitat: Die Argumente übergibst Du an das kompilierte Prorgamm, nicht an den Compiler. Der Shell-Interpreter macht daraus ein char*-Array der Länge argc, welches Du in argv übergeben bekommst.
Gibt argc nicht die Anzahl der Argumente an?
Zitat: *lach* (bis ich kapiert habe, was Du da tust...)
Also $ meint den Promt in einer Shell. Programm meint das Programm, dass Du kompiliert hast und Argument1 ist das erste Argument - daher der Name...
Die Argumente übergibst Du an das kompilierte Prorgamm, nicht an den Compiler. Der Shell-Interpreter macht daraus ein char*-Array der Länge argc, welches Du in argv übergeben bekommst.
Ich nehme an, dann ist es falsch, wenn ich in meiner Steinzeit Borland-IDE auf Debug - Load und dann was bei Argumente reinschreibe...
Und natürlich nach dem Compilieren.
Zusammenfassung (korrigiert mich, wenn irgendwas falsch ist):
argc und argv kann man als Parameter an main übergeben.
Dabei ist argc die Anzahl der Argumente und argv sind die Argumente als String. Das 0te Argument ist immer der Dateipfad. Was ich auch schon mitbekommen hab ist, dass die Argumente durch ein Leerzeichen abgetrennt werden.
Re: Mein erstes Programm
Metamorph - 26.06.2008, 15:22
Zitat: Gibt argc nicht die Anzahl der Argumente an?
Ja, das heisst soviel wie argumentcounter.
Dagegen bedeutet argv soviel wie argumentvalue.
Zitat: Ich nehme an, dann ist es falsch, wenn ich in meiner Steinzeit Borland-IDE auf Debug - Load und dann was bei Argumente reinschreibe...
Das Programm wird zuerst kompiliert. Danach machst du die Eingaben über die Kommandozeilenparameter.
Zitat: Das 0te Argument ist immer der Dateipfad.
Falsch. Das nullte Argument ist der Dateiname. Bevor du das Programm aufrufst, musst du in der Konsole über den Befehl cd in das Verzeichnis gelangen, in dem sich das Programm befindet.
Danach rufst du das Programm mit den entsprechenden Argumenten auf.
Re: Mein erstes Programm
dani93 - 26.06.2008, 15:41
Zitat: Das Programm wird zuerst kompiliert. Danach machst du die Eingaben über die Kommandozeilenparameter.
Kannst du mir diesen Vorgang etwas genauer schildern?
@Moderator: Da dies schon etwas vom Thema abweicht, wäre es sinnvoll ein eigenes Thema zu erstellen und hier die Lösung zu posten.
Re: Mein erstes Programm
Metamorph - 26.06.2008, 16:12
Dieses Programm addiert nur 2 Zahlen miteinander.
Code:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
long x,y; /* mit diesen Werten wird gerechnet */
if(argc<4){ /* Falls zu wenige Parameter angegeben werden */
printf("Zu wenige Parameter");
return (EXIT_FAILURE);
}
x=atol(argv[1]);/* Umwandlung von Character in Long */
y=atol(argv[3]);
if(argv[2][0]=='+')
printf("%i + %i = %i\n",x,y,(x+y));
else
printf("Ungültiger Operator");
return (EXIT_SUCCESS);
}
Das Programm wird kompiliert. Angenommen der Dateiname wäre example.exe und du hast das Programm auf dem Desktop gespeichert.
Du öffnest cmd und dort erscheint der Prompt.
C:\Dokumente und Einstellungen\Benutzer\
Dort gibst du folgendes ein:
cd Desktop
C:\Dokumente und Einstellungen\Benutzer\Desktop\
Jetzt gibst du das ein:
example.exe 3 + 4
P.S.:
Ich hoffe ich habe keine allzu gravierenden Fehler reingeschrieben. Ich benutze Windows schon lange nicht mehr. :D
EDIT:
@Xin:
In welchem Beitrag hast du das über scanf() geschrieben. Ich würde gerne wissen, welche Schwächen diese Funktion hat.
Re: Mein erstes Programm
dani93 - 26.06.2008, 16:25
Ok ich habs jetzt so gemacht wie du gesagt hast, und komme zum genau gleichen Ergebnis wie vorhin.
Wahrscheinlich macht das die IDE selbstständig.
Re: Mein erstes Programm
dani93 - 26.06.2008, 16:36
Ich glaub ich habs jetzt:
Code: #include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
long proz;
proz=atol(argv[1]);
if (proz>100)
printf("Sie haben ueber 100 Prozent Sie sind ein Cheater.");
else if ((proz<=100) && (proz>=92))
printf("\nFuer %d Prozent gibt es eine 1 Gratuliere.", proz);
else if ((proz<=91) && (proz>=81))
printf("\nFuer %d Prozent gibt es eine 2 Super.", proz);
//...
getchar();
return (EXIT_SUCCESS);
}
Programm getestet und es funktioniert :D
Wie man das Programm verwendet hat ja Metamorph ausführlich erklärt. Bei meiner Methode sieht man jedoch den vorher in die Befehlszeile eingegebenen Text nicht. Das hängt natürlich von der IDE ab, ob sie das kann.
Re: Mein erstes Programm
Metamorph - 26.06.2008, 16:37
Zitat: Ok ich habs jetzt so gemacht wie du gesagt hast, und komme zum genau gleichen Ergebnis wie vorhin.
Was für ein Ergebnis hattest du denn vorhin?
Zitat: Wahrscheinlich macht das die IDE selbstständig.
WTF?
Die IDE soll dir nur ein Programm kompilieren, sonst nichts.
Alles andere machst du über die Eingabeaufforderung.
Ich glaube das war Start->Ausführen,
Und dort dann cmd eintippen.
Dann kommst du in die Eingabeaufforderung, nachdem du das Programm kompiliert hast. :D
EDIT:
Das Problem ist wohl gelöst.
Besorg dir besser Code::Blocks. Deine IDE scheint gemeingefährlich zu sein. :D
Re: Mein erstes Programm
Teron Gorefiend - 26.06.2008, 19:28
kleine frage:
gehts noch um mein programm/problem oder inzwischen um was ganz anderes?
ich kann mich übersehen haben aber bis jetzt habe ich noch keine passende Lösung für mein Problem gesehen
Re: Mein erstes Programm
dani93 - 26.06.2008, 19:43
Metamorph hat folgendes geschrieben:
Was für ein Ergebnis hattest du denn vorhin?
Das ist zwar nicht, was Xin haben wollte, aber ich habe es an das Programm übergeben. Und das gleiche hab ich auch mit den zahlen gemacht.
Metamorph hat folgendes geschrieben: Besorg dir besser Code::Blocks. Deine IDE scheint gemeingefährlich zu sein.
Meine Borland Version stammt noch aus den Zeiten des Kalten Krieges :D
Zitat: gehts noch um mein programm/problem oder inzwischen um was ganz anderes?
ich kann mich übersehen haben aber bis jetzt habe ich noch keine passende Lösung für mein Problem gesehen
Du nimmst das:
Code: #include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
long proz;
proz=atol(argv[1]);
if (proz>100)
printf("Sie haben ueber 100 Prozent Sie sind ein Cheater.");
else if ((proz<=100) && (proz>=92))
printf("\nFuer %d Prozent gibt es eine 1 Gratuliere.", proz);
else if ((proz<=91) && (proz>=81))
printf("\nFuer %d Prozent gibt es eine 2 Super.", proz);
//...
getchar();
return (EXIT_SUCCESS);
}
und machst das:
Zitat: Das Programm wird kompiliert. Angenommen der Dateiname wäre example.exe und du hast das Programm auf dem Desktop gespeichert.
Du öffnest cmd und dort erscheint der Prompt.
C:\Dokumente und Einstellungen\Benutzer\
Dort gibst du folgendes ein:
cd Desktop
C:\Dokumente und Einstellungen\Benutzer\Desktop\
Jetzt gibst du das ein:
example.exe 80
Re: Mein erstes Programm
dani93 - 26.06.2008, 21:25
*gelöscht*
Re: Mein erstes Programm
Xin - 26.06.2008, 21:49
Teron Gorefiend hat folgendes geschrieben: kleine frage:
gehts noch um mein programm/problem oder inzwischen um was ganz anderes?
Das Problem mit scanf wird soeben gelöst.
Deine Frage mit blauen Kästen habe ich bisher nicht so ganz verstanden.
@dani93: Schönes Vid... könntest Du noch beschreiben, was man da sieht, weil ich seh da nix - egal ob Vollbild oder klein.
Re: Mein erstes Programm
dani93 - 27.06.2008, 11:36
Ok ich werd ein neues machen.
Re: Mein erstes Programm
dani93 - 27.06.2008, 11:54
Link
Gleiches Video, aber anscheinend wird die Qualität durch youtube deutlich schlecher...
Re: Mein erstes Programm
Xin - 27.06.2008, 17:44
dani93 hat folgendes geschrieben: Link
Gleiches Video, aber anscheinend wird die Qualität durch youtube deutlich schlecher...
Sieht doch super aus. :-)
Nun könntest Du einen Parser schreiben, der Flags (programm -F -l -a -g -s --mehr-Flags) abfängt und Eingaben liest (programm befehl eingabe.txt ausgabe.txt)
Re: Mein erstes Programm
dani93 - 28.06.2008, 12:37
Zuerst möchte ich noch auf das Video zurückkommen.
Ich wollte damit Metamorph zeigen, dass man mit Borland direkt Parameter an main übergeben kann.
@Metamorph: Is doch das Gleiche, als wenn ich es über cmd mache. Oder doch nicht?
Re: Mein erstes Programm
Metamorph - 28.06.2008, 12:55
Dani93 hat folgendes geschrieben: @Metamorph: Is doch das Gleiche, als wenn ich es über cmd mache. Oder doch nicht?
Ja, es ist das gleiche. Diese Kommandozeilenparameter sind eigentlich nur für Konsolen gedacht.
Dani93 hat folgendes geschrieben: Ich wollte damit Metamorph zeigen, dass man mit Borland direkt Parameter an main übergeben kann.
Ist ja interessant. Eine Testumgebung für die Konsole in einer IDE integriert. :D
@Teron Gorefiend:
Wo liegt jetzt dein Problem?
Ich habe es mit den blauen Balken auch nicht verstanden.
Re: Mein erstes Programm
dani93 - 28.06.2008, 13:01
Du hast vorher in deinem Code das hier geschrieben:
Code: x=atol(argv[1]);/* Umwandlung von Character in Long */
Gibt es Funktionen wie atol auch für andere Dateitypen, z.B. float?
Re: Mein erstes Programm
Metamorph - 28.06.2008, 14:13
Ja, die gibt es:
atoi() für int
atof() für double
Hier kannst du dir die Funktionen von stdlib.h anschauen.
Re: Mein erstes Programm
dani93 - 29.06.2008, 12:11
Xin hat folgendes geschrieben:
Nun könntest Du einen Parser schreiben, der Flags (programm -F -l -a -g -s --mehr-Flags) abfängt und Eingaben liest (programm befehl eingabe.txt ausgabe.txt)
Lieber Xin. Wir alle hier wissen, dass du einer der besten (wenn nicht sogar der beste) Programmierer hier bist. Meine Programmiererfahrung (wenn man das überhaupt so nennen kann) kommt aus erst 10 Monaten C. Es wäre sehr freundlich, wenn du deine Vorschläge etwas leichter formulieren könntest. Was ich damit sagen will: Erwarte dir nicht zu viel con mir.
Letzte Woche hatte ich mal etwas Zeit und hab mich an das Schleifenprogramm gesetzt, über das wir so lange diskutiert haben. Jetzt erscheint es ganz einfach. Vor ein paar Monaten bin ich noch Tagelang vor dem Bildschirm gesessen und habe diesen verflixten Fehler gesucht. Ich habe ihn zwar nicht gefunden, aber das Programm komplett neu geschrieben und jetzt funktionierts. Als ich fertig war, verglich ich meinen Programmierstil von damals mit dem von heute. Naja das neue Programm war nicht einmal die Hälfte von dem alten.
Was ich diesmal sagen will ist, wenn man etwas länger macht, erscheint es einem viel einfacher. Schleifen kann ich jetzt seit ca. acht Monaten. Doch wie man Parameter an main übergibt und dann verwendet, habe ich erst seit Metamorphs Beitrag vom 26.06.2008, 16:12 in diesem Topic erfahren. Es wird also noch einige Zeit dauern, die Möglichkeit zu begreifen, die diese Parameter bieten.
Re: Mein erstes Programm
Xin - 29.06.2008, 12:42
dani93 hat folgendes geschrieben: Xin hat folgendes geschrieben:
Nun könntest Du einen Parser schreiben, der Flags (programm -F -l -a -g -s --mehr-Flags) abfängt und Eingaben liest (programm befehl eingabe.txt ausgabe.txt)
Lieber Xin. Wir alle hier wissen, dass du einer der besten (wenn nicht sogar der beste) Programmierer hier bist.
Es gibt immer einen, der besser ist als man selbst. Ich gehöre sicherlich nicht mehr zu den Anfängern, aber es gibt es sicherlich eine ganze Reihe, die besser sind als ich.
dani93 hat folgendes geschrieben: Meine Programmiererfahrung (wenn man das überhaupt so nennen kann) kommt aus erst 10 Monaten C. Es wäre sehr freundlich, wenn du deine Vorschläge etwas leichter formulieren könntest. Was ich damit sagen will: Erwarte dir nicht zu viel con mir.
Tue ich nicht. Ich sehe das etwas anders als Du: Du programmierst schon mindestens 10 Monate, was Du aus den 10 Monaten machst, ist Deine Sache. Du hast ein Forum, wo nicht nur ich bin, es sind genug Leute da, um Deine Fragen zu beantworten.
Ich "erwarte" gar nichts von Dir. Ich gebe allerdings auch ununwunden zu, dass ich mich schon mehrfach wunderte, warum ihr hier so viele so lange mit Programmen im Stil von scanf() - "Bitte wählen Sie aus..." - printf() - "Das Ergebnis ist %d" rumkrebsen.
Wie gesagt, ich habe schonmal unterrichtet und das waren 90 Minuten die Woche, 20 Blöcke, also 40 Schulstunden oder 30 echte Stunden. Einer schrieb danach ein Programm, dass Texte Enigma verschlüsselte. Das waren nach den paar Stunden alles noch keine Programmierhelden, aber die Grundlagen waren da.
Ich "erwarte" gar nichts, aber Du solltest vielleicht mal etwas mehr erwarten von Dir erwarten - machbar ist das nämlich.
Mein Vorschlag ist, dass Du nun die Argumente durchgehst und sie vergleichst: Stell Dir vor, Du schreibst einen Echo-Befehl.
echo "Hallo Welt"
...schreibt "Hallo Welt" auf den Bildschirm und geht in die nächste Zeile.
echo -n "Hallo Welt"
...schreibt nur Hallo Welt auf den Bildschirm und geht nicht in die nächste Zeile.
Dafür musst Du prüfen, ob -n vorne steht, bevor Du die Ausgabe machst.
dani93 hat folgendes geschrieben: Was ich diesmal sagen will ist, wenn man etwas länger macht, erscheint es einem viel einfacher. Schleifen kann ich jetzt seit ca. acht Monaten. Doch wie man Parameter an main übergibt und dann verwendet, habe ich erst seit Metamorphs Beitrag vom 26.06.2008, 16:12 in diesem Topic erfahren. Es wird also noch einige Zeit dauern, die Möglichkeit zu begreifen, die diese Parameter bieten.
In dem Falll sollten Dir die Möglichkeiten bekannt sein - ich gehe mal davon aus, dass Du schonmal eine Shell oder eine DOS-Box gesehen hast und dort z.B.
Code: cd c:\Programme
eingegeben hast.
Übringens: Mehr als die Hälfte der 30 Stunden habe ich nicht dafür eingesetzt, dass die Leute programmieren lernen, sondern immer wieder zu erklären, dass es nicht notwendig ist kompliziert zu denken.
Die meisten überlegen sich komplizierte Lösungen, weil die einfachste ist so trivial, dass nicht richtig sein könnte. Programmieren soll doch kompliziert sein, da kann es doch keine einfachen Lösungen geben...
Anders formuliert: Unterschätze nicht Deine Möglichkeiten; überschätze nicht meine Fähigkeiten. Ich kann was mehr und habe mehr Erfahrung also Du. Aber ich koche auch nur mit Wasser.
Enigma: http://de.wikipedia.org/wiki/Enigma_(Maschine)
Re: Mein erstes Programm
dani93 - 29.06.2008, 14:27
Zitat: Mein Vorschlag ist, dass Du nun die Argumente durchgehst und sie vergleichst: Stell Dir vor, Du schreibst einen Echo-Befehl.
echo "Hallo Welt"
...schreibt "Hallo Welt" auf den Bildschirm und geht in die nächste Zeile.
echo -n "Hallo Welt"
...schreibt nur Hallo Welt auf den Bildschirm und geht nicht in die nächste Zeile.
Dafür musst Du prüfen, ob -n vorne steht, bevor Du die Ausgabe machst.
Das hört sich doch gleich ganz anders an ^^
Hat bei mir funktioniert:
Code: #include <stdio.h>
#include <string.h>
int main (int argc, char ** argv)
{
if (strcmp (argv [2], "-n")==0)
printf ("%s", argv [3]);
else
printf ("%s\n", argv [2]);
getchar ();
return 0;
}
Re: Mein erstes Programm
DrPhil_Guth - 29.06.2008, 22:05
Xin hat folgendes geschrieben: Ich "erwarte" gar nichts von Dir. Ich gebe allerdings auch ununwunden zu, dass ich mich schon mehrfach wunderte, warum ihr hier so viele so lange mit Programmen im Stil von scanf() - "Bitte wählen Sie aus..." - printf() - "Das Ergebnis ist %d" rumkrebsen.
Was mich auch noch wundert ist dass alle hier reines C programmieren.
Anscheinend ist die ansicht weit verbreitet dass C++ schwieriger zu lernen sei als C, und dass man C perfekt beherrschen muss, um sich an C++ heranzuwagen.
Das ist nicht so! C ist eine untermenge von C++ (fast, aber wer die unterschiede kennt verbringt eindeutig zuviel zeit mit programmieren (-; ).
Das bedeutet man kann in C++ alles machen was man in C machen kann. Nur noch viel mehr.
Das ist eines der wichtigsten features von C++. Da gibts was für Experten (Primzahlen zur kompilierzeit als warnungen ausgeben z.B.) aber eben auch was für Anfänger. Und es ist vieeel anfängerfreundlicher als C.
Re: Mein erstes Programm
Xin - 29.06.2008, 23:05
DrPhil_Guth hat folgendes geschrieben: Xin hat folgendes geschrieben: Ich "erwarte" gar nichts von Dir. Ich gebe allerdings auch ununwunden zu, dass ich mich schon mehrfach wunderte, warum ihr hier so viele so lange mit Programmen im Stil von scanf() - "Bitte wählen Sie aus..." - printf() - "Das Ergebnis ist %d" rumkrebsen.
Was mich auch noch wundert ist dass alle hier reines C programmieren.
Anscheinend ist die ansicht weit verbreitet dass C++ schwieriger zu lernen sei als C, und dass man C perfekt beherrschen muss, um sich an C++ heranzuwagen.
Ich habe etwas das Gefühl, dass die Leute hier nicht weiterkommen. Ob das daran liegt, dass die Informationen nicht passend vorliegen, oder die Leute keine Lust haben, sich die Mühe mal zu machen... keine Ahnung.
DrPhil_Guth hat folgendes geschrieben: Das ist nicht so! C ist eine untermenge von C++ (fast, aber wer die unterschiede kennt verbringt eindeutig zuviel zeit mit programmieren (-; ).
* Funktionen werden nicht automatisch als int xxx(void) definiert
* C erlaubte, glaube ich, keine struct xyz, sondern nur struct xyz * als Rückgabe.
* enum ist in C++ ein enum, kein int.
* 'x' ist in C ein char, in C++ ein int, was auch 'xyz' erlaubt - habe ich aber auch erst dieses Jahr rausgefunden ^^
Ich musste auch nachgucken, ich wußte die Punkte mal, aber hatte sie wieder vergessen.
DrPhil_Guth hat folgendes geschrieben: Das ist eines der wichtigsten features von C++. Da gibts was für Experten (Primzahlen zur kompilierzeit als warnungen ausgeben z.B.)
Metaprogrammierung ist eine Spielerei - sie ist möglich, aber nicht sinnvoll.
DrPhil_Guth hat folgendes geschrieben: aber eben auch was für Anfänger. Und es ist vieeel anfängerfreundlicher als C.
Ob es anfängerfreundlicher ist... ich fange immer mit C an, wechsle aber schnell auf C++. Ich denke, der Einstieg ist quasi der gleiche.
Re: Mein erstes Programm
dani93 - 29.06.2008, 23:55
Zwischenfrage: Ist mein Programm richtig?
Re: Mein erstes Programm
Xin - 30.06.2008, 00:21
dani93 hat folgendes geschrieben: Zwischenfrage: Ist mein Programm richtig?
Hatte gar nicht gesehen, dass Du Code gepostet hast. Und da beantwortest Du es schon selbst:
dani93 hat folgendes geschrieben: Hat bei mir funktioniert:
Code: #include <stdio.h>
#include <string.h>
int main (int argc, char ** argv)
{
if (strcmp (argv [2], "-n")==0)
printf ("%s", argv [3]);
else
printf ("%s\n", argv [2]);
getchar ();
return 0;
}
Grundsätzlich funktioniert es, das hast Du selbst ja schon gesagt.
echo Hallo Welt
würde nicht funktionieren.
Re: Mein erstes Programm
dani93 - 30.06.2008, 10:32
Zitat: echo Hallo Welt
würde nicht funktionieren.
Ja, deswegen habe ich auch echo "Hallo Welt" übergeben. so wie du hier gesagt hast:
Zitat: Mein Vorschlag ist, dass Du nun die Argumente durchgehst und sie vergleichst: Stell Dir vor, Du schreibst einen Echo-Befehl.
echo "Hallo Welt"
Meinst du, dass alle darauffolgenden Argumente ausgegeben werden sollen? Wenn ja, dann einfach noch ne Schleife rein.
Code: #include <stdio.h>
#include <string.h>
int main (int argc, char ** argv)
{
int i;
if (strcmp (argv [2], "-n")==0)
printf ("%s", argv [3]);
else
{
for (i=2; i<argc; i++)
printf ("%s\n", argv [i]);
}
getchar ();
return 0;
}
Re: Mein erstes Programm
Xin - 30.06.2008, 12:00
dani93 hat folgendes geschrieben: Zitat: echo Hallo Welt
würde nicht funktionieren.
Ja, deswegen habe ich auch echo "Hallo Welt" übergeben. so wie du hier gesagt hast:
Zitat: Mein Vorschlag ist, dass Du nun die Argumente durchgehst und sie vergleichst: Stell Dir vor, Du schreibst einen Echo-Befehl.
echo "Hallo Welt"
Meinst du, dass alle darauffolgenden Argumente ausgegeben werden sollen? Wenn ja, dann einfach noch ne Schleife rein.
Ich darf Dich kurz zitieren:
dani93 hat folgendes geschrieben: Meine Programmiererfahrung (wenn man das überhaupt so nennen kann) kommt aus erst 10 Monaten C. Es wäre sehr freundlich, wenn du deine Vorschläge etwas leichter formulieren könntest. Was ich damit sagen will: Erwarte dir nicht zu viel con mir.
Wie mir scheint, erwarte ich nicht zuviel von Dir, schließlich schreibst Du selbst, dass es einfach ist. Wäre natürlich nicht schlecht, wenn es dann richtig wäre.
Damit kommt man zum nächsten Punkt, den Programmieranfänger immer verkehrt machen. Sie lösen konkrete Probleme statt abstrakte.
Ich sage Dir, dass
Code: echo Hallo Welt
nicht geht, also löst Du das Problem und trotzdem würde ich Dir gerne das Programm um die Ohren hauen, es ist nämlich - in meinen Augen - jetzt noch falscher als vorher.
Ich mache hierzu gleich mal einen weiteren Thread auf, dort biete ich mal meine Standardaufgabe an, mit der ich meine Schüler zur Weißglut bringe, um ihnen genau den Fehler auszutreiben, den Du hier begehst.
Dein Fehler hat nichts mit C zu tun, aber zum Programmieren lernen gehört mehr als nur C zu lernen.
Die Aufgabe war einfach also darf ich wohl von Dir mehr erwarten, wenn es um C geht, oder?
Code: echo -n Hallo Welt
funktioniert nicht.
Dein Programm gibt jetzt mal alle Worte aus oder nur eins von beliebig vielen Worten, wenn es keine neue Zeile machen soll. -n verändert also mehrere Punkte in der Arbeitsweise, was das Programm für mich als Benutzer total unverständlich macht.
Re: Mein erstes Programm
dani93 - 30.06.2008, 12:26
Xin hat folgendes geschrieben:
Code: echo -n Hallo Welt
funktioniert nicht.
Dein Programm gibt jetzt mal alle Worte aus oder nur eins von beliebig vielen Worten, wenn es keine neue Zeile machen soll. -n verändert also mehrere Punkte in der Arbeitsweise, was das Programm für mich als Benutzer total unverständlich macht.
Sorry, natürlich muss dann oben auch die Schleife rein, damit alle anderen Elemente ausgegeben werden.
Code: #include <stdio.h>
#include <string.h>
int main (int argc, char ** argv)
{
int i;
if (strcmp (argv [2], "-n")==0)
{
for (i=3; i<argc; i++)
printf ("%s ", argv [i]);
}
else
{
for (i=2; i<argc; i++)
printf ("%s\n", argv [i]);
}
getchar ();
return 0;
}
Re: Mein erstes Programm
Xin - 30.06.2008, 12:46
dani93 hat folgendes geschrieben: Sorry, natürlich muss dann oben auch die Schleife rein, damit alle anderen Elemente ausgegeben werden.
<buzzer>
Soeben hast Du erkannt, was Redundanz ist.
Du änderst ein Programm und hast mehrere Stellen, um es wieder ans Laufen zu bekommen und weil Du eine vergessen hast (in ca. 15 Zeilen Code!), hast Du es kaputtrepariert.
Wie soll das funktionieren, wenn Du mal mit Megabytes von Code hantierst?
Also mach das ganze mal mit einer (1) Schleife. ^^
Edit: Und rück sauber ein... warum schiebst Du das else raus?
Re: Mein erstes Programm
dani93 - 30.06.2008, 13:27
Man kann Schleifen leicht mit einem Unterprogramm ausweichen^^
Code: #include <stdio.h>
#include <string.h>
int ausgabe (int nr, int art, int argc, char ** argv);
int main (int argc, char ** argv)
{
int i, nr, art;
if (strcmp (argv [2], "-n")==0)
{
nr=3;
art=0;
ausgabe (nr, art, argc, argv);
}
else
{
nr=2;
art=1;
ausgabe (nr, art, argc, argv);
}
getchar ();
return 0;
}
int ausgabe (int nr, int art, int argc, char ** argv)
{
int i;
for (i=nr; i<argc; i++)
{
printf ("%s", argv [i]);
if (art==0)
printf (" ");
else
printf ("\n");
}
return 0;
}
Re: Mein erstes Programm
Xin - 30.06.2008, 14:43
dani93 hat folgendes geschrieben: Man kann Schleifen leicht mit einem Unterprogramm ausweichen^^
Nicht Schleifen, aber Redundanz und das ist hier zufälligerweise eine Schleife.
Von der Idee schonmal ganz gut, von den vielen Variablen ist eigentlich nur "art" interessant. Warum setzt Du hinter jedes Wort ein Newline?
Kürzen wir mal was ^^
Code: #include <stdio.h>
#include <string.h>
int ausgabe (int nr, int art, int argc, char ** argv);
int main (int argc, char ** argv)
{
int noNewline = strcmp (argv [2], "-n") == 0; // [2] ???? Wieso 2?
nr = 2 + noNewLine;
// Alternativ: nr = ( noNewLine ) ? 3 : 2;
// Alternativ if( noNewLine ) nr = 3; else nr = 2, eben das, wie Du es zuvor gemacht hast, aber wozu fragen stellen, wenn es schon antworten gibt.
ausgabe (nr, noNewLine, argc, argv);
// getchar (); // echo hat kein getChar()
return 0;
}
int ausgabe (int nr, int art, int argc, char ** argv)
{
int i;
for (i=nr; i<argc; i++)
{
printf ("%s", argv [i]);
if (art==0) // <--- Iihh eine Frage innerhalb einer Schleife
printf (" ");
else
printf ("\n"); // <-- das ist sicher nicht richtig...
}
return 0;
}
Es gibt nur noch einen Aufruf für ausgabe(), also kann es kann man sich ihn genauso gut schenken.
(die Version habe ich dann auch mal kompiliert, was mir sagt, dass Du das scheinbar nicht tust, denn Dein Startindex war 2, ob wohl die Argumente bei 1 losgehen)
Code: #include <stdio.h>
int main (int argc, char ** argv)
{
int newLine = strcmp (argv [1], "-n") != 0;
int i = 1 + !newLine;
argc--; // Alle Argumente bis auf das letzte Ausgeben
for (; i < argc; i++)
printf ("%s ", argv [i]); // Leerzeichen eingefügt
printf( "%s", argv[ i ] ); // Letztes Argument ausgeben
if( newLine ) printf( "\n" ); // NewLine
return 0;
}
Re: Mein erstes Programm
dani93 - 30.06.2008, 18:01
Zuerst möchte ich dich nur mal darauf hinweisen, dass du string.h für strcmp vergessen hast.
Zitat: (die Version habe ich dann auch mal kompiliert, was mir sagt, dass Du das scheinbar nicht tust, denn Dein Startindex war 2, ob wohl die Argumente bei 1 losgehen)
Sollte das 1. Argument nicht "echo" sein? Und "echo" soll doch nicht ausgegeben werden oder doch?
Re: Mein erstes Programm
Xin - 30.06.2008, 18:30
dani93 hat folgendes geschrieben:
Sollte das 1. Argument nicht "echo" sein? Und "echo" soll doch nicht ausgegeben werden oder doch?
echo ist das 0. Argument.
Re: Mein erstes Programm
dani93 - 30.06.2008, 18:38
Xin hat folgendes geschrieben:
Argument 0 ist immer der Programmname.
Leichte Verwirrung macht sich bei mir breit...
Re: Mein erstes Programm
DrPhil_Guth - 30.06.2008, 18:50
dani93 hat folgendes geschrieben: Xin hat folgendes geschrieben:
Argument 0 ist immer der Programmname.
Leichte Verwirrung macht sich bei mir breit...
Menschen fangen bei 1 an zu zählen. Computer nicht. Sie sehen in einer Aufzählung (Array) nur einen zeiger, und den Offset des jeweiligen Elements.
Das bedeutet: Das erste element ist der zeiger und nix (also 0) dazu.
Re: Mein erstes Programm
dani93 - 30.06.2008, 18:58
Sollte jetzt etwa "echo" der Programmname sein?
Zitat: Stell Dir vor, Du schreibst einen Echo-Befehl.
echo "Hallo Welt"
:?
Re: Mein erstes Programm
Xin - 30.06.2008, 19:07
dani93 hat folgendes geschrieben: Sollte jetzt etwa "echo" der Programmname sein?
Zitat: Stell Dir vor, Du schreibst einen Echo-Befehl.
echo "Hallo Welt"
:?
Du bist Windows-User, richtig? ^^
*grübel*... obwohl da gibt's auch echo...
Du bist Windows-GUI-Only-User, richtig? ;-)
(Verstehe das als "Ja!")
Re: Mein erstes Programm
dani93 - 30.06.2008, 19:13
Zitat:
Du bist Windows-User, richtig? ^^
*grübel*... obwohl da gibt's auch echo...
Du bist Windows-GUI-Only-User, richtig? ;-)
(Verstehe das als "Ja!")
Ja alle drei Punkte stimmen, leider... :oops:
Eine Schnellerklärung wäre vielleicht ratsam.
Re: Mein erstes Programm
Xin - 30.06.2008, 19:37
dani93 hat folgendes geschrieben: Zitat:
Du bist Windows-User, richtig? ^^
*grübel*... obwohl da gibt's auch echo...
Du bist Windows-GUI-Only-User, richtig? ;-)
(Verstehe das als "Ja!")
Ja alle drei Punkte stimmen, leider... :oops:
Schonmal dran gedacht, das zu ändern. Es wird zwar sehr viel unter Windows entwickelt, aber grade als C/C++ Entwicklungsplattform ist Linux imho deutlich besser. Ich habe teils sogar Windows-Programme (inkl. GUI) unter Linux entwickelt und kompiliert.
Vielleicht schaust Du mal bei Ubuntu (Kubuntu) vorbei.
dani93 hat folgendes geschrieben: Eine Schnellerklärung wäre vielleicht ratsam.
Hast Du Dir schonmal die DOS-Console angesehen? Du hast immer das getchar() am Ende Deiner Programme, was für mich bedeutet, dass Du die Programme nur aus der Entwicklungsumgebung heraus startest.
Die Konsole kann Programme starten und es gibt eine Vielzahl von kleinen mitgelieferten Befehlen. Diese Befehle kann man in kleine Skripts packen und so Aufgaben formulieren (Batch-Skripte), in dem mehrere Befehle in entsprechender Reihenfolge ausgeführt werden: Wie Programmierung, nur dass nix kompiliert wird.
In diesen Batchskripten benutzt man das Programm "echo", wenn man etwas auf den Bildschirm ausgeben möchte.
Die Entwicklungsumgebung macht praktisch nichts anderes, als eine DOS-Box zu starten, Dein Programm darin ablaufen zu lassen und die DOS-Box danach zu schließen.
Von allen Betriebsystemen hat Windows die schwächste Konsole (und auch die von MS nachgelieferte PowerShell ist jetzt nicht so der Bringer).
Der extrem grafiklastige Macintosh, das GUI-Betriebsystem überhaupt, hat eine Konsole, die die Windows DOS-Box problemlos in die Tasche steckt, Linux läuft problemlos ohne GUI ausschließlich auf Konsole und sogar der Commodore Amiga brauchte Anfang der 90er Jahre mit AmigaOS 2.0 bereits eine komfortablere Konsole raus, als die poplige DOS-Box von Microsoft (die mit ARexx noch einige Features hatte, die ich bis heute nicht auf Windows, Mac oder Linux finde...)
Als Programmierer kannst Du aber kaum auf eine brauchbare Shell verzichten.
Re: Mein erstes Programm
Teron Gorefiend - 02.07.2008, 21:07
dani93 hat folgendes geschrieben: Metamorph hat folgendes geschrieben:
Was für ein Ergebnis hattest du denn vorhin?
Das ist zwar nicht, was Xin haben wollte, aber ich habe es an das Programm übergeben. Und das gleiche hab ich auch mit den zahlen gemacht.
Metamorph hat folgendes geschrieben: Besorg dir besser Code::Blocks. Deine IDE scheint gemeingefährlich zu sein.
Meine Borland Version stammt noch aus den Zeiten des Kalten Krieges :D
Zitat: gehts noch um mein programm/problem oder inzwischen um was ganz anderes?
ich kann mich übersehen haben aber bis jetzt habe ich noch keine passende Lösung für mein Problem gesehen
Du nimmst das:
Code: #include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
long proz;
proz=atol(argv[1]);
if (proz>100)
printf("Sie haben ueber 100 Prozent Sie sind ein Cheater.");
else if ((proz<=100) && (proz>=92))
printf("\nFuer %d Prozent gibt es eine 1 Gratuliere.", proz);
else if ((proz<=91) && (proz>=81))
printf("\nFuer %d Prozent gibt es eine 2 Super.", proz);
//...
getchar();
return (EXIT_SUCCESS);
}
und machst das:
Zitat: Das Programm wird kompiliert. Angenommen der Dateiname wäre example.exe und du hast das Programm auf dem Desktop gespeichert.
Du öffnest cmd und dort erscheint der Prompt.
C:\Dokumente und Einstellungen\Benutzer\
Dort gibst du folgendes ein:
cd Desktop
C:\Dokumente und Einstellungen\Benutzer\Desktop\
Jetzt gibst du das ein:
example.exe 80
Sry für die Späte Antwort hatte die letzten Tage keine Zeit:
Naja das klappt irgendwie nicht wirklich Fehlermeldung-
Bei Buchstaben kommt keine Fehlermeldung und wenn ich Zahlen von 1-100 erscheint immer: für 50-57 Punkte gibt es eine Sechs
(irgendwie habe ich mir das nen bisschen einfacher vorgestellt :( )
Re: Mein erstes Programm
dani93 - 02.07.2008, 21:35
Welchen Code hast du jetzt genommen? Mit '' oder ohne?
Re: Mein erstes Programm
Metamorph - 02.07.2008, 23:05
@Teron Gorefiend:
Sorry aber der Thread ist ein bischen chaotisch geworden. :D
Ich kann nicht mehr ganz nachvollziehen, wo dein Problem liegt.
Da dieses Forum am Freitag dichtgemacht wird, empfehle ich dir, dich im Alternativforum anzumelden und dort einen neuen Thread zu erstellen.
Das ist das Alternativforum:
http://tutorials.communityhost.de/
Re: Mein erstes Programm
Teron Gorefiend - 03.07.2008, 19:51
Forum wird am Freitag zugemacht? naja hoffe das ich bia dahin mein Problem lösen konnte
also ich habe den code so geändert wie du ihn gepostet hast (benutze codeblocks) mit F9 kann ich das Programm zwar starten aber egal was ich eintippe es kommt immer die Meldung für 50-57 Prozent gibt es eine 4
Bei Buchstaben kommt 90-100 Prozent nur bei Minuswerte kommt die Meldung ´´Sie haben Minuspunkte´´
Zitat: Welchen Code hast du jetzt genommen? Mit '' oder ohne?
ääääähhhhh was meinst du damit genau
@Metamorph:
Falls du meinen ´´Blauen Balken´´ meinst: naja wenn ich mein Programm speichere erhalte ich eine *.exe datei: wenn ich diese öffne kommt das Dosfenster wo ich meine Zahl eingeben muss.
Ich wollte nur wissen ob ich z.b. per Paint ein optisch schönere Umgebung bauen kann, z.b. baue ich ein Rechteckt wo eine kleine Spalte ist: dort kann ich meine Prozentzahl eingeben. Neben dem Balken kommt noch so ein kleines Fenster "Berechnen" wenn man dort mit der Maus drauf klickt und vorher eine Zahl eingegeben hat sollte das Programm dann auf meinen schön optisch aktiven Würfel oder was auch immer die passende Note ausdrucken
..aber das klappt ja nichtmal so mein Programm :cry
Re: Mein erstes Programm
dani93 - 03.07.2008, 20:19
Hast du auch das gemacht:
Das Programm wird kompiliert. Angenommen der Dateiname wäre example.exe und du hast das Programm auf dem Desktop gespeichert.
Du öffnest cmd und dort erscheint der Prompt.
C:\Dokumente und Einstellungen\Benutzer\
Dort gibst du folgendes ein:
cd Desktop
C:\Dokumente und Einstellungen\Benutzer\Desktop\
Jetzt gibst du das ein:
example.exe 80
?
Zuerst kompilieren, damit du die exe bekommst und dann so wie oben beschrieben vorgehen.
Re: Mein erstes Programm
Teron Gorefiend - 03.07.2008, 20:36
dani93 hat folgendes geschrieben: Hast du auch das gemacht:
Das Programm wird kompiliert. Angenommen der Dateiname wäre example.exe und du hast das Programm auf dem Desktop gespeichert.
Du öffnest cmd und dort erscheint der Prompt.
C:\Dokumente und Einstellungen\Benutzer\
Dort gibst du folgendes ein:
cd Desktop
C:\Dokumente und Einstellungen\Benutzer\Desktop\
Jetzt gibst du das ein:
example.exe 80
?
Zuerst kompilieren, damit du die exe bekommst und dann so wie oben beschrieben vorgehen.
genau das gleiche als würde ich das Programm von Codeblocks öffnen:
für 50-57 Prozent gibts ne 4
ich poste am besten nochmal meinen code: wahrscheinlich habe ich mich irgendwo vertippt:
Code: include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
long prozentzahl;
prozentzahl=atol(argv[1]);
printf("Geben sie Ihre erreichte prozentzahl an: ");
scanf("%c", &prozentzahl);
if (prozentzahl>100)
printf("\nSie haben ueber 100 Prozent Sie sind ein Cheater.", prozentzahl);
else if ((prozentzahl<=100) && (prozentzahl>=92))
printf("\nFuer %d Prozent gibt es eine 1 Gratuliere.", prozentzahl);
else if ((prozentzahl<=91) && (prozentzahl>=81))
printf("\nFuer %d Prozent gibt es eine 2 Super.", prozentzahl);
else if ((prozentzahl<=80) && (prozentzahl>=66))
printf("\nFuer %d Prozent gibt es eine 3 Naja.", prozentzahl);
else if ((prozentzahl<=65) && (prozentzahl>=50))
printf("\nFuer %d Prozent gibt es eine 4 Haette besser werden koennen.", prozentzahl);
else if ((prozentzahl<=49) && (prozentzahl>=20))
printf("\nFuer %d Prozent gibt es eine 5 Leider nicht bestanden.", prozentzahl);
else if ((prozentzahl<=19) && (prozentzahl>=0))
printf("\nFuer %d Prozent gibt es eine 6 Grottenschlecht.", prozentzahl);
else if (prozentzahl<0)
printf("\nSie haben Minuspunkte bekommen Kein Kommentar.", prozentzahl);
else
printf("\nBitte geben Sie ihre erreichte Prozentzahl vosn 0-100 ein.");
getchar();
return (EXIT_SUCCESS);
}
Re: Mein erstes Programm
Metamorph - 03.07.2008, 23:54
Code:
/*...*/
prozentzahl=atol(argv[1]);/*Die Zeile sieht unwichtig aus, da du die Eingabe über scanf() machst.*/
printf("Geben sie Ihre erreichte prozentzahl an: ");
scanf("%[b][color=red]c[/color][/b]", &prozentzahl);
%c bedeutet soviel wie "lese einen Characterwert". Du müsstest dann %i oder %d benutzen.
Code: if (prozentzahl>100)
printf("\nSie haben ueber 100 Prozent Sie sind ein Cheater.", prozentzahl);
/* Das ist falsch engerückt. Es sollte so aussehen: */
if (prozentzahl>100)
printf("\nSie haben ueber 100 Prozent Sie sind ein Cheater.", prozentzahl);
Die ganzen Wenn-dann-sonst-Anweisungen beziehen sich nur auf eine Variable. Deswegen könntest du anstatt den else if- Konstrukten eine switch-case-Anweisung nehmen.
Zu deiner Frage mit den blauen Balken:
Ja, die Sache ist Möglich. Allerdings ist es unnötig, selbst ein Bild zu zeichnen. Es gibt die sogenannte GUI-Programmierung. Diese ist auch unter C möglich. GUI-Bibliotheken sind schon fertig. Es macht also keinen allzugroßen Sinn, neue zu erstellen, es sei denn, du möchtest ein extravagantes Programm schreiben.
Allerdings empfehle ich dir, damit noch zu warten, bis du die Grundlagen drauf hast.
Re: Mein erstes Programm
dani93 - 04.07.2008, 09:51
Zitat: Die ganzen Wenn-dann-sonst-Anweisungen beziehen sich nur auf eine Variable. Deswegen könntest du anstatt den else if- Konstrukten eine switch-case-Anweisung nehmen.
Switch wird verwendet, wenn
immerer die gleiche Variable abgefragt wird --> trifft zu
eine konstante Ganzzahl abgefragt wird --> trifft zu
auf Gleichheit geprüft wird --> trifft nicht zu
OK du könntest 100 Case machen, dann würde es stimmen ^^
Dann: vielleicht wäre es besser atoi () zu verwenden, da du die Variablen später auch mit %d oder %i ausgibst.
Weiteres: Wenn schon copy and paste, dann richtig. du kopierst anscheinend noch immer deinen ersten Code. Hättest du meinen genommmen und um ein paar ifs erweitert, hättest du den Fehler mit scanf () nicht gehabt. Und außerdem wieder die falschen Argumente in den printfs.
Re: Mein erstes Programm
Xin - 04.07.2008, 11:46
Bitte hierauf nicht mehr antworten, bitte wechselt die laufende Diskussion nach www.tutorials.communityhost.de.
Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken
Weitere Beiträge aus dem Forum Tutorials.at
Veränderung der Variablenzuweisung - gepostet von Dragorad am Mittwoch 06.06.2007
Männlich- Weiblich zeichen - gepostet von DrPhil_Guth am Sonntag 23.04.2006
EXE-Dateien in Visual Pascal??? - gepostet von Robin21 am Sonntag 25.06.2006
Win API und C++ - gepostet von vpascal am Freitag 07.09.2007
Dev C++ - gepostet von F.U.C.K.U.P am Donnerstag 03.08.2006
Lieblings Tools ? - gepostet von exbs am Dienstag 27.02.2007
Programmierung einer Schliessung - gepostet von ChillerT am Dienstag 06.02.2007
noob hat ne Frage - gepostet von das_Sandkorn am Mittwoch 21.02.2007
Hilfe!!! - gepostet von Schubl am Samstag 29.04.2006
Ähnliche Beiträge wie "Mein erstes Programm"
TEAM BILDUNG - [M-T-C] Bl4ck-Shadow (Freitag 16.12.2005)
12.04 vs. Team Pentagram - RuE (Mittwoch 12.04.2006)
Neubeginn von ÖSV Team - gü (Dienstag 28.11.2006)
Ein Team ? - Ein Witz ! - bennyme (Montag 30.04.2007)
Team Saison I - iangordon34 (Dienstag 25.04.2006)
Senator74 ist hier gelandet - Burgunder (Mittwoch 03.11.2010)
G-Hot Fans und Forum Team - Milo (Samstag 17.02.2007)
BND mit Winning Team - Ceasar 99 (Freitag 26.01.2007)
Heilbronn: Das Falken-Team stellt sich vor - Steve3 (Montag 14.08.2006)
Das Team - Ocrana (Freitag 19.01.2007)
