2016-10-12 4 views
-1

Итак, у меня есть пользовательская программа расшифровки, которая читается во входном файле и расшифровывает ее на основе вводимых ключей. Текстовый файл:Программа расшифровки клиента C++ Чтение неисправностей в

23 
11 

Java 2 linux 3 fear 0 pool 2 do 0 red 1 lock. 1 I 0 random 2 computers, 0 not 0 the 0 open 2 car! 2 C, 0 lack 0 of 0 dog 1 green 2 C++ 0 bottle 2 wrong, 2 them. 0 

5 1 10 21 9 6 21 11 13 16 20 

Этот файл представлен в виде:

[Number of Words] 
[Number of Keys] 

[Word] [Jump] [Word] [Jump] ... [Word] [Jump] 

[Key] [Key] ... [Key] 

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

#include <iostream> 
#include <fstream> 

using namespace std; 

struct pieces { 

char word; 
int jump; 

} ; 

// Main Function 
int main() 
{ 
// declare variables 
int keyCount = 1; 
int wordCount = 8; 
int wordAmount[8]; 
int keyAmount[8]; 
pieces cipher[5]; 
char decoded[20][20]; 
char filename[10]; 
int keys[keyCount]; 
char tArray[20][20]; 
ifstream inData; 

    //prompt user for input file 

cout << " Enter file name: "; 
cin >> filename; 

inData.open(filename); 

if(inData.is_open()); 
{ 

    // read list of names into array 

    for (int i = 0; i < keyCount; ++i){   

    inData >> wordAmount[i] >> keyAmount[i]; 

     for(int j = 0; j < wordCount; j++){ 

     inData >> cipher[j].word >> cipher[j].jump; 

     } 

    } 

cout << " Key Count: " << keyCount << "\n"; 

    // print out 

     for (int i = 0; i < keyCount; ++i){ 

    cout << " KeyAmount: "; 
    cout << keyAmount[i] << "\n"; 
    cout << " WordAmount: "; 
    cout << wordAmount[i] << "\n"; 

     for(int j = 0; j < wordCount; j++){ 

     cout << cipher[j].word << " " << cipher[j].jump; 

      } 

      } 

    } 

inData.close(); 

    return 0; 
} 

Я попытался положить обугленного слово как массив, но потом я получил файл сегментации. Любой совет будет принят во внимание!

+1

Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –

+0

Я рекомендую использовать символы 'char' для * single * и' std :: string' для нескольких символов (например, слова, предложения и * текстовые строки *). –

ответ

0

ИМХО, ваш проект будет проще, если бы вы использовали std::string и перегружен форматированный ввод оператора >>:

struct Word_Jump 
{ 
    std::string word; // Using std::string because it has space for more than one character. 
    int jump; 
    friend std::istream& operator>>(std::istream& input, Word_Jump& wj); 
}; 

std::istream& 
operator>>(std::istream& input, Word_Jump& wj) 
{ 
    input >> wj.word; 
    input >> jump; 
    return input; 
} 

Ваш вклад может выглядеть примерно так:

std::vector<Word_Jump> database; 
for (unsigned int i = 0; i < number_of_words; ++i) 
{ 
    Word_Jump wj; 
    my_data_file >> wj; 
    database.push_back(wj); 
} 

Аналогично, вход для ключи для чтения:

std::vector<int> key_database; 
for (unsigned int j = 0; j < number_of_keys; ++j) 
{ 
    int k = 0; 
    my_data_file >> k; 
    key_database.push_back(k); 
} 

Итак, приведенные выше два возможных метода для чтения в словах & пары прыжков, а также ключи.

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