jimk
Goto Top

C Programm bleibt beim Starten stehen

Hallo,

versuche C/C++ zu lernen und gehen grad ein Buch durch.
Arbeite mit dem Programm Visual C++ 2008 Express.

Nun zu meinem Problem über das ihr sicherlich schmunzeln werdet.
Habe ein kleines Beispielprogramm geschrieben doch irgendwas haut nicht hin, obwohl es genau dem Buch entspricht.
Hier ist der Quellcode:

#include <stdio.h>
#include <stdlib.h>

void main()
{
	int jahr;
	

	printf("Bitte geben sie das Jahr ein: ");  
	scanf("%d \n", &jahr);  

	if (jahr % 4 != 0)
	{
		printf("%d ist kein Schaltjahr! \n");  
		
	}

	else
	{
		if (jahr % 100 != 0)
	{
		printf("%d ist ein Schaltjahr! \n");  
		}

		else
		{
			if(jahr % 400 == 0)
			{
				printf("%d ist ein Schaltjahr!", jahr);  
			}
			else
			{
				printf("%d ist kein Schaltjahr!", jahr);  
			}
		}
	}
}

Der kompiliert das alles ohne Fehler anzuzeigen, aber wenn ich das Programm starte kommt es über das „Bitte geben sie das Jahr ein:“ nicht hinaus. Es bleibt einfach stehen.
Ich hoffe, dass ihr mir helfen könnt es zu verstehen.

Mit freundlichen Grüßen
JimK

Quelle: C/C++ Das umfassende Lehrbuch

Content-ID: 99601

Url: https://administrator.de/contentid/99601

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

Arano
Arano 17.10.2008 um 21:51:51 Uhr
Goto Top
Zu erst bitte einmal deinen Beitrag bearbeiten und deinen Quelltext in Code-Tags setzen, Danke !

Vielleicht liegt es an diesem Teil:
if (jahr % 4 != 0)
{
printf("%d ist kein Schaltjahr! \n");  
}
...genauer gesagt an an der "printf()"-Funktion, da fehlt die Übergabe des Jahres als Parameter.

~Arano

__Edit:__
Diesen Fehler hast noch ein zweites mal gemacht ;)
JimK
JimK 17.10.2008 um 22:08:55 Uhr
Goto Top
Danke für deinen Rat Arano!
Hab die kleine Unaufmerksamkeit gleichmal abgeändert. Leider hat es nicht geholfen.
Es passiert einfach nichts nach der Jahreseingabe in der cmd und der Compiler findet auch keine Fehler.

PS:
Wenn dieser Fehler behoben ist, dann kommen gleich noch ein paar Fragen auf euch zu. ;)
Arano
Arano 18.10.2008 um 01:28:40 Uhr
Goto Top
Sodale, habe es nun einfach selber mal probiert/Compiliert. Allerdings mit dem BCC32.
Das selbe Problem wie du es beschriebst kam zum Vorscheinen.
Als ich das dann allerdings im Notepad++ betrachtet habe (wegen dem Syntaxhighlight) und dabei war alles einzurücken, viel mir folgendes auf:

"int jahr;" <-- type = integer/ganzzahlen
"scanf("%d \n",&jahr);" <!-- type = character/zeichenkette

Und das ist auch der Fehler, hiermit funktionierte es dann
"scanf("%d",&jahr);"

Verstehe sowieso nicht warum du der eingegebenen Zahl noch eine Leerzeichen und einen Zeilenumbruch angefügt hast/wolltest !?

Und wegen den anderen Fragen, mal sehen... bin auch nicht besonders bewandert in dieser Sprache, eher weniger ;)

Gruß Arano
JimK
JimK 18.10.2008 um 11:06:35 Uhr
Goto Top
Danke Arano!!!!
Jetzt funktionier es.

ok, jetzt zu meinem anderen Problem.
Quellcode:

# include <stdio.h>
# include <stdlib.h>

void main()
{
int weiche1, weiche2, weiche3, weiche4;
int position;
int kugel;

printf("Bitte geben sie die Weichenstellung ein: ");  
scanf("%d %d %d %d", &weiche1, &weiche2, &weiche3, &weiche4);  
fflush(stdin);
printf("Bitte geben sie die Anzahl der Kugel ein: ");  
scanf("%d", &kugel);  

for (;kugel > 0; kugel = kugel - 1)
{

if(weiche1 == 1)
position =1;

else
position = 2;

weiche1 = 1 - weiche1;

if(position == 1)
{
if(weiche2 == 1)
position = 4;

else
position = 3;
weiche2 = 1 - weiche2;
}

else
{
if(weiche3 == 1)
position =3;

else
position =5;
weiche3 = 1 - weiche3;
}

if(position == 3)
{
if(weiche4 == 1)
position = 4;

else

position = 5;
weiche4 = 1 - weiche4;
}

printf("Auslauf: %d ,", position);  
printf("neue Weichenstellung %d %d %d %d\n",   
	   &weiche1, &weiche2, &weiche3, &weiche4);
}
}

