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,则代码底部的数组(如 word[f] 和 b[f])不起作用。

当我用 [1] 更改所有“f”来测试代码时,它可以工作。但是当我改用“f”时,它会返回运行时错误。

不确定这是否是我的编译器。但是,嘿 - 我是一个 2 天大的 C++ 编码员。

4

3 回答 3

3

sentence有 9 个“插槽”大(地址为sentence[0]sentence[8]。您尝试在第 10 个插槽 ( sentence[9]) 中放一些东西,这是一个禁忌。

(这个模式在下面用 重复word。)

您很可能希望将这些数组声明为 10 元素数组。

于 2013-10-09T03:29:39.513 回答
0

那是因为sentenceword包含九个单位。但是rand()%10会产生9,当你使用时word[f] = sentence[f],word[9] 和 sentence[9] 超出范围。word[9]是数组的第 10 个元素word

于 2013-10-09T03:39:48.227 回答
0

您的代码有几个问题。首先,句子和单词只有 9 个条目,但您尝试使用 10。数组声明是从 1 开始的,例如

字符 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 循环已损坏:

for (int a = 10; a > 1; a = a - b[f]){

它使用始终为 0 的外部“f”来访问 b 的元素 0 并从 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;
}

需要 C++11(-std=c++11 编译器选项)。ideone现场演示在这里

于 2013-10-09T04:04:28.660 回答