Два условия, которые не работают одинаково, и я не могу понять, почему - PullRequest
1 голос
/ 11 июня 2011

Я написал функцию, которая ищет символ в массиве, и если найдено, возвращает его преемник, иначе возвращает -1. Затем, если слово заканчивается гласной, алгоритм добавляет согласную, и наоборот.

Этот код хорошо работает, даже с последним словом файла:

changedChar = cipherChar(character, consonants, tConsonants);
if (changedChar != -1) charType = 'c';
else {
    changedChar = cipherChar(character, CONSONANTS, tConsonants);
    if (changedChar != -1) charType = 'c';
    else {
        changedChar = cipherChar(character, vowels, tVowels);
        if (changedChar != -1) charType = 'v';
        else {
            changedChar = cipherChar(character, VOWELS, tVowels);
            if (changedChar != -1) charType = 'v';
            else {
                changedChar = cipherChar(character, others, tOthers);
                if (changedChar != -1) charType = 'o';
                else {
                    changedChar = changeDigit(character);
                    if (changedChar != -1) charType = 'o';
                    else {
                        changedChar = cipherChar(character, punctuation, tPunctuation);
                        if (changedChar != -1) charType = 'o';
                    }
                }
            }
        }
    }
}
if (changedChar != -1) outFile << changedChar;
    if (searchChar(inFile.peek(), punctuation, tPunctuation) > -1)
        if (charType == 'v') {
            outFile << consonants[nVowel];
            nVowel < 4 ? nVowel++ : nVowel = 0;
        }
        else if (charType == 'c') {
            outFile << vowels[nConsonant];
    nConsonant < 20 ? nConsonant++ : nConsonant = 0;
        }

Но этот другой не добавляет лишнюю букву после последнего слова файла:

charType = 'c';
changedChar = cipherChar(character, consonants, tConsonants);
if (changedChar == -1) {
    changedChar = cipherChar(character, CONSONANTS, tConsonants);
    if (changedChar == -1) {
        charType = 'v';
        changedChar = cipherChar(character, vowels, tVowels);
        if (changedChar == -1) {
            changedChar = cipherChar(character, VOWELS, tVowels);
            if (changedChar == -1) {
                charType = 'o';
                changedChar = cipherChar(character, others, tOthers);
                if (changedChar == -1) {
                    changedChar = changeDigit(character);
                    if (changedChar == -1) changedChar = cipherChar(character, punctuation, tPunctuation);
                }
            }
        }
    }
}
if (changedChar != -1) outFile << changedChar;
    if (searchChar(inFile.peek(), punctuation, tPunctuation) > -1)
        if (charType == 'v') {
            outFile << consonants[nVowel];
            nVowel < 4 ? nVowel++ : nVowel = 0;
        }
        else if (charType == 'c') {
            outFile << vowels[nConsonant];
    nConsonant < 20 ? nConsonant++ : nConsonant = 0;
        }

Почему? Я действительно запутался.

Ответы [ 2 ]

6 голосов
/ 11 июня 2011

Если в логике таких условий много, скорее всего, в конструкции функции должен быть недостаток. Правильно поймите ваше требование и попробуйте упростить логику.

3 голосов
/ 11 июня 2011

Единственное отличие, которое я вижу, состоит в том, что во втором куске кода, если ничего не найдено, charType имеет значение 'o', тогда как в первом куске кода, если ничего не найдено, charType имеет все свои начальные значения. значение было до запуска этого кода (который вы нам не показали).

Кроме того, эти два фрагмента кода выглядят семантически идентичными, поэтому, если это не является причиной вашей проблемы, то проблема заключается в коде, который вы нам не показали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...