#include "stdafx.h"
#include <conio.h> //_getch()
#define NMAX 100
class simpleNumbers
{
private:
int m;
int table[NMAX];
public:
//заполнение таблицы
void setTable()
{
int i = 2;
int k = 1;
table[0] = 1;
while (i < m+1)
{
if (i % 2 != 0)
{
int j = 0;
while (j < k+1)
{
if ((table[j] == 0) || ((i % table[j] == 0) && (j != 0)))
break;
j++;
}
if (j == k)
{
table[k] = i;
k++;
}
}
i++;
}
}
//Просмотр таблицы
void getTable()
{
int i = 0;
while (table != 0 )
{
printf("%d \n",table);
i++;
}
}
//Ввод числа М
void setM()
{
printf("Please enter M: ");
while (!scanf("%d",m))
{
printf("Error! Value is incorrect!\n");
scanf("%d",m);
}
}
//Конструктор класса
simpleNumbers()
{
m = 0;
for (int i = 0; i < NMAX; i++)
table = 0;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
simpleNumbers sNumber;
sNumber.setM();
sNumber.setTable();
sNumber.getTable();
return 0;
}
Ошибка Unhandled exception at...
Unhandled exception at 0x10296af2 (msvcr90d.dll) in lab2.exe: 0xC0000005: Access violation writing location 0x00000000.
Причем билд проходит нормально без ошибок, экзешник собирается, но во время исполнения такая фигня.
Ниже код:
Код:
Код:
while (table != 0 )
{
printf("%d \n",table);
i++;
}
{
printf("%d \n",table);
i++;
}
таким макаром можно и до нескольких тысяч досчитать,
если раньше AV не вывалится
сомневаюсь что ошибка из-за выхода за границы массива. потому, что в таблице есть 0, и цикл не должен зацикливаться, к томуже я трейсил, ошибка вылазиет на первой же итерации. и еще: абсолютно идентичный код, но оформленный в виде 3-х процедур, а не класса работает.
в какой строке вываливается?
while (!scanf("%d",m)) в методе setM
Как минимум нужно передавать ссылку на переменную. И зачем вам цикл, я в упор не пойму.
Насчет ссылки спасибо. Теперь работает. А цикл что бы вроде как не отставать от пользователя пока тот корректное значение не введет, но как оказалось теперь, задумка не работает(((
Да поможет вам гугл и да снизойдет на вас просветление :)