2016-04-29 6 views
1

Хорошо, этот вопрос очень специфичен, и я буду кратким. Я пытаюсь преобразовать простой двоичный код из 5 цифр в десятичный, а затем в десятичное число ASCII; Но как-то мой вклад:C++ - простая двоичная двоичная программа ASCII

Тип двоичное число: 10110

Закончено? (y/n): n

Закончено? (y/n): n

Предполагалось, что запрос будет завершен только после запроса другого двоичного числа, а затем покажет предложение в массиве символов, когда я набрал y. Что случилось? Я просто не могу понять, что на самом деле ... Произошло

//main.cpp 
#include <iostream> 
#include "binconverts.h" 

int main(){ 
    using namespace std; 
    int numBin; 
    char acabou; 
    bool breakLoop = false; 
    int numer = 0; 
    cout << "Digite um numero binario: "; 
    cin >> numBin; 
    for (int a = 0; a < 54; a++){ 
     if (breakLoop == true) break; 
     binconv.text[a] = binconv.convBin(numBin); 
     numer++; 
     cout << "Acabou? (s/n): "; 
     cin >> acabou; 
     switch (acabou){ 
     case 'S': 
      breakLoop == true; 
      break; 
     case 's': 
      breakLoop == true; 
      break; 
     case 'n': 
      breakLoop == false; 
      break; 
     case 'N': 
      breakLoop == false; 
      break; 
     default: 
      breakLoop == false; 
      break;} 
    } 
    for (int b = 0; b < numer; b++){ 
     cout << binconv.text[b]; 
    } 
} 

//binconverts.h 
#pragma once 
#include "rick_math.h" 

class BINCONV{ 
public: 
    int convBin(int); 
    int setText(); 
    char text[54]; 
}binconv; 

BINCONV::convBin(int n){ 
    int decimal(0), i(0), rem; 
    while (n != 0) 
    { 
     rem = n % 10; 
     n /= 10; 
     decimal += rem * maths.poten(2,i); 
     ++i; 
    } 
    return decimal + 63;} 
+0

в вашей программе, которую вы используете з/п, но выход использует y/n. Пожалуйста, исправьте правильный путь. Спасибо. – Igor

+0

Я удивлен, что он не показывал вам это сообщение 54 раза с 'breakLoop == false;' и другие выражения, подобные этому в вашем блоке переключателя, не являются назначением, а сравниваются. Я думаю, вам нужно 'breakLoop = false' и так далее ... –

+0

BTW, используя' std :: toupper' или 'std :: tolower', уменьшит случаи' switch' на 50%. Примените функцию для преобразования символа в верхний или нижний регистр перед сравнением. –

ответ

0

Это должно улучшить формат и funktionality вашего кода

int main(){ 
    using namespace std; 
    int numBin; 
    char acabou; 
    bool breakLoop = false; 
    int numer = 0; 
    cout << "Digite um numero binario: "; 
    cin >> numBin; 
    cout << "Acabou? (s/n): "; 
    for (int a = 0; a < 54; a++){ 
     if (breakLoop == true) break; 
     binconv.text[a] = binconv.convBin(numBin); 
     numer++; 
     cin >> acabou; 
     if (acabou="s" || acabou="S"){ 
      breakLoop = true; 
     }else { 
      breakLoop = false; 
     } 
     for (int b = 0; b < numer; b++){ 
      cout << binconv.text[b]; 
     } 
    } 
} 
+0

Вы понимаете, что используете цикл в другом цикле, поэтому 'if (breakLoop == true) break;' работает только для внутреннего цикла, и сообщение будет отображаться 54 раза независимо от того, что пользователь выбирает. –

+0

теперь он должен работать. Я забыл поставить 'cout <<" Acabou? (S/n): ";" из цикла for – Snelfie

+1

Какова цель внешнего цикла 'for'? –

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