myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

versteh grad mein C-Programm nicht...

Willkommen

myGully

Links

Forum

 
Antwort
 
Themen-Optionen Ansicht
Ungelesen 31.10.14, 15:23   #1
PropheT456
Stammi
 
Registriert seit: Sep 2009
Beiträge: 1.273
Bedankt: 694
PropheT456 leckt gerne myGully Deckel in der Kanalisation! | 127211 Respekt PunktePropheT456 leckt gerne myGully Deckel in der Kanalisation! | 127211 Respekt PunktePropheT456 leckt gerne myGully Deckel in der Kanalisation! | 127211 Respekt PunktePropheT456 leckt gerne myGully Deckel in der Kanalisation! | 127211 Respekt PunktePropheT456 leckt gerne myGully Deckel in der Kanalisation! | 127211 Respekt PunktePropheT456 leckt gerne myGully Deckel in der Kanalisation! | 127211 Respekt PunktePropheT456 leckt gerne myGully Deckel in der Kanalisation! | 127211 Respekt PunktePropheT456 leckt gerne myGully Deckel in der Kanalisation! | 127211 Respekt PunktePropheT456 leckt gerne myGully Deckel in der Kanalisation! | 127211 Respekt PunktePropheT456 leckt gerne myGully Deckel in der Kanalisation! | 127211 Respekt PunktePropheT456 leckt gerne myGully Deckel in der Kanalisation! | 127211 Respekt Punkte
Standard

Bei mir funktioniert dein S*****, wie es soll...
Wie führst du es denn aus, oder womit?
PropheT456 ist offline   Mit Zitat antworten
Ungelesen 31.10.14, 22:06   #2
Woolf123
Anfänger
 
Registriert seit: Apr 2011
Beiträge: 4
Bedankt: 0
Woolf123 ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von PropheT456 Beitrag anzeigen
Bei mir funktioniert dein S*****, wie es soll...
Wie führst du es denn aus, oder womit?
die programmierumgebung ist DEV C++
wie schon oben geschrieben

und wie für ich es aus? ganz klar. in diesem Programm auf Kimpilieren klicken und danach ausführen.


Zitat:
Zitat von mrburns
main ist eine Funktion und brauch einen Rückgabetyp, im Normalfall sollte 'int' verwendet werden. Im gleichem Zuge muss natürlich noch eine Rückgabe erfolgen, also am Ende der Funktion noch 'return 0;' einfügen, Fehlerfälle brauchst du für das Programm wohl nicht. Außerdem (keine Ahnung, ob es sein muss, aber bis jetzt nicht anders gesehen) sollte zwischen '#include' und dem Dateibezeichner ein Leerzeichen sein.
Versuch mal beim Compiler den Modus für ausführliche Fehlermeldungen zu aktivieren, z.B. bei gcc -Wall.
den ersten Teil check ich noch ne...
und wegen der Fehlermeldung:
es kommt in dem Sinne keine Fehlermeldung
wenn ich es kompiliert habe und danach ausführe, öffnet sich ein DOS-Programm.
da kann ich x und y eingeben und danach kommt sofort die zahl die größer ist, ohne das ich z eingegeben habe
Woolf123 ist offline   Mit Zitat antworten
Ungelesen 01.11.14, 10:42   #3
pfefferschnitzel
Anfänger
 
Registriert seit: Jul 2014
Beiträge: 3
Bedankt: 0
pfefferschnitzel ist noch neu hier! | 3 Respekt Punkte
Standard

Das Grundgerüst lautet immer wie folgt:
Code:
int main()
{
    return 0;
}
Dein Programm liefert beim Kompilieren folgendes:
Code:
$ gcc -Wall test.c
test.c:3:1: warning: return type defaults to ‘int’ [-Wreturn-type]
test.c: In function ‘main’:
test.c:16:1: warning: control reaches end of non-void function [-Wreturn-type]
Also schon einmal zwei Tipps:
  1. Benutze etwas Ordentliches zum Lernen. Für den Anfang ist [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] imho ausreichend. Zumindest sind dort die main-Funktionen korrekt beschrieben.
  2. Lass die Finger von Dev-C++. Alt, verbuggt und schon seit Ewigkeiten nicht mehr weiterentwickelt (außer natürlich, ich habe da was nicht mitbekommen). Zumindest habe ich schon gruseligen Code gesehen, der dort ohne Fehler kompilieren konnte - damit wirst Du langfristig nicht glücklich. Dann lieber gcc auf cygwin, Code::Blocks oder auch Visual Studio. Letzteres ist zwar Kanone auf Spatze, aber selbst in der Express-Version mächtig genug.

