2011-01-19 4 views
2

Даже при минимальном количестве 10 цифр для ввода я не получаю ошибок, но мой код сразу же срабатывает при запуске. Мне также интересно, что мне делать, если у меня возник вопрос, похожий на другой вопрос, который я уже задал, но на еще одну новую проблему?Сбой сразу после запуска

#include <iostream> 
#include <cmath> 
#include <fstream> 
#include <cstdlib> 
#include <vector> 
using namespace std; 
int primer(int max); 
int main() 
{ 
    primer(5); 
    system("pause"); 
    return 0; 
} 

int primer(int max){ 
    vector<int> a; 
    a[1]=2; 
    for (int i=2;i<=max;i++){ 
     bool prime=true; 
     for (int ii=0;ii<a.size();ii++) { 
     if (i/a[ii]==floor(i/a[ii])) { 
     prime=false; 
     } 
     } 
     if (prime==true) { 
     a.push_back(i); 
     } 
    } 
    for (int iii=0;iii<=a.size();iii++) { 
    cout << a[iii] << endl; 
    } 
} 

У меня нет ошибок, но скомпилированный код немедленно сработает. я изменил его на

#include <iostream> 
#include <cmath> 
#include <fstream> 
#include <cstdlib> 
#include <vector> 
using namespace std; 
int primer(int max); 
int main() 
{ 
    primer(5); 
    system("pause"); 
    return 0; 
} 

int primer(int max){ 
    vector<int> a; 
    a.push_back(2); 
    for (double i=2;i<=max;i++){ 
     bool prime=true; 
     for (int ii=0;ii<a.size();ii++) { 
     if (i/a[ii]==floor(i/a[ii])) { 
      prime=false; 
     } 
     } 
     if (prime) { 
     a.push_back(i); 
     } 
     } 
    for (int iii=0;iii<=a.size();iii++) { 
     cout << a[iii] << endl; 
     return a.size(); 
    } 
} 

Я обратился все ваши проблемы. Он по-прежнему не возвращает ошибок и по-прежнему падает.

+0

Необходимо отправить сообщение об ошибке. Также вам не нужно использовать переменные типа 'i',' ii' и 'iii', особенно все в одном коде. – Falmarri

+1

Вы пытались отладить его вообще? –

+0

Второе независимое предложение первого предложения указывало, что у меня нет ошибок. Я только что отредактировал и повторил его в конце, чтобы укрепить его. – TimeCoder

ответ

1
vector<int> a; 
a[1]=2; 

Вы не можете получить доступ к a[1] до тех пор, пока вы зарезервирован для нее место. Вероятно, вы должны использовать , чтобы добавить 2 к концу a.

Вы указали primer, чтобы вернуть int, но он ничего не возвращает. Либо сделайте это void, либо верните количество простых чисел.

i/a[ii]==floor(i/a[ii]) не собирается делать то, что вы ожидаете. i/a[ii] выполняет целочисленное деление. Перед делением следует положить i в double.

if (prime==true) можно изменить только на if (prime), не нужно сравнивать логическое с true.

Пожалуйста, улучшите свой стиль кодирования. Используйте правильные отступы и наиболее часто используемые имена переменных: i, j, k вместо i, ii, iii.

5

Почему вы думаете, что можете это сделать?

vector<int> a; 
a[1]=2; 
+3

WTF? Мы только что обратились к нему в своем предыдущем вопросе несколько минут назад! http://stackoverflow.com/questions/4741629/c-vector-elements-count/4741642#4741642 – chrisaycock

1

Вот еще одна ошибка:

for (int iii=0;iii<=a.size();iii++) { 
    cout << a[iii] << endl; 
    return a.size(); 
} 

Я понимаю, что вы можете только один раз return из функции main включены. Выполнение здесь не будет происходить из-за инструкции return.

Вы действительно хотите сделать заявление return внутри цикла for?

Смежные вопросы