Вот мой код: (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.
Ваше sentence
- 9 "слотов" большой (рассматривается как sentence[0]
к sentence[8]
). Вы пытаетесь поместить что-то в 10-й слот (sentence[9]
), которое не имеет значения.
(Этот шаблон повторяется ниже со word
.)
Скорее всего, вы хотите объявить эти массивы как 10-элементные.
В вашем коде есть несколько проблем. Во-первых, предложение и слово имеют только 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 компилятор). Идеальная живая демонстрация здесь
Это потому, что sentence
и word
содержат девять единиц. Но rand()%10
будет производить 9
, когда вы используете word[f] = sentence[f]
, слово [9] и предложение [9] находятся за пределами допустимого диапазона. word[9]
- это 10-й элемент word
массива.