2012-12-09 5 views
1

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

#include <iostream> 

using namespace std; 

void stuff(char command[][5]) 
{ 
    int b, i = 0; 
    char ch; 
    cin.get(ch); 

    while (ch != '\n') 
    { 
     command[i][b] = ch; 
     i++; 
     cin.get(ch); 
     if(isspace(ch)) 
     { 
      cin.get(ch); 
      b++; 

     } 

    } 
    for(int n = 0; n<i; n++) 
    { 
     for(int m = 0; m<b; m++) 
      { 
      cout << command[n][m]; 
      } 
    } 

} 

int main() 
{ 
    char cha[25][5]; 
    char ch; 
    cin.get(ch); 
    while (ch != 'q') 
    { 
     stuff(cha); 
    } 

    return 0; 
} 
+0

Почему не используя 'зЬй :: вектор >' 'и применить cin' к струнам? –

ответ

0

b не инициализируются так, будет иметь случайное значение при первом использовании в качестве индекса. Инициализируйте b и убедитесь, что индексы массива не выходят за пределы массива.

В качестве альтернативы, используйте std::vector<std::string> и operator>>() и забыть об индексах массива:

std::string word; 
std::vector<std::string> words; 
while (cin >> word && word != "q") words.push_back(word); 
+0

Спасибо! Всякий раз, когда я использую пробел, я получаю странные символы в массиве. Знаете ли вы, что бы это исправить? – Igotagood1

Смежные вопросы