2015-10-02 209 views
0

好吧,我幾乎得到了這個工作,但我堅持b。的第二部分,讓它顯示在該陣列中的位置的單詞。這是我需要做的事情的清單。打印內容的字符串向量

  1. 讀取從文本文件50個字轉換爲一個字符串數組

  2. 程序將使用隨機數爲:

    A.-它將產生用於2和7之間的隨機數在句子中選擇要使用的單詞

    b.-它將生成一個隨機數字,用於選擇單詞。該數字將介於0和49之間,因爲這些是數組中字的位置

  3. 它將在屏幕上顯示該句子。

謝謝你的時間提前的任何建議

#include <string> 
#include <iostream> 
#include <fstream> 
#include <time.h> 
#include <stdlib.h> 
#include <vector> 

using namespace std; 

int main() { 
    ofstream outFile; 
    ifstream inFile; 
    string word; 
    vector <string> words; 
    srand(time(0)); 

    int Random2 = rand() % 7 + 1; 
    inFile.open("words.txt"); 
    if (!inFile.is_open()) { //tests to see if file opened corrected 
     exit(EXIT_FAILURE); 
    } 
    while (getline(inFile, word)) { //Puts file info into string 
     words.push_back(word); 
    } 

    for (int i = 0; i < Random2; i++) { 
     int Random1 = rand() % 49 + 1; 
     cout << words[Random1] << endl; 
    } 

    cin.get(); 
} 
+0

我不太明白。第一個隨機數是句子中單詞的數量? –

+0

歡迎來到堆棧溢出。 1)孤立地開發新功能*。 2)良好的縮進就像好的修飾。 3)數組和矢量不是一回事。 4)「陣列中那個位置的單詞」沒有多大意義。 5)在使用它之前,確保你瞭解'getline'。 6)你從[1,...,50]中抽取一個隨機數。 – Beta

+0

你的實際問題是什麼?除了你以外,你看起來沒問題的代碼是從1到49而不是0到49的隨機單詞。 –

回答

0

你的邏輯在預期範圍內產生的隨機數是不正確的。

int Random2 = rand() % 7 + 1; 

Random2的範圍設置爲1至7(包括兩端)。如果你想的範圍是2 O 7,以下,就需要使用:

int Random2 = rand() % 6 + 2; 

而且......

int Random1 = rand() % 49 + 1; 

這使到1的範圍內或Random1至49,包括兩個端點。如果你想的範圍爲0〜49,既包容,你需要使用:

int Random1 = rand() % 50; 

你的代碼的其餘看起來不錯給我。

+0

當我運行它時,出現「Debug Assertion Failed!」,表達式「標準C++庫超出範圍」的錯誤。&& 0。我使用Microsoft VIsual Studio構建和編譯所有內容。 – Jetster250

+0

如果'words'中的項目少於50個,就會出現這種情況。爲了解決這個問題,使用'size_t size = words.size();'和'int Random1 = rand()%size;'。 –