Problem mit Switch-Befehl

S

sethunt3r

Hallo,

Ich habe ein Problem mit dem switch Befehl und zwar bekomme ich ein EAccessViolation Fehler als Zugriffsverletzung.

C:
#include <stdio.h>
#include <conio.h>

int main(void)

{

// lokale Variablen

menue,wh;
int z1,z2,z3,z4,z5,p,menue,wh;


// BS initialisieren
textbackground(RED);
textcolor(WHITE);
clrscr();

// BS Überschrift
gotoxy(2,2);
cprintf("Programm zur Berechnung von Pruefziffern");

gotoxy(2,4);
cprintf("Wollen sie eine Pruefziffer berechnen oder eine bestehende Ueberpruefen?");

gotoxy(2,6);
cprintf("1 = Berechnen");
gotoxy(2,7);
cprintf("2 = Ueberpruefen");

gotoxy(2,9);
cprintf("Bitte waehlen -> ");

// menue -> Tastatur

scanf("%d",&menue);


switch(menue)

{
  case 1:  clrscr();
	   gotoxy(2,2);textcolor(WHITE);
	   cprintf("Geben Sie nacheinander die 4 Zahlen an und bestaetigen Sie diese mit Enter");

	   gotoxy(2,4);textcolor(WHITE);
	   cprintf("Zahl 1 : ");
	   scanf("%d",z1);

	   gotoxy(2,5);textcolor(WHITE);
	   cprintf("Zahl 2 : ");
	   scanf("%d",z2);

	   gotoxy(2,6);textcolor(WHITE);
	   cprintf("Zahl 3 : ");
	   scanf("%d",z3);

	   gotoxy(2,7);textcolor(WHITE);
	   cprintf("Zahl 4 : ");
	   scanf("%d",z4);

	   p = z1 + z2 + z3 + z4;

	   gotoxy(2,9);textcolor(WHITE);
	   cprintf("Die Pruefziffer lautet: %d",p);
           break;
  case 2:  clrscr();
	   gotoxy(2,2);textcolor(WHITE);
	   cprintf("");
	   break;
  default: clrscr();
	   gotoxy(2,2);textcolor(WHITE);
	   cprintf("keine Operation gewaehlt");

}

		getch();

}

das Problem tritt auf im case 1 bei der Zeile "scanf("%d",z1);"

Ich will sozusagen dass der nacheinander die 4 Zahlen die man eingibt als z1, z2, z3, und z4 speichert, anschließend alle addiert und wieder ausgibt.
Ich hoffe ihr könnt mir sagen wo der Fehler liegt, weil ichs mir nicht erklären kann. Bin aber auch noch blutiger Anfänger ;)

Liebe Grüße :)
 

Vereth

Erfahrenes Mitglied
Du musst der scanf-Funktion die Variable als Zeiger übergeben, damit das Programm weiß, wohin die Zahl geschrieben werden muss. Die korrekte Formulierung wäre also z.B.:

scanf("%d",&z1);

EAccessViolation deutet übrigens immer auf ein Zeiger-Problem hin. Mit der switch-Anweisung selber hat das nichts zu tun.