2013-04-03 3 views
1

Нужна программа для закрытия, если введен Q или q.Сделать программу закрытия «Q»

Но на данный момент он не закрывается и отображает номер телефона и закрывается.

Если вы можете мне помочь, пожалуйста, сообщите об этом!

В настоящее время у меня есть этот код, и он работает, но цикл while не работает, поскольку он не останавливается, если возвращается -5.

#include <iostream> 
#include <string> 
#include <iomanip> 

using namespace std; 

int readDial (char &d1, char &d2, char &d3, char &d4, char &d5, char &d6, char &d7, char &d8); 

char toDigit (char &d); 

void acknowledgeCall (char d1, char d2, char d3, char d4, char d5, char d6, char d7, char d8); 

int main() 
{ 
    char d1, d2, d3, d4 , d5, d6, d7, d8; 

    int returnV = false; 

    while (returnV != -5) 
    { 
     returnV = readDial (d1,d2,d3,d4,d5,d6,d7,d8); 
     switch (returnV) 
     { 
     case -1: cout << "Error - An invalid Character was entered.\n"; 
     case -2: cout << "Error - Phone Number cannot begin with 0.\n"; 
     case -3: cout << "Error - Phone Number cannot begin with 555.\n"; 
     case -4: cout << "Error - Hyphen is not in the correct spot.\n"; 
     default: acknowledgeCall (d1, d2, d3,d4, d5,d6,d7,d8); 
     } 
    } 




    system("pause"); 
    return 0; 
} 

int readDial (char &d1, char &d2, char &d3, char &d4, char &d5, char &d6, char &d7, char &d8) 
{ 
    int returnV; 

    cout << " Enter The Phone Number (Q to Quit): "; 
    cin >> d1; 
    if(d1 == 'Q' || d1 == 'q') 
    return -5; 
    cin >> d2 >> d3 >> d4 >> d5 >> d6 >> d7 >> d8; 
    returnV = toDigit(d1); 

    if (returnV == -1) 
     return returnV; 
    returnV = toDigit(d2); 

    if (returnV == -1) 
     return returnV; 
    returnV = toDigit(d3); 

    if(d4 != '-') 
     return -4; 

    returnV = toDigit(d5); 


    if (returnV == -1) 
     return returnV; 
    returnV = toDigit(d6); 

    if (returnV == -1) 
     return returnV; 
    returnV = toDigit(d7); 

    if (returnV == -1) 
     return returnV; 
    returnV = toDigit(d8); 


    if (returnV == -1) 
     return returnV; 
    if (d1 == '0') 
     return -2; 
    if (d1 == '5' && d2 == '5' && d3 == '5') 
     return -3; 
    return 0; 
} 

char toDigit (char &d) 
{ 
    d = toupper (d); 
    switch (d) 
    { 
    case '0': case '1' : case '2' : case '3': case '4' : case '5' : case '6' : case '7' : case '8' : case '9': 
     break ; 

    case 'A' : case 'B' : case 'C': 
     d = '2'; 
     break; 

    case 'D' : case 'E' : case 'F' : 
     d = '3'; 
     break ; 

    case 'G' : case 'H' : case 'I' : 
     d = '4'; 
     break ; 

    case 'J' : case 'K' : case 'L' : 
     d = '5'; 
     break ; 

    case 'M' : case 'N' : case 'O' : 
     d = '6'; 
     break ; 

    case 'P' : case 'Q' : case 'R' : case 'S' : 
     d = '7' ; 
     break ; 

    case 'T' : case 'U' : case 'V' : 
     d = '8' ; 
     break ; 

    case 'W' : case 'X' : case 'Y' : case 'Z' : 
     d = '9' ; 
     break; 

    default: return -1; 
    } 
} 

void acknowledgeCall (char d1, char d2, char d3, char d4, char d5, char d6, char d7, char d8) 
{ 

    cout << " Phone Number Dialed: " << d1 << d2 << d3 << d4 << d5 << d6 << d7 <<d8 << " \n\n "; 

} 
+1

вы можете использовать разрывы в этом операторе switch – Kupto

+0

Вы никогда не будете обрабатывать новую строку, которую 'cin' возвращает, когда пользователь нажимает Enter. – Barmar

ответ

0

У вас есть основная логическая проблема в вашем основном().

Проверьте switch:case логики и добавить необходимую обработку для ввода Q/Q

0

Вы использовали default случае в случае переключения, что означает, что этот случай разработан для всех других значений, чем те, упомянутых выше , Поэтому, если вы не укажете для returnV=5, будет выполнен случай по умолчанию. поэтому добавьте это заявление до случая по умолчанию:

case -5: exit(1) 

Это приведет к выходу программы, если returnV равно -5. И, используя оператор break между случаями в коммутаторе, приводит к тому, что элемент управления покидает коммутационный футляр после выполнения одного случая. Если вы не используете, все дела после нужного оригинального дела выполняются. Итак, добавьте break; в конце каждого случая

+0

Спасибо! Я просто не мог думать об этом .. lol –

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