2015-02-23 4 views
0

Условия тестирования: Visual Studio 2010 Ultimate.Если оператор печатает дополнительные значения

Надеется, что мой вопрос был достаточно ясен - моя цель состоит в том, чтобы иметь пользователь выбрать один вариант

1. Enter 1 for Chequing 
2. Enter 2 (or any number) for Savings 

так какой вариант пользователи выбирают, программа будет печатать «Account Type: Chequing [or] Savings»

Я удалось принять вход пользователя и получить половину того, что я пытался сделать. Моя проблема - это любой номер, который я выбираю, добавляется дополнительный номер, см. Рисунок.

http://imgur.com/FnFkQQ8

Картина из предыдущей сборки, я установил вопрос выбора, но дополнительное количество до сих пор печатается в поле Тип счета.

мой account.cpp (в том числе account.h):

int Account::WhichOne(int actype) 
{ 
    if (actype == 1) 
    { 
     cout << "Account Type: Chequing" << endl; 

    } 
    else 
     cout << "Account Type: Savings" << endl; 

    return actype; 

}; 

мой main.cpp

int main() 
{ 
    char firstName[255]; 
    char lastName[255]; 
    char sinNumber[255]; 
    double balance = 0; 
    int choice; 
    int checker; 
    int accountType = 0; 
    int transactions = 0; 



    //Retrieve client information 
    cout << "Please fill out the information below for registration:" << endl; 
    cout << "Enter first name:  "; 
    cin.getline(firstName, 255); 
    cout << "Enter last name:  "; 
    cin.getline(lastName, 255); 
    cout << "Enter SIN number:  "; 
    cin.getline(sinNumber, 255); 
    cout << "Enter initial balance: "; 
    cin >> balance; 
    cout << "Enter account type:\n  Chequing - 1\n  Savings - 2\n   Choice: "; 
    cin >> choice; 
    cout << "\nPlease wait..." << endl; 

    //Creating the account 
    Account account(firstName, lastName, sinNumber, balance, accountType, transactions); 
    double deposit; 
    double withdraw; 
    double amount; 
    double ammount; 
    cout << "Amount to deposit:  "; 
    cin >> amount; 
    deposit = account.DepositAmt(amount); 
    cout << "Your new balance is: " << deposit << endl; 
    cout << "Amount to withdraw: "; 
    cin >> ammount; 
    deposit = account.WithdrawAmt(ammount); 
    cout << "Your new balance is: " << deposit << endl; 
    accountType = account.WhichOne(choice); 
    cout << "" << accountType << endl; 
} 

Я действительно не знаю, что делать. Я уверен, что моя проблема с return actype, но независимо от того, какое возвращаемое значение я ставлю там, оно также печатается.

+1

Почему бы вам не использовать 'std :: string' вместо массивов символов, чтобы вы могли поддерживать любые длины? Также знайте, что с плавающей точкой не на 100% точнее и не подходит для хранения валюты. –

+0

'cout <<" "<< accountType << endl;' Не будет ли это распечатывать номер снова? –

+0

Хороший пункт о струнах, исправит это. как для 'cout <<" "<< accountType << endl'' мне не понадобится, чтобы напечатать, на какую учетную запись повлияли? – Umeed

ответ

1

Вы делаете это (второй файл):

accountType = account.WhichOne(choice); 

И тогда вы делаете это (первый файл):

return actype; 

Но actype ваш аргумент, так это то, что получает вернулся и что печатается в конце концов командой cout << "" << accountType << endl;. Предыдущая печать, а именно Account Type: Chequing, выполняется внутри метода, как вы можете заметить в теле метода.

Я мог бы помочь вам исправить ваш код, проблема в том, что я не знаю, как вы хотите, чтобы ваш код был исправлен.

EDIT: Так как вы определяете элемент account и accountType находится в конструкторе, я полагаю, вы сохраните его в переменной-члена. Предположим, что переменная называется также accountType. Я изменю вашу WhichOne функции следующим образом (я меняю имя на более значимые один):

std::String Account::getAccountType() 
{ 
    if (accountType == 1) 
    { 
    return "Account Type: Chequing"; 
    } 
    else 
    return "Account Type: Savings"; 
    } 
} 

, а затем заменить эти строки кода

accountType = account.WhichOne(choice); 
cout << "" << accountType << endl; 

с этим один

cout << account.getAccountType() << endl; 
+0

все, что я хочу, - это возможность распечатывать выбор пользователя для chequing или сбережений (при выборе экономии с любым номером, а только для выбора номера по номеру 1). Я просто пытаюсь напомнить пользователю, какая учетная запись, на которую они выбрали, была затронута. – Umeed

+1

Я редактировал вопрос, добавляя к нему решение. Если вы не сохраняете тип accountType в качестве переменной-члена, вы можете также включить его в качестве аргумента в этот метод. – nikaltipar

+0

Так почему же строка лучше здесь? и теперь я понимаю, почему был напечатан дополнительный номер, я исходил из предположения, что, поскольку он работал таким же образом для 'deposit = account.WithdrawAmt', что он будет работать для этой ситуации. Оба делают, если инструкции, но WithdrawAmt фактически возвращает мой оставшийся баланс. – Umeed

1

Как я могу понять это требование, следующий код должен работать:

счет.каст

string Account::WhichOne(int actype) 
    { 
     string type; 
     if (actype == 1) 
     { 
       cout << "Account Type: Chequing" << endl; 
       type="Chequing Account"; 

      } 
    else{ 
       cout << "Account Type: Savings" << endl; 
       type= "Saving Account"; 
      } 

return type; 

    }; 

main.cpp

 string accountType; 

     accountType = account.WhichOne(choice); 
     cout << "" << accountType << endl; 
0
void Account::WhichOne(int actype) 
{ 
    if (actype == 1) 
    { 
     cout << "Account Type: Chequing" << endl; 

    } 
    else 
     cout << "Account Type: Savings" << endl; 

} 

проблема заключается в том, что вы возвращаете значение INT и печатается в последней строке кода, сделать его недействительным, если вы печать внутри функции или просто вернуть строку, содержащую сообщение, если вы хотите напечатать сообщение где-то еще

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