尝试运行非常简单的程序时访问冲突



"HW2_1_JM.exe 中0x0F29F365 (msvcr120d.dll) 处未处理的异常: 0xC0000005:访问违规读取位置0xFFFFFFFF。

这是我

的第一篇文章,这是我尝试运行该程序时经常遇到的错误。我是编程新手,所以我对我的代码质量感到抱歉。 当它没有抛出这个错误时,它只是在一段时间之前无休止地暂停。我们认为错误与int d有关,因为当我们尝试同时打印nd时,我们在打印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

  1. while (!(n = -1)); 您可以在此处删除分号,否则以下{}将不会是 while 循环的一部分。

  2. while (!(n = -1)); n = -1是赋值而不是比较,比较将始终评估为 true ,您可能需要n == -1

  3. 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)
{

相关内容