C ++帮助。数组不使用整数

时间:2013-10-09 03:27:29

标签: c++ arrays

这是我的代码:(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,则不起作用。

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

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

3 个答案:

答案 0 :(得分:3)

您的sentence是9&#34;插槽&#34;大(以sentence[0]代表sentence[8])。你试图在第10个插槽中放置一些东西(sentence[9]),这是一个禁忌。

(下面用word重复此模式。)

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

答案 1 :(得分:0)

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

答案 2 :(得分: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循环被破坏了:

for(int a = 10; a&gt; 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;
}

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