C ++ Help. Массивы не работают с целыми числами

0

Вот мой код: (C++)

#include <iostream>
#include <stdlib.h>
using namespace std;
int main(){
    string sentence[9];
    string word[9];
    inb b[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    int f = 0;
    for (int i = 1; i <= 10; i += 1){
        cin >> sentence[i - 1];
    }
    for (int a = 10; a > 1; a = a - b[f]){
        b[f] = 0;        
        int f = rand() % 10;
        b[f] = 1;
        word[f] = sentence[f];
        cout << world [f] << endl;
    }
}

Однако, когда я запускаю это, я получаю "ошибку времени выполнения". Что это, ни строки, ни дальнейшей ошибки. Ничего.

Массивы в нижней части кода, такие как слова [f] и b [f], не работают, если я использую f внутри "[]".

Когда я меняю все "f" на [1], чтобы проверить код, он работает. Но когда я использую "f" вместо этого, он возвращает ошибку времени выполнения.

Не уверен, что это мой компилятор. Но эй - я 2-х дневный кодер CN10.

Теги:
arrays

3 ответа

2

Ваше sentence - 9 "слотов" большой (рассматривается как sentence[0] к sentence[8]). Вы пытаетесь поместить что-то в 10-й слот (sentence[9]), которое не имеет значения.

(Этот шаблон повторяется ниже со word.)

Скорее всего, вы хотите объявить эти массивы как 10-элементные.

0

В вашем коде есть несколько проблем. Во-первых, предложение и слово имеют только 9 записей, но вы пытаетесь использовать 10. Объявление массива основано на 1, например

char foo [2];

объявляет два символа. Однако они нумеруются 0 и 1, таким образом

char foo[2];
foo[0] = 'a'; //valid
foo[1] = 'b'; //valid
foo[2] = 'c'; //very bad.

эта проблема может быть запутана для вас тем фактом, что вы создаете "b" массив с автоматическим размером.

Вторая проблема заключается в том, что вы дважды объявляете "f".

int f = 0;
for (int i = 1; i <= 10; i += 1){

и внутри цикла

    int f = rand() % 10;
    b[f] = 1;

Тогда ваш цикл for нарушен:

для (int a = 10; a> 1; a = a - b [f]) {

он использует внешний 'f', который всегда равен 0, чтобы получить нулевой элемент элемента b и вычесть его из a.

Вот как я напишу код, который вы пытаетесь написать:

Я, честно говоря, не понимаю, что должен делать ваш код, но вот как я могу написать более простую версию того же:

#include <iostream>
#include <stdlib.h>
#include <array>

//using namespace std;  <-- don't do this.

int main(){
    std::array<std::string, 10> sentence;   // ten strings

    // populate the array of sentences.
    for (size_t i = 0; i < sentence.size(); ++i) {  // use ++ when ++ is what you mean.
        std::cin >> sentence[i];
    }

    for (size_t i = 0; i < sentence.size(); ++i) {
        size_t f = rand() % sentence.size(); // returns a value 0-9
        std::cout << sentence[f] << " ";
    }
    std::cout << std::endl;
}

Требуется параметр С++ 11 (-std = С++ 11 компилятор). Идеальная живая демонстрация здесь

0

Это потому, что sentence и word содержат девять единиц. Но rand()%10 будет производить 9, когда вы используете word[f] = sentence[f], слово [9] и предложение [9] находятся за пределами допустимого диапазона. word[9] - это 10-й элемент word массива.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню