Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
22.10.2003, 18:34
HummerSepp



Servus,

auf der Uni haben wir in Informatik(Erste richtige Stunde=>Erstsemester)
ein kleines Programm geschrieben, welches nur zwei Zahlen miteinander addieren soll. In der Uni hat noch alles wunderbar geklappt, aber daheim bekomme ich jedesmal wenn ich in der erstellten Anwendung "ENTER" drüche eine Fehlermelgung von Windows:"Dieser Vorgang wird aufgrund eines ungültigen Vorgangs geschlossen"
Der Code ist folgender, eigentlich ganz einfach...Dachte ich.

#include<stdio.h>

int main()

{
int x , y , z;

scanf(" %d %d", & x & y);

z = x + y;

printf("\n\n Summe: %d",z);

}

Ich hoffe ihr könnt mir weiterhelfen

HummerSepp

--

Trust no One!!!

zum Seitenanfang zum Seitenende Profil || Suche
001
22.10.2003, 18:53
Hellfire



Nun, der Code, so wie er oben steht kann nicht richtig funktionieren, du hast ein Komma zwischen den letzten beiden Argumenten von scanf vergessen, setz das da mal hin.
Außerdem sollte main() irgend einen Wert vom Typ integer zurückgeben (return 0; oder so).

--

zum Seitenanfang zum Seitenende Profil || Suche
002
22.10.2003, 19:02
HummerSepp



Nun das habe ich gemacht.
Aber statt der Fehlermeldung schließt sich die Console sofort( nach "ENTER"), ohne eine Rechnung zu machen..

--

Trust no One!!!


Dieser Beitrag wurde am 22.10.2003 um 19:04 von HummerSepp bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
22.10.2003, 19:05
shoo.



#include <conio.h>

und am ende des programms (in der main funktion) getche();

--

zum Seitenanfang zum Seitenende Profil || Suche
004
22.10.2003, 19:10
HummerSepp



Wow jeah. Endlich.

Danke!?!!!

--

Trust no One!!!

zum Seitenanfang zum Seitenende Profil || Suche
005
22.10.2003, 20:22
Hellfire



Oder direkt in der Eingabeaufforderung die *.exe ausführen. Deine Rechnung hat er schon durchgeführt, nur sieht Windows dein Programm mit dem fertigen Durcharbeiten der main() als beendet an und schließt eben auch die Console, die als Ausgabe diente. Entweder die Methode, die Shoo vorschlägt, anwenden oder halt in der Eingabeaufforderung ausführen.
Falls du MSVC++ verwendest: Mit STRG+F5 compilen, danach (bei erfolgreichem Compilen) führt er die *.exe aus und wartet am Ende auf Keyboardinput.

--

zum Seitenanfang zum Seitenende Profil || Suche
006
23.10.2003, 00:56
Kriz



Und verprügelt bitte kollektiv deinen Professor für Programmierung! Wer einen solchen Programmierstil lehrt, gehört 24/7 geohrfeigt! Ich weiß ja, daß die meisten Profs nur verkappte 60er Jahre Volksterroristen waren, aber sowas läßt jeden Projektmanager in der Industrie die Kacke im Arsch verdampfen!

Und daß er zudem noch wider der C-Syntax lehrt (fehlendes return 0; bei int als Programmrückgabetyp an den Aufrufer), läßt mich nur wieder erneut traurig mit dem Kopf schütteln...

Stil ist Geschmackssache, aber Geschmackssache ist kein Stil! In der Industrie muß man eben mehr können als das formatfreie (Stil-)Angebot von C schamlos auszunutzen! Ich habe es beispielsweise so gelehrt bekommen:

Quellcode:#include <stdio.h>

int main()
{
    int x,  // Watt macht datt?
        y,  // Und watt macht datt?
        z;  // Und watt ist hier los?

    // Watt passiert hier nu?
    scanf("%d %d", &x &y);

    // Was bewirkt dieses nun?
    z = x+y;

    // Was wird hier wieso ausgeben?
    printf("\n\nSumme: %d", z);

    return 0;
}
Es gibt Firmen (besonders große Firmen), die lassen vor jedem Coderelease Kommetaranalysierer über Quellcodes rasseln und DANACH wird man bewertet, nicht unbedingt nach dem eigentlich Code! Klingt zwar pervers, der Sinn ist aber tiefgründiger: Nur ausdokumentierter Quellcode kann später besser rekonstruiert und nachverfolgt werden. Das soll jetzt nicht heißen, daß man wie wild Kommentare im Quellcode pflanzt und den Code selber vernachlässigt, sondern daß Dritte und Vierte oftmals Jahre später sich noch den Codedschungel durchwühlen müssen, den du fabriziert hast.

