2016-01-17 1 views
0

Когда я читаю в TXT-файле с 5 словами в нем из моей программы и помещается в массив с 20 пробелами, последнее слово в моем файле заполняется последние 16 мест в моем массиве. Любые идеи почему? Файл, который я вводил, будет содержать не более 20 слов.чтение файла в C++ в массив строк продолжает повторять последнее слово

newArray string[20]; 
if (inputFile) { 
    while (i<20) { 
     inputFile >> word; 
     if (word.length()<2) { //gets rid of single character words 
      i++; 
     } 
     else{ 
      newArray[i] = word; 
      cout<<newArray[i]<< " "; 
     } 

    } 
    inputFile.close(); 
} 
+0

Очистка вашего кода. Как вы начинаете с другого, если? –

+0

Извините, проблема в цикле while. Я пытался не копировать другие вещи. – Y3DII

+0

Проверьте, как вы инициализируете переменные? Начиная с "else if (word.length() <2) {" является синтаксической ошибкой. Попробуйте вставить код тоже –

ответ

1

Поправьте меня, если я ошибаюсь, но зачем вам нужен массив из 20 строк читать в 5 слова? Код ниже - это стандартный способ чтения из файла в массив.

#include <iostream> 
#include <string> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    string myArray[20]; 
    ifstream file("file.txt"); 
    string word; 
    if(file.is_open()) 
    { 
     int i = 0; 
     while(file>>word) 
     { 
      if(word.length()<2) 
      continue; 
      else 
      { 
       myArray[i] = word; 
       i++; 
      } 
     } 
    } 
} 

Addendum: Редактирование будет читать все слова и останавливаться, когда текста больше нет. Ваша первоначальная проблема заключалась в том, что поток файлов не читает ничего после того, как все 5 слов прочитаны, поэтому word остается тем же, заставляя его заполнить массив.

+0

Ну, я хочу, чтобы у него было максимум 20 слов. Для тестирования я отправляю файл с 5 словами. Вот почему я решил использовать цикл while, я хочу, чтобы он вышел из цикла while, когда у меня больше нет слов для чтения. – Y3DII

+0

@ Y3DII: Я думаю, что этот ответ - ваше решение. – David

1

Ваш вопрос неясен, но я уверен, что в цикле вы, вероятно, по-прежнему добавлять последнее слово, потому что, как вы используете время цикла. Вы не выходите из цикла после того, как закончите добавлять слова. вы должны выйти из цикла, если вы находитесь в конце файла, и это должно решить вашу проблему с последним словом, появляющимся несколько раз.

Лучшим подходом было бы считывание всего файла в 1 строку, а также токенизацию и добавление каждого слова за раз в массиве.

Если это не поможет, пожалуйста, укажите полный код. Также я не понимаю, почему у вас есть i++ } дважды. Это опечатка?

Надеюсь, это поможет.

редактировать: попробуйте этот код:

int i = 0; 
string line; 
ifstream myfile("names.txt"); 
if (myfile.is_open()) 
{ 
    while (getline (myfile,line)) 
    { 
     arr[i] = line; 
     i++; 
    } 
    myfile.close(); 
} 

Вы не будете добавлять любые строки после

+0

Я пытаюсь сделать это без токенизации. Я хочу, чтобы мой цикл while останавливался, как только я дошел до точки в текстовом файле, где у меня больше нет текста. – Y3DII

+0

В вашем цикле while вы делаете иначе, если. Вы не можете этого сделать, поскольку над ним нет инструкции if. Возможно, у вас есть опечатка. Также, если вы не хотите tokenize, и поскольку вы уже можете помещать слова в массив, вы можете проверить, достигли ли вы конца потока, и в этом случае вы хотите выйти из цикла. – deltashade

+0

Я понимаю, что мне нужно вырваться из цикла while. Я просто не знаю, как это реализовать. Как я узнаю, когда поток закончится? – Y3DII