код не компилируется в inTC.появится диалоговое окно с комментарием «Недопустимая точка останова, очистить все точки останова» - PullRequest
0 голосов
/ 07 июня 2011
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
void main()
{
int wh=1,i,j;
int sale[5][3];
clrscr();

for(i=1;i<=5;i++)
{
for(j=1;j<=3;j++)
{
sale[i][j]=0;
}
}
printf("%d",wh);
getch();
}

Ответы [ 3 ]

2 голосов
/ 07 июня 2011

Конечно, вы должны отказаться от Turbo C, если это то, что вы используете - получите Code :: Blocks от http://forums.codeblocks.org.

Ваша ошибка:

for(i=1;i<=5;i++)
{
for(j=1;j<=3;j++)
{

должно быть:

for(i=0;i<5;i++)
{
for(j=0;j<3;j++)
{

Массивы в C индексируются, начиная с нуля.Итак, массив:

int a[5];

имеет 5 элементов:

a[0], a[1], a[2], a[3], a[4]

Обратите внимание, что в нем НЕ содержится элемент a [5].Любая попытка получить доступ к [5] (или [6] и т. Д.) Приводит к тому, что Стандарт C называет «неопределенным поведением» - ваша программа находится в неизвестном состоянии, из которого она никогда не сможет восстановиться, и может делать что угодно.

0 голосов
/ 07 июня 2011

Стандарты говорят, что использование void main () неверно.Некоторые компиляторы выдают ошибки, если вы попробуете это.

0 голосов
/ 07 июня 2011

Код имеет ошибки.Массив int sale[5][3];.Это означает, что диапазоны индекса охватывают 0 to 4 в первом измерении и 0 to 2 во втором измерении.Индекс в C начинается с 0.поэтому цикл должен быть:

for(i=0;i<5;i++)
{
  for(j=0;j<3;j++)
  {
    sale[i][j]=0;
  }
}

В противном случае в вашем коде вы получаете доступ к некоторой области памяти, которую вы не должны (за пределами массива.

Хотя это не должно заставить компилятор остановить васгенерация исполняемого файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...