Hier geht es darum, dass eine Kugel 3 Weichen passieren muss. Sobalt eine Kugel durchläuft verstellt sie die weichen auf 0 oder 1 und fällt bei 4 oder 5 wieder heraus.

Alles schön und gut. Mein Programm errechnet richtig die Ausgänge, aber bei den weichen Stellung macht es immer Fehler.
Statt 0 oder 1 zu schreiben entstehen so wirre Zahlen wie 1245024 und ich weiß einfach nicht, wie das Programm auf diese Zahl kommt oder wo es sich diese Faktoren herholt. Alles total verrückt!!! ;)
Arano
Arano 18.10.2008 um 14:27:44 Uhr
Goto Top
SO, also ich habe die Lösung !
Aber bitte, setze deinen Quelltext in Code-Tags.
JimK
JimK 18.10.2008 um 16:05:54 Uhr
Goto Top
Einen wunderschönen!!!

Danke erstmal für deine Hilfe Arano. Ich weiß jetzt was die ganzen kleinen Probleme verursacht. Das Buch beinhalte C und C++ und ich Compiliere es mit Visual C++ 2008. Hab das ganze dann mal in C++ umgewandelt und man siehe da, es funktioniert.

Danke nochmal.

mfg
JimK
Arano
Arano 18.10.2008 um 16:15:17 Uhr
Goto Top
Ja klar, kein Problem !
Aber du hättest deine Beiträge trotzdem noch mal bearbeiten könne, dann ist das einfach lesbarer und vor allem kann man es dann einfacher kopieren !

Hm... hätte nicht gedacht, dass das auch so lösbar ist !
Meiner Meinung nach lag das Problem an der Stelle der Ausgabe:
"printf("neue Weichenstellung %d %d %d %d\n", &weiche1, &weiche2, &weiche3, &weiche4);"
Durch das Und-Zeichen übergibst du die Adresse des Speicherbereiches in dem der Wert der Variable gespeichert ist.
Nach entfernen der Und-Zeichen hat es bei mit sofort funktioniert weil anstelle der Speicheradresse nun der Wert ausgegeben wird.

~Arano

__Edit:__
So wie ich das gelesene habe, ist C++ die Weiterentwicklung von C. Und wenn man es lernen möchte solle man auch mit C anfangen und später um C++ ergänzen.

Und so wie ich das jetzt einschätze hast du hier aber ein C-Programm, weswegen du es auch als solches Compilieren solltest. Das ich mich hier irre ist nicht ausgeschlossen da ich selber ja auch noch Anfänger bin ;)
JimK
JimK 18.10.2008 um 18:14:24 Uhr
Goto Top
Hi Arano!

Hab ich leider auch feststellen müssen, dass das Buch erstmal eine kleine Einführung in C macht. Hoffe das ändert sich noch, denn bis jetzt kann ich das noch alles in C++ umschreiben, weil so langsam die Erinnerungen an die Programmierstunden in der Schule zurück kommen. Leider fand ich das damals nicht so interessant wie heut, aber der Lehrer war auch nicht gut.

Wie hast du eigentlich damit angefangen? Vielleicht kannst du mir ja ein paar Tipps geben!?

mfg JimK
Arano
Arano 19.10.2008 um 02:59:24 Uhr
Goto Top
Nabend

Wie hast du eigentlich damit angefangen? Vielleicht kannst du mir ja ein paar Tipps geben!?
Naja, eigentlich arbeite ich mit PHP also der Webprogrammierun - von HTML, CSS und Javascript über Perl zu PHP.
Zu C++ bin ich gekommen weil ich ein kleines Programm brauchte mit dem ich eine LED am Druckerkabel (LPT1) ein- und ausschalten kann (zur Emailbenachrichtigung (der Rest läuft über ein PHP-Script ^^)).
Nach etwas suchen habe ich dann diese Seite gefunden und einfach angefangen: http://ladedu.com
Muss aber ehrlich sagen das ich mir das leichter vorgestellt hatte da ich ja schon Erfahrung in PHP habe, vor allem die Variablentypen (int, char, ...) machens mir schwer, das geht in PHP fast automatisch.

Einen schönen Sonntag noch
Arano