2013-03-28 2 views
-1

Следующая программа предназначена для того, чтобы получить номер учетной записи, вводимый пользователем, используя класс, который имеет предопределенный формат: первые два являются алфавитами, следующие три цифры являются кодом ветвления, а остальные десять цифр некоторые случайные числа. Если введенный ввод не относится к формату, он должен попросить пользователя ввести его снова. Я попытался реализовать его следующим образом. Если я даю правильный ввод при первой попытке, он отлично работает, но когда я проверяю коды частей else, возникает проблема с возвратом значения «acno» в «tac». Может кто-нибудь исправить ошибку в коде Pls .... Спасибо ....Функция, возвращающая строку в C++

#include<iostream> 
#include<string> 
using namespace std; 

class saving 
{ 
    string acc_no,tac; 
    string br_code; 
    public: 
    void input(); 
} sav; 

string chkno(string acno) 
{ 
    string cc,bc,no,ano; 
    int i,len,a=1,b=1,c=1; 
    for(len=0; acno[len]!='\0'; len++); 
    if(len!=15) 
    { 
     cout<<"Account No. is Invalid.Please enter again."; 
     cout<<"\nAccount No : "; cin>>ano; 
     chkno(ano); 
    } 
    else 
    { 
     cc=acno.substr(0,2); bc=acno.substr(2,3); no=acno.substr(5,10); 
     for(i=0; i<2; i++) 
     { 
      if(!isalpha(cc[i])) 
      { 
       a=0; break; 
      } 
     } 
     for(i=0; i<3; i++) 
     { 
      if(!isdigit(bc[i])) 
      { 
       b=0; break; 
      } 
     } 
     for(i=0; i<10; i++) 
     { 
      if(!isdigit(no[i])) 
      { 
       c=0; break; 
      } 
     } 
     if(a==1&&b==1&&c==1) 
     { 
      cout<<"\nValid - Account no : "<<acno; 
      return acno; 
     } 
     else 
     { 
      cout<<"Incorrect format.Please enter again"; 
      cout<<"\nAccount No : "; cin>>ano; 
      chkno(ano); 
     } 
    } 
} 

void saving::input() 
{ 
    cout<<"Account No : "; 
    cin>>acc_no; 
    tac=chkno(acc_no); 
    acc_no=tac; 
    cout<<"\nAcc.No :"<<acc_no; 
    br_code=acc_no.substr(2,3); 
    cout<<"\nBranch Code is :"<<br_code; 
}sav; 

int main() 
{ 
sav.input(); return 0; 
} 
+1

Можем ли мы увидеть ошибку? – Shoe

+1

В вашей функции chkno есть несколько путей, которые никогда не попадают в оператор return. – Eelke

ответ

0

Это неправильно

for(len=0; acno[len]!='\0'; len++); 

C++ строки не как строки C, они не имеют «\ 0 '. Если вы хотите знать, как долго строка C++ это сделать это

len = acno.size(); 

Кроме того, если у вас есть ошибки вы называете chkno снова что немного странно, но на самом деле не так. Но то, что вы делаете неправильно, никогда не возвращает значение со второго вызова chkno. Что вы должны сделать это

cout<<"Incorrect format.Please enter again"; 
cout<<"\nAccount No : "; cin>>ano; 
return chkno(ano); 

Посмотрите, как я добавил возврат.

Для верхней оценки этого упражнения, я думаю, вы должны изменить свой код. chkno должна быть функцией, которая просто проверяет номер учетной записи (это то, что она называется в конце концов). Поэтому вы должны вернуть ему логическое значение, true для false, в зависимости от того, правильный ли номер учетной записи или нет. Затем вы должны поместить ввод/повторное включение цикла номера в главном. Нравится

bool chkno(string acno) 
{ 
    ... 
} 

int main() 
{ 
    cout<<"Account No : "; 
    cin>>acc_no; 
    while (!chkno(acc_no)) 
    { 
     cout<<"Incorrect format.Please enter again"; 
     cout<<"\nAccount No : "; 
     cin>>acc_no; 
    } 
    ... 
} 

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

+1

Не странно, что он снова называет «chkno» - он сказал, что хочет повторно вызвать пользователя, когда проверка не удалась. Но вы правы, что проблема в том, что он не возвращает результат. – Barmar

+0

Дизайн необычный. Обычно chkno возвращает логическое значение (это просто проверка числа справа), и цикл запроса должен быть в основном. – john

+0

Спасибо большое !!! Добавление возврата заставило программу работать отлично ..... – User111213

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