Простой текст в двоичный конвертер, написанный на C++


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

#include <iostream>
#include <string>
#include <bitset>

using namespace std;

int main()
{
char letter = ' ', playAgain = 'y';
string word = " ";

cout << "\t**Text To Binary Convertor**\n\n";

while (playAgain == 'y'){

    cout << "Please enter a character, word, or phrase: ";

    getline (cin, word, '\n');

    cout << "\nThe binary value for " << word << " is \n";

    for (unsigned int wordPosition = 0; wordPosition < word.size(); ++wordPosition){

        letter = word[wordPosition];

        bitset <8> binary(letter);

        cout << binary;
        }


    cout << "\n\nWould you like to try again? (y/n)";

    cin >> playAgain;

    if (playAgain != 'y'){
        cout << "\n\nExiting program.";
        playAgain = 'n';
        }
        cin.ignore();
}



return 0;
}


10415
12
задан 27 мая 2011 в 03:05 Источник Поделиться
Комментарии
3 ответа

Я не вижу ничего явно плохого в код, так что это хорошее начало.

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

Вы проверяете для playAgain != 'г' в двух разных местах, который является избыточным и может привести к ошибкам, если один из них изменяется. Я бы переместить, что весь второй блок от основного цикла.

7
ответ дан 27 мая 2011 в 04:05 Источник Поделиться

Как уже упоминалось, ваш код выглядит хорошо. Вот мои дополнения:


  • Лучше всего не использовать с помощью пространства имен std.

  • Переменные должны быть объявлены/инициализируется на их собственной линии:

    char letter = ' ';
    char playAgain = 'y';

  • Вам не нужен перевод строки между каждой строкой кода. Это будет просто сделать ваши программы появляются дольше и труднее читать. Просто отдельные линии на группы в зависимости от назначения.

  • Объявления переменных и инициализации должен быть помещен как можно ближе в область, как это возможно, где они впервые будут использованы:

    std::cout << "Please enter a character, word, or phrase: ";
    std::string word; // declaration is first used here
    getline(std::cin, word, '\n');

  • Ваш основной цикл можно использовать для (;;). Это по сути бесконечный цикл, но он должен делать перерыв в конце, если пользователь вводит значение, отличное от 'г':

    for (;;)
    {
    // do stuff

    std::cout << "\n\nWould you like to try again? Y/N)";
    char playAgain;
    playAgain = std::toupper(playAgain);
    std::cin >> playAgain;
    std::cin.ignore();

    if (playAgain != 'Y')
    {
    break;
    }

    // playAgain is 'y', so do stuff again
    }


  • Предпочитаю использовать с std::строки::size_type для внутренней для-петли, так как это тип, возвращаемый из функции std::строки::размер().

    Или если у вас есть c++11, использовать на основе диапазона для петли вместо:

    for (auto iter& : word)
    {
    letter = iter;

    // ...
    }


9
ответ дан 10 августа 2013 в 01:08 Источник Поделиться

Ваш код выглядит хорошо в целом. Просто пару замечаний...

При написании кода C++, вы, как правило, используют "епси" вместо "\N", чтобы завершить линии.

cout << "hi" << endl;

Кроме того, чтобы вывести значение ASCII символа не необходимо "Чара" значение в другой переменной. В вашем случае, вы копируете его в два раза. Вы можете печатать значение ASCII непосредственно из строки, используя гипс.

cout << (unsigned short)word[wordPosition] << endl;

1
ответ дан 27 мая 2011 в 04:05 Источник Поделиться