код не компилируется inTC. появляется диалоговое окно с комментарием «Недопустимая точка останова,, очистить все точки останова»

#c

#c

Вопрос:

 #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();
}
  

Комментарии:

1. Не используйте Turbo C. Используйте современный компилятор.

2. почему есть оба iostream.h и stdio.h ?

3. @phoxis Люди любят гибридные автомобили, почему бы им не любить гибридный код! 😉

4. @jonsca: я хотел бы добавить какой-нибудь сценарий оболочки, пожалуйста, добавьте #!/bin/bash затем.

Ответ №1:

Конечно, вам следует отказаться от Turbo C, если это то, что вы используете — get Code::Blocks fromhttp://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]. Любая попытка получить доступ к a[5] (или a[6] и т.д.) приводит к тому, что стандарт C называет «неопределенным поведением» — ваша программа находится в неизвестном состоянии, из которого она никогда не сможет восстановиться, и может делать что угодно.

Ответ №2:

В коде есть ошибки. Массив является 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;
  }
}
  

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

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

Ответ №3:

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