Zu Deinem Programm:

Code:
scanf("%i",&x);
"scanf" liefert einen Wert zurück. Nutze ihn! Ansonsten kannst Du Dir nicht sicher sein, ob überhaupt ein Wert eingelesen wurde und Deine Variable befindet sich vielleicht in einem undefinierten Zustand.

Desweiteren liest "scanf" nur den Format-String ein - nicht mehr, vielleicht weniger (siehe Rückgabewert). D.h., dass der Zeilenumbruch, welcher zum Abschluss der Eingabe eingegeben werden muss, nicht eingelesen wird und noch immer im Eingabepuffer steckt. Dass überhaupt "y" noch eingelesen werden kann, ist schon Glückssache. Im schlimmsten Fall schließt Du die Eingabe für "x" mit Enter ab - das erste "scanf" liest lediglich die eingebene Zahl. Die nachfolgenden "scanf" lesen direkt das Enter aus dem Eingabepuffer, aber keine Zahl ein.

Du musst also den Eingabepuffer leeren, bevor Du wieder etwas einlesen kannst. Solltest Du jemals zu diesem Zweck "fflush()" empfohlen bekommen: niemals nutzen - das Verhalten von "fflush()" ist auf Eingabeströmen undefiniert. Besser wäre es bspw. den Puffer nach jedem "scanf" folgendermaßen zu leeren:
Code:
while((c = getchar()) != '\n' && c != EOF)
{
	/* discard */ ;
}
Am besten verzichtest Du aber bei größeren Experimenten ganz auf "scanf" und nutzt lieber "fgets" oder auch "getchar".
pfefferschnitzel ist offline   Mit Zitat antworten
Ungelesen 01.11.14, 10:47   #4
mrburns
Newbie
 
Registriert seit: Dec 2009
Beiträge: 50
Bedankt: 28
mrburns putzt sich die Zähne mit Knoblauch. | 2787 Respekt Punktemrburns putzt sich die Zähne mit Knoblauch. | 2787 Respekt Punktemrburns putzt sich die Zähne mit Knoblauch. | 2787 Respekt Punktemrburns putzt sich die Zähne mit Knoblauch. | 2787 Respekt Punktemrburns putzt sich die Zähne mit Knoblauch. | 2787 Respekt Punktemrburns putzt sich die Zähne mit Knoblauch. | 2787 Respekt Punktemrburns putzt sich die Zähne mit Knoblauch. | 2787 Respekt Punktemrburns putzt sich die Zähne mit Knoblauch. | 2787 Respekt Punktemrburns putzt sich die Zähne mit Knoblauch. | 2787 Respekt Punktemrburns putzt sich die Zähne mit Knoblauch. | 2787 Respekt Punktemrburns putzt sich die Zähne mit Knoblauch. | 2787 Respekt Punkte
Standard

Zitat:
Zitat von Woolf123 Beitrag anzeigen
den ersten Teil check ich noch ne...
Das ist schlecht
Zitat:
Zitat von Woolf123 Beitrag anzeigen
und wegen der Fehlermeldung:
es kommt in dem Sinne keine Fehlermeldung
wenn ich es kompiliert habe und danach ausführe, öffnet sich ein DOS-Programm.
da kann ich x und y eingeben und danach kommt sofort die zahl die größer ist, ohne das ich z eingegeben habe
Beim kompilieren kommt grade deswegen keine Fehlermeldung/Warnung. Ohne diese Option wird dann nur in schwerwiegenden Fällen was ausgegeben.
Probier es einfach mal mit
Code:
#include <stdlib.h> 
#include <stdio.h> 
int main(int argc, char** args) {
         int x,y,z; 
         printf("\nZ a h l e n v e r g l e i c h e n\n"); 
         printf("\nBitte x eingeben: "); 
         scanf("%i",&x); 
         printf("Bitte y eingeben: "); 
         scanf("%i",&y); 
         printf("Bitte z eingeben: "); 
         scanf("%i",&z); 
         printf("\nDie groessere Zahl lautet %i", (x>y) ? ((z>x)? z : x) : ((z>y)? z : y) ); 
         system("pause"); 
         return 0;
}
mrburns ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:04 Uhr.


Sitemap

().