Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

hallo zusammen,

in der überschrift seht ihr das ich an einem programm mit funktion und array sitze. das programm ist so weit fertig, jedoch sagt mir visual studio beim debuggen "Debug Error! Run-Time Check Failure #3 - The variable 'rest' is being used without being initialized."

nach der fehler angabe hat er anscheinend probleme mit meiner variabel "rest" weil sie nicht initialisiert wird.

ich versteh nun nicht ganz warum. vielleicht könnt ihr mir helfen.


int primzahlcheck (int);


int _tmain(int argc, _TCHAR* argv[])

{

	int ergebnis, zahl[1000], zuUntersuchendeZahl = 3, arrayzaehler = 0; // zählt von 0 bis 999;


		do

		{

			ergebnis = primzahlcheck( zuUntersuchendeZahl );


			if ( ergebnis == 1 )

			{

				zahl[arrayzaehler] = zuUntersuchendeZahl;

				arrayzaehler++;

			}


			zuUntersuchendeZahl++;

		} while (arrayzaehler<=1000);


	return 0;

}


int primzahlcheck (int a)


{

	int teiler,rest;


	for (teiler=2; teiler <= a/2; teiler++)

	{

		rest = a % teiler;


		if (rest == 0)

		{

			return 0;

		}

	}


		if (rest != 0)

		{

			printf ("%d\n",a); 

			return 1;

		}

}


grüße voldemort

ok, hab da mal was geändert.

ich habe meinen rest benannt und nun meckert der compiler über meine zahl.

hab mein array schon runtergesetzt, aber de fehler lautet immer noch "Stack around the variable 'zahl' was corrupted".

Hier der geänderte Code


int primzahlcheck (int);


int _tmain(int argc, _TCHAR* argv[])

{

	int ergebnis, zuUntersuchendeZahl = 2, zahl[999], arrayzaehler = 0; // zählt von 0 bis 999;


		do

		{

			ergebnis = primzahlcheck( zuUntersuchendeZahl );


			if ( ergebnis == 1 )

			{

				zahl[arrayzaehler] = zuUntersuchendeZahl;

				arrayzaehler++;

			}


			zuUntersuchendeZahl++;

		} while (arrayzaehler<=1000);


	return 0;

}


int primzahlcheck (int a)


{

	int teiler, rest=3;


	for (teiler=2; teiler <= a/2; teiler++)

	{

		rest = a % teiler;


		if (rest == 0)

		{

			return 0;

		}

	}


		if (rest != 0)

		{

			printf ("%d\n",a); 

			return 1;

		}

}


		do

		{

			ergebnis = primzahlcheck( zuUntersuchendeZahl );


			if ( ergebnis == 1 )

			{

				zahl[arrayzaehler] = zuUntersuchendeZahl;

				arrayzaehler++;

			}


			zuUntersuchendeZahl++;

		} while (arrayzaehler<=1000);

Deine Schleife ruft zuletzt zahl[1000], obwohl Zahl nur bis 998 deklariert wurde. Schreibe bei den ganzen int-Deklarationen statt

zahl[999]

einfach

zahl[1001]

dann sollte es imo gehen...

Ohne, dass ich jetzt genau weiß, wo der Compiler (?) - also die Zeile - dies anmeckert, muss ich Phirxos (der schneller war als ich), da zustimmen, schau Dir noch mal die Arraygrenzen an.

Wenn Du ein Array deklariert int blub[1000], dann hat es 1000 Elemente, aber die beginnen bei 0 und laufen bis 999, also Dein Zählindex [0,999].

ach ja. das war ein ganz dummer fehler von mir. ich vergaß zu beachten das er die speicher von 0-999 zählt.

so weit so gut. der compiler meckert nun nicht mehr und das programm läuft. jedoch ist meine erste ausgegebene zahl 5297. d.h. irgendwo habe ich nun noch einen fehler.

kann es sein das es mit der if-abfrage in der funktion zu tun hat? sobald ich diese ausklammer zeigt er mir die richgen zahlen an, oder ist das nun ein dummer zufall?

Eher ein dummer Zufall - das Programm rechnet alles korrekt, aber die Konsole kann nur eine begrenzte Anzahl von Zeilen anzeigen, d. h. die oberen Zeilen werden praktisch sofort von den unteren verdrängt. Ersetze in

printf ("%d\n",a);

das \n durch ein paar Leerzeichen, dann sollte es funktionieren...

ok, gesagt getan.

das programm läuft, aber spuckt nach den 1000 zahlen noch mal 1000 zahlen aus.

irgendwie kann es aber auch nicht das wahre sein das durch den zeilenumbruch so ein derber fehler auftreten kann.

da muss es doch ne logische erklärung für geben, oder?

bei näherem betrachten des programmes bin ich nun doch durch das array verwirrt. ich hatte ja zahl[1000] deklariert sprich zeihen zahl 0 -999. das sind doch 1000 zeichenpro speicher.

wieso musste ich denn nun das array zahl[1001] benennen?

grüße voldemort

du musst es zahl[1001] nennen, weil du arrayzaehler von 0 bis 1000 verwendest - das sind 1001, nicht 1000 Zahlen...

Logische Erklärung für die Legastenie der Batch fällt mir auf Anhieb keine ein...

ich hab die lösung für das \n problem.

man muss einfach nur den zeilenpuffer erhöhen und schon schreibt das programm auch die zahlen von anfang an.

das muss man erstmal wissen ;)

mal ne frage am rande. kann man arrayzeichen mit hilfe einer schleife zählen?

ich wüsste grad nicht wie

man muss einfach nur den zeilenpuffer erhöhen und schon schreibt das programm auch die zahlen von anfang an.

das muss man erstmal wissen ;)

Dein Programm schreibt immer alle Zahlen. Die Eingabeaufforderung, die dein Programm ausführt, merkt sich aber in der Voreinstellung nicht so viele Zeilen, das ist alles.

mal ne frage am rande. kann man arrayzeichen mit hilfe einer schleife zählen?

ich wüsste grad nicht wie

Was meinst du mit "arrayzeichen"? Was genau willst du zählen?

also ein array = ein zeichen. zB Buchstaben.

sagen wir mal wir schreiben einen text mit array und möchten dann zählen wie viele zeichen bzw felder ich benutzt habe.

also ein array = ein zeichen.
Ich verstehe dich nicht. Wenn ein Array ein Zeichen ist, ist dann ein Arrayzeichen ein Zeichenzeichen?

Ein Array ist per Definition nicht ein Ding, sondern mehrere hintereinander.

sagen wir mal wir schreiben einen text mit array und möchten dann zählen wie viele zeichen bzw felder ich benutzt habe.
Du drückst dich wirklich sehr unklar aus. Was meinst du mit "text mit array"? Was meinst du mit "benutzt"? Suchst du vielleicht die Funktion strlen?

zur verständnis:

char zeile[1000]

gets (zeile)

wir geben einen text über tastatur ein der an das array übergeben wird.

nun such ich eine möglichkeit die mir ermöglicht das das programm mir ausgibt wie viele buchstaben inkl leerzeichen eingegeben wurden sind.

ich hoffe das war verständlicher.

ich könnte auch einen neuen thread erstellen wenn das wünschenswert ist, da es ja mit dem eigentllichen thema nichts mehr zu tun hat.

voldemort

ja,danke. das wäre die einfache variante. ich hab es nun mit einer while-schleife gelöst. jetzt muss ich nur noch das \0 mit einer if abfrage "sichtbar" machen und schon ist wieder eine aufgabe gelöst.

danke für die antworten

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.