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, 13:23   #1
Woolf123
Anfänger
 
Registriert seit: Apr 2011
Beiträge: 4
Bedankt: 0
Woolf123 ist noch neu hier! | 0 Respekt Punkte
Standard versteh grad mein C-Programm nicht...

Hi Leute, hab ein klitze kleines Problem...
(siehe oben)

ich lerne grad die Programmiersprache C kennen.
Meine Programmier umgeben ist noch zurzeit "DEV C++"

PHP-Code:
#include<stdlib.h>
#include<stdio.h>
main() {{
         
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)? x) : ((z>y)? y) );
}
system("pause");

zum Problem:
wenn ich das Programm starte kann ich nur x und y eingeben.
was ja erstmal gut ist, nur will ich ja auch z eingeben...

was mir aufgefallen ist ich benutze ja als Variablentyp int
wenn ich nur mit der maus auf x oder y gehe ohne zu klicken kommt "int x, int y"
aber wenn ich das mit z mache kommt "float z".

mag vllt auch der grund sein warum ich es nicht eintippen kann,was ich aber nicht denke.


habt ihr ein Plan woran es liegen könnte?
wohl gemerkt ich fang erst an mit der Sprache...
Woolf123 ist offline   Mit Zitat antworten
Ungelesen 31.10.14, 13:55   #2
Odatas
Erfahrenes Mitglied
 
Registriert seit: Nov 2011
Beiträge: 651
Bedankt: 326
Odatas ist unten durch! | -158 Respekt PunkteOdatas ist unten durch! | -158 Respekt Punkte
Standard

scanf ist programmiertechnisch nicht sehr gut. Da scanf erstmal aus dem Buffer rausliest. Und in dem steht noch das Enter von der vorherigen eingabe drin. Schau dir mal getchar an. Um normal weiterzuarbeiten solltest du nach jedem scanf ein" getchar();" machen.
Odatas ist offline   Mit Zitat antworten
Ungelesen 31.10.14, 14:26   #3
Woolf123
Anfänger
 
Registriert seit: Apr 2011
Beiträge: 4
Bedankt: 0
Woolf123 ist noch neu hier! | 0 Respekt Punkte
Standard

cool danke für die Antwort.
ich sags mal so... dieses " getchar();" kenn ich noch nicht.
diese jetztige Funktion hab ich verstanden, ich mach einfach mal weiter und ich denke mal das diese Funktion auch noch erklärt wird.

wie gesagt bin noch anfänger...
aber die frage ist ja liegt es nur daran das ich es nicht eintippen kann oder woran sonst?
Woolf123 ist offline   Mit Zitat antworten
Ungelesen 31.10.14, 15:23   #4
PropheT456
Stammi
 
Registriert seit: Sep 2009
Beiträge: 1.278
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, 16:02   #5
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
PHP-Code:
#include<stdlib.h>
#include<stdio.h>
main() {{
         
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)? x) : ((z>y)? y) );
}
system("pause");

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.
mrburns ist offline   Mit Zitat antworten
Ungelesen 31.10.14, 22:06   #6
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   #7
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   #8
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
Ungelesen 25.11.14, 13:15   #9
Odatas
Erfahrenes Mitglied
 
Registriert seit: Nov 2011
Beiträge: 651
Bedankt: 326
Odatas ist unten durch! | -158 Respekt PunkteOdatas ist unten durch! | -158 Respekt Punkte
Standard

Zitat:
Zitat von mrburns Beitrag anzeigen
main ist eine Funktion und brauch einen Rückgabetyp,
Zitat:
Ein Programm beginnt mit void main(void) , main() usw. – Dies entspricht nicht dem (C99)-Standard. Dort ist festgelegt, dass jedes Programm (sofern ihm keine Parameter übergeben werde) mit int main() oder int main(void) beginnen muss. Die Definition mit void main() bzw. void main(void) ist kein gültiges C, da der Standard vorschreibt, dass main einen Rückgabewert vom Typ int besitzen muss (auch wenn viele Compiler void dennoch akzeptieren). Die Definition mit main() war früher gültig, da beim Fehlen eines Rückgabetyps angenommen wurde, dass die Funktion int zurückliefert.
Du hast recht und man sollte sich auch immer das gültige C angewöhnen. Jedoch um verwirrungen bei Neuligen zu vermeiden muss man dazu sagen das eigentlich jeder Compiler auch void main() akzeptiert.

Also es geht auch, ist aber schlechter Programmierstyle deshalb gleich wieder vergessen und mit int main arbeiten.
Odatas 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 16:47 Uhr.


Sitemap

().