这是我"HW2_1_JM.exe 中0x0F29F365 (msvcr120d.dll) 处未处理的异常: 0xC0000005:访问违规读取位置0xFFFFFFFF。
的第一篇文章,这是我尝试运行该程序时经常遇到的错误。我是编程新手,所以我对我的代码质量感到抱歉。 当它没有抛出这个错误时,它只是在一段时间之前无休止地暂停。我们认为错误与int d
有关,因为当我们尝试同时打印n
和d
时,我们在打印n
后再次出现错误。
int main()
{
int a[10];
puts("Please input a value: n");
int n;
scanf("%i", &n);
printf("n you chose: %in", n);
puts("Please input a base value, between 1 and 11: n");
int d;
scanf("%i", &d);
while (!(n = -1));
{
int q = n;
int k = 0;
printf(q);
while (q != 0);
{
a[k] = (q % d);
q = q / d;
printf(q);
k++;
}
for (int j = 0; j < 11; j++)
{
printf("Element [%d] = %d n", j, a[j]);
}
puts("Please input a value: n");
scanf("%i", &n);
printf("n you chose: %in", n);
puts("Please input a base value, between 1 and 11: n");
scanf("%i", &d);
}
system("pause");
return 0;
}
printf 的签名是 int printf ( const char * format, ... );
您的调用printf(q)
其中 q 是int
-
while (!(n = -1));
您可以在此处删除分号,否则以下{}
将不会是 while 循环的一部分。 -
while (!(n = -1));
n = -1
是赋值而不是比较,比较将始终评估为true
,您可能需要n == -1
。 -
for (int j = 0; j < 11; j++)
您超出了数组的范围,该范围应为 [0; 10)。我想你想要j < 10
.
可能还有其他问题。您应该尝试使用调试器来找出实际错误。
您有一个包含 10 个项目的数组,但尝试读取 11 个元素(0 到 10)。将循环更改为:
for (int j = 0; j < 10; j++)
{
printf("Element [%d] = %d n", j, a[j]);
}
另外,这是错误的:
while (!(n = -1));
{
当您想要进行比较时,您正在做作业。而且你有一个放错地方的;
.你的代码应该是
while (n != -1)
{