我调用函数但它没有打印任何单词

时间:2013-04-28 18:20:41

标签: c++

我正在写一个c ++代码 在这段代码中,我首先调用函数GetOption(),但它看起来没什么 任何人都可以帮助我吗? 其他功能有其他用途,但我不确定它是否会影响它。因此我将它全部粘贴!
以下是我的代码:

#include<iostream>
#include<iomanip>
#include<fstream>
#include<boost/regex.hpp>
#include"ContactRec.h"
using namespace std;
using namespace boost;
int GetOption();
int main(){GetOption();}
ContactRec GetContactInfo()
{
    ContactRec id;
    ofstream myoutfile("directory.txt",ios::app); 
    regex reg_email("^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$");
    regex reg_tel("^\\(?(\\d{3})\\)?-?(\\d{3})-(\\d{4})$"); 

        cout<<"enter your name."<<endl;
        cin.ignore(1024,'\n');
        getline(cin,id.Name);

        cout<<"enter your email."<<endl;
        cin>>id.Email;
        while (regex_match(id.Email,reg_email)==0)
        {
            cout<<"data wrong!!!!!!"<<endl;
            cin>>id.Email;
        }
        cout<<"enter your telephone numbers. EX:012-111-1111"<<endl;
        cin>>id.Phone;
        while(regex_match(id.Phone,reg_tel)==0)
        {
            cout<<"data wrong!"<<endl;
            cin>>id.Phone;
        }
        cout<<"Please enter the type(0)Family,(1)Friend,(2)Other"<<endl;
        int p;
        cin>>p;
        id.Type=(ContactType)p;
        myoutfile<<setiosflags(ios::left)<<setw(30)<<id.Name;
        myoutfile<<setiosflags(ios::left)<<setw(30)<<id.Email;
        myoutfile<<setiosflags(ios::left)<<setw(30)<<id.Phone;
        myoutfile<<setiosflags(ios::left)<<setw(30)<<id.Type<<endl;
        myoutfile.close();
    return id;
}
void PrintContactInfo(int type)
{   
    ContactRec person;

        ifstream myinfile;
        myinfile.open("directory.txt",ios::in);
        cout<<setiosflags(ios::left)<<setw(30)<<"name";
        cout<<setiosflags(ios::left)<<setw(30)<<"email";
        cout<<setiosflags(ios::left)<<setw(30)<<"telephone";
        cout<<setiosflags(ios::left)<<setw(30)<<"type"<<endl;

    string temp;
    if (type==-1)
    {
        while (myinfile)
        {
            getline(myinfile,temp);
            cout<<temp<<endl;

        }
    }
    else if(type==0)
    {
        while (myinfile)
        {
            getline(myinfile,temp);
            if (temp[70]=='0')
                cout<<temp<<endl;

        }
    }
    else if(type==1)
    {
        while (myinfile)
        {
            getline(myinfile,temp);
            if (temp[70]=='1') 
                cout<<temp<<endl;

        }
    }   
    myinfile.close();
}
int GetOption()
{
    int number=0;
    while(number!=5)
    {
        cout<<"(1)Add a new record"<<endl;
        cout<<"(2)Display the all contacts."<<endl;
        cout<<"(3)Display the contacts of family. "<<endl;
        cout<<"(4)Display the contacts of friends."<<endl;
        cout<<"(5)Exit."<<endl;
        cin>>number;
        if (number==1)
        GetContactInfo();
        if (number==2)
        PrintContactInfo(-1);
        if (number==3)
        PrintContactInfo(0);
        if (number==4)
        PrintContactInfo(1);

    }
}

以下是ContactRec.h

#include <string>
#include"ContactType.h"
using namespace std;
struct ContactRec
    {
    string Name;
    string Phone;
    string Email;
    ContactType Type;
};
ostream& operator<<(ostream& out,const ContactRec id)
{
    out<<id.Name;
    out<<id.Email;
    out<<id.Phone;
    out<<id.Type;
 }

以下是ContactType.h

enum ContactType{Family,Friend,Other};

4 个答案:

答案 0 :(得分:1)

我看不出代码有什么问题,乍一看我们希望看到你的“菜单”被打印出来。所以这里的诀窍可能是提出一些诊断性的想法。

首先,调试器。你说调试器没有显示错误?但它实际上去了哪些线?你可以单步执行代码吗?你看到它进入getOption()吗?你看到它进入你的循环吗?看它执行第一个cout&lt;&lt;声明?我的猜测不是,不是我能看出原因。

第二次添加一些打印语句。将您的主要内容更改为:

 int main(){
     cout << "hello" << endl;
     // GetOption();  <== removed
     cout << "goodbye" << endl;
 }

这里的想法是从一定必须起作用的东西开始。如果这不起作用,则问题就在于您的环境。你是否将输出重定向到某个地方?如果确实有效,请取消注释GetOption()调用,现在会发生什么?希望你能通过做这样的事情获得一些线索。

确实有时候把所有东西都取出来的伎俩,从有用的东西开始(例如你好世界)并逐个添加你的代码,直到找到什么破坏。在这里,或许你所包含的东西是破坏事物(根据托马斯的建议)。

答案 1 :(得分:0)

试试这个

void GetOption()
{
    int number;

    do
    {
        cout<<"(1)Add a new record"<<endl;
        cout<<"(2)Display the all contacts."<<endl;
        cout<<"(3)Display the contacts of family. "<<endl;
        cout<<"(4)Display the contacts of friends."<<endl;
        cout<<"(5)Exit."<<endl;
        cin>>number;
        if (number==1)
        GetContactInfo();
        if (number==2)
        PrintContactInfo(-1);
        if (number==3)
        PrintContactInfo(0);
        if (number==4)
        PrintContactInfo(1);

    }while(number!=5);
}

答案 2 :(得分:0)

此代码实际上是work(在明显修复并删除了您未提供的代码的引用之后)并打印了它应该打印的内容。
问题是cin没有被检查无效输入,因此如果您输入类似'abc'而不是数字例程将循环永远打印相同的提示。

答案 3 :(得分:0)

由于您使用int作为函数GetOption()的数据类型,因此必须返回某些内容,或者您​​可以将数据类型更改为无效。希望它有所帮助!