Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 函数返回C+中的字符串+;_C++_String_Class_Function_Return - Fatal编程技术网

C++ 函数返回C+中的字符串+;

C++ 函数返回C+中的字符串+;,c++,string,class,function,return,C++,String,Class,Function,Return,下面的程序将使用预定义格式的类获取用户输入的帐号-前两位是字母表,后三位是分支代码,其余十位是一些随机数。如果输入的输入不符合格式,则应提示用户再次输入。我试着实现它如下。如果我在第一次尝试时给出正确的输入,它可以正常工作,但是当我检查其他部件代码时,将“acno”的值返回到“tac”时会出现问题。有人能纠正代码中的错误吗请…谢谢 #include<iostream> #include<string> using namespace std; class saving

下面的程序将使用预定义格式的类获取用户输入的帐号-前两位是字母表,后三位是分支代码,其余十位是一些随机数。如果输入的输入不符合格式,则应提示用户再次输入。我试着实现它如下。如果我在第一次尝试时给出正确的输入,它可以正常工作,但是当我检查其他部件代码时,将“acno”的值返回到“tac”时会出现问题。有人能纠正代码中的错误吗请…谢谢

#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;
}
#包括
#包括
使用名称空间std;
节课
{
字符串附件编号,tac;
字符串br_码;
公众:
无效输入();
}sav;
字符串chkno(字符串acno)
{
字符串cc、bc、no、ano;
int i,len,a=1,b=1,c=1;
for(len=0;acno[len]!='\0';len++);
如果(len!=15)
{
这是错误的

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函数有多条路径从未命中return语句。他调用chkno
再次——他说他想在验证失败时重新提示用户。但你是对的,问题是他没有返回结果。这种设计很不寻常。通常chkno会返回一个布尔值(只是正确地检查一个数字),并且提示循环应该在main中。非常感谢!!!添加return使程序运行得非常完美。。。。。
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;
    }
    ...
}