2013-03-28 2 views
-1

다음 프로그램은 미리 정의 된 형식 인 클래스를 사용하여 사용자가 입력 한 계좌 번호를 얻는 프로그램입니다. 처음 두 개는 알파벳이고 그 다음 세 자리는 분기 코드이며 나머지 10 자리는 일부 난수. 입력 된 형식이 형식이 아닌 경우 다시 입력하라는 메시지가 표시됩니다. 나는 다음과 같이 구현하려고했다. 첫 번째 시도에서 올바른 입력을 제공하면 제대로 작동하지만 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++ 문자열이 조금 이상하지만 실제로 잘못하지 않습니다 다시 chkno 전화에 오류가있을 때 또한이

len = acno.size(); 

을 얼마나 오래 알고 싶다면. 그러나 당신이 잘못한 것은 chkno에 대한 두 번째 호출의 값을 반환하지 않습니다. 당신이해야 할 일은 이것입니다.

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

내가 어떻게 답장을했는지보십시오.

이 실습의 최고 점수는 코드를 다시 디자인해야한다고 생각합니다. chkno은 계좌 번호를 확인하는 기능이어야합니다 (계정 번호가 결국 호출됩니다). 따라서 계정 번호가 올바른지 여부에 따라 부울 값 (false)을 반환해야합니다. 그런 다음 enter/reenter를 메인에 넣어야합니다. 이와 같이

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는 boolean을 반환 할 것이고 (그냥 숫자를 검사하는 것입니다.) 프롬프트 루프는 main에 있어야합니다. – john

+0

고마워요 !!! 리턴을 추가하면 프로그램이 완벽하게 작동합니다 ..... – User111213

관련 문제