Falls du aber nicht vorhast, später als Informatiker in der Industrie zu arbeiten, betrachte meine Anmerkungen als hinfällig ;)

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
007
23.10.2003, 01:42
CN



ich wär mir da nicht so sicher ob dieser stil von dem prof so gelehrt worden ist *hint*

vom return 0 ganz zu schweigen

--

zum Seitenanfang zum Seitenende Profil || Suche
008
23.10.2003, 14:50
HummerSepp



Nun unser Prof hat den Code tatsächlich so geschrieben- kann leider auch nix dafür.
Ich selbst versuche auch einen übersichtlicheren Stil anzunehmen.

@Kriz: Ich studier ja gar nicht Informatik... sondern Ingenieur für Mechatronik-sprich ich glaub nicht, (naja sag niemals nie) dass ich später mal Programmierer werde... Aber ich bin für jeden Ratschlag dankbar!

--

Trust no One!!!

zum Seitenanfang zum Seitenende Profil || Suche
009
23.10.2003, 22:59
Leviathan



Eine wichtige Sache, die man sich angewöhnen sollte ist hinter jede Variablendeklaration den Sinn der Variablen zu schreiben. Außerdem würde ich für jede Variable den Typ neu angeben statt die Abkürzung mit , zu verwenden.

An Kontrollstrukturen (if, for, switch / case) sollte man auch immer einen Kommentar setzen, es sein denn, es ist sehr offensichtlich, was sie bewirken. Beispiel:Quellcode:if(x!=0)
{
    printf("%lf",7.0f/x);
}
Mehr sage ich hier nicht zum Stil (besonders nicht zum Stil von Schleifenkonstruktionen), nachher heißt es noch, ich würde die Anfänger stilmäßig verderben...

Zusätzlich gilt das, was Kriz angemerkt hat: Nach dem C-Standart muss die Menge der Funktionen im Programm, die nicht void als Rückgabetyp haben eine Teilmenge der Funktionen im Programm sein, die ein return enthalten. Konkret: Wenn eine Funktion nicht void als Rückgabetyp hat, muss sie auch ein return enthalten (Anm.: Ich schreibe "wenn", nicht "genau wenn"). Der Compiler solle das zumindest mit einer Warnung Quittieren, vielleicht auch mit einem Fehler.

@Kriz: Kommentare sollten entweder auf Hochdeutsch oder auf Englisch verfasst werden.
Das Stilangebot von C ist übrigends nicht komplett formatfrei, der Präprozessor interessiert sich nämlich druchaus für Zeilenumbrüche.

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds


Dieser Beitrag wurde am 23.10.2003 um 22:59 von Leviathan bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
010
24.10.2003, 11:45
the_viking



@Leviathan:
Vielleicht solltest du in deinem Beispiel doch nen Comment setzen, nämlich was das "printf" da soll... auf das 7.0f/x könnte sich sicher keiner nen Reim machen

// And english comments are alway better in the case you wanne give your code
// to an english Software Company ;)

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche
011
24.10.2003, 12:58
K-Putt



Warum kann sich keiner auf das nen Reim machen?
7.0f is n float, x die variable, was is so schwer zu verstehn dabei?

--

Rambo Engineer @ Drippy's 2fort - finest TFC 1.5 || Bild Upload || The world's most advanced open source database

zum Seitenanfang zum Seitenende Profil || Suche
012
24.10.2003, 14:07
theDon



levi tut mal wieder scheinheilig ;)

Quellcode:signed char strcpy(char*d;char*s)
{
    while((*d++ == *s++)&&*d&&*s);
    return *d?(*d<<*s?-1:1):0;
}
100% levi: http://www.resourcecode.de/showtopic.php?threadid=1357&highlight=#11219

--

