每次我想运行此代码时,我都会收到来自VS c ++ 2010 Express的错误消息:
Eine nicht behandelte Ausnahme des Typs Automat.exe aufgetreten中的“System.AccessViolationException”。
ZusätzlicheInformationen:Es wurde versucht,imgeschütztenSpeicher zu lesen oder zu schreiben。 Dies ist haufig ein Hinweis darauf,dass andererSpeicherbeschädigtist。
以下是使用Google翻译翻译为英语的错误消息:
“System.AccessViolationException”类型的未处理异常 '发生在Automat.exe。
附加信息:尝试读取或写入受保护的内存 是。这通常表明其他内存已损坏。
这是我的代码:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
int main ()
{int g[5]={14,28,24,24,12},ag[3]={30,25,17},w[5]={0,0,0,0,0},a;
float e,p[3]={1.2,1.0,0.95},s=0;
while(1)
{while(1)
{printf("\n1)Drink1 1.2Euro");
printf("\n2)Drink2 1Euro");
printf("\n3)Drink3 0.95Euro");
printf("\nWaehlen sie ein Getraenk aus: ");
scanf("%f",&a);
if(a==123456)
{printf("\nEs sind noch folgende Getraenke vorhanden:");
printf("\n%dxDrink1\n%dxDrink2\n%dxDrink3",ag[0],ag[1],ag[2]);
printf("\nEs ist noch folgendes Wechselgeld vorhanden:");
printf("\n%fx1Euro\n%fx50Cent\n%fx20Cent\n%fx10Cent\n%fx5Cent\n",g[0],g[1],g[2],g[3],g[4]);
break;
}
else
{if(ag[a-1]==0)
{printf("\n\nDas Ausgewaehlte Getraenk ist nicht mehr verfuegbar\n");
}
else
{if(a==1 || a==2 || a==3)
{break;
}
}
}
printf("\n\nIhr Auswahl ist ungueltig!\n");
}
a--;
printf("\n\n Bitte werfen sie %.2f Euro ein\n",&p[a]);
while(s<p[a])
{while(1)
{printf("\nDerzeit: %f\nEinwurf: \n",s);
scanf("%f",&e);
if(e==2 || e==1 || e==0.5 || e==0.2 || e==0.1 || e==0.05)
{break;
}
printf("\nDer eingeworfene Wert ist ungueltig!\n");
}
s=s+e;
}
ag[a]--;
s=s-p[a];
if(s==0)
{printf("\n\nGeniessen sie ihr Getraenk!\n");
}
else
{printf("\nSie bekommen noch %f Euro\n",s);
while(s-1>0)
{w[0]++;
s=s-1;
}
while(s-0.5>0)
{w[1]++;
s=s-0.5;
}
while(s-0.2>0)
{w[2]++;
s=s-0.2;
}
while(s-0.1>0)
{w[3]++;
s=s-0.1;
}
while(s-0.05>0)
{w[4]++;
s=s-0.05;
}
printf("\nIhr Wechselgeld:");
printf("\n%fx1Euro\n%fx50Cent\n%fx20Cent\n%fx10Cent\n%fx5Cent",w[0],w[1],w[2],w[3],w[4]);
printf("\n\nGeniessen sie ihr Getraenk!\n");
g[0]=g[0]-w[0];
g[1]=g[1]-w[1];
g[2]=g[2]-w[2];
g[3]=g[3]-w[3];
g[4]=g[4]-w[4];
}
}
getch();
return 0;
}
调试时我发现,当我输入123456时,它甚至不认为第一个语句(if(a == 123456))为真。
请帮忙。
答案 0 :(得分:2)
您不应使用a
格式说明符在scanf
中读取整数(%f
)。请改用%d
。