\o tanz den naziprau! o/

And more than ever, I hope to never fall,
Where enough is not the same it was before

zum Seitenanfang zum Seitenende Profil || Suche
013
24.10.2003, 18:53
K-Putt



Zitat:
theDon postete
levi tut mal wieder scheinheilig ;)

Quellcode:signed char strcpy(char*d;char*s)
{
    while((*d++ == *s++)&&*d&&*s);
    return *d?(*d<<*s?-1:1):0;
}
100% levi: http://www.resourcecode.de/showtopic.php?threadid=1357&highlight=#11219

Dafür is er ja bekannt - hochoptimierter aber absolut unleserlicher Code :P

--

Rambo Engineer @ Drippy's 2fort - finest TFC 1.5 || Bild Upload || The world's most advanced open source database

zum Seitenanfang zum Seitenende Profil || Suche
014
24.10.2003, 20:57
McMapper



Hm ihr habt wenigstens schon _irgendwas_ in Info gemacht, die ersten paar Vorlesungen waren Computergrundlagen etc (Was ist ein Prozessor) ... gähn!

--

zum Seitenanfang zum Seitenende Profil || Suche
015
24.10.2003, 23:31
the_viking



Zitat:
K-Putt postete
Zitat:
theDon postete
levi tut mal wieder scheinheilig ;)

Quellcode:signed char strcpy(char*d;char*s)
{
    while((*d++ == *s++)&&*d&&*s);
    return *d?(*d<<*s?-1:1):0;
}
100% levi: http://www.resourcecode.de/showtopic.php?threadid=1357&highlight=#11219

Dafür is er ja bekannt - hochoptimierter aber absolut unleserlicher Code :P
Wer sagt das der Code hochoptimiert ist?

\E: Meiner meinung nach ist der sogar extrem langsam... Ausser man hat nen guten Compiler der das wieder ausbügelt... tss

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446


Dieser Beitrag wurde am 24.10.2003 um 23:32 von the_viking bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
016
25.10.2003, 02:42
Leviathan



Der Quellcode war sogar noch relativ harmlos. Richtig gefährlich wird es erst, wenn man die Kurzschlussauswertung bis auf das Letzte ausnutzt oder bedingte Abbruchbedingungen einer Schleife hat oder nur mit dem Präprozessor Templates schreibt.
Mein hier zitierter Code war enthielt übrigends eine der ganz wenigen while-Schleifen, die ich in letzter Zeit programmiert habe. Schleife ist in C++ für mich schon fast äquivalent mit for(;;), da for(;;) allgemeiener ist als while() und postchecked loops (do while()) selten gebraucht werden.

@the_viking: Es kommt drauf an, worauf sich die Optimierung bezieht: Optimiert für schnelle Ausführung ist der Code nicht, wohl aber für etwas anderes:
Programme wurden in unserem Informatikunterricht gerne über Netzwerk kopiert. Solche Codes wie meiner oben konnte allerdings noch von keinem erfolgreich erklärt werden, und selbst unser Lehrer hat das nicht auf den ersten Blick verstanden. Somit bietet solcher Code eine gewisse Sicherheit gegen Codeklau.
Wenn man Software für ein Unternehmen entwickelt ist das Ziel aber genau das Gegenteil: Der Code soll möglichst einfach verständlich sein.

Was meinen letzten Beispielcode angeht: Ich wollte zeigen, dass das if unkommentiert bleiben kann, denn es ist ziemlich offensichtlich, das auf Gleichheit mit 0 geprüft wird, um eine Division durch 0 zu verhindern.
Außerdem würde ich bei Ausgaben sowieso den konditionalen Dreifachoperator bevorzugen, denn if's lassen den Code immer ziemlich aufgedunsen aussehen und werden von ihrem Aussehen der sehr geringen Wichtigkeit der Ausgabe nicht gerecht.

Was Kommentare auf Englisch angeht: Man sollte nur auf Englisch kommentieren, wenn das Englisch danach auch noch von einem Durchschnittsengländer / -amerikaner verstanden werden kann.

Anmerkung zu meinem Code: Die Funktion sollte strcmp heißen, nicht strcpy.

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds


Dieser Beitrag wurde am 25.10.2003 um 02:42 von Leviathan bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche