回 帖 发 新 帖 刷新版面

主题:怎么输出的是地址。。。

#include<iostream>
using namespace std;
struct Student
{
    int num;
    char name[10];
};
int main()
{    
    int i,n,*b=NULL;
    char *c=new char[1025];
    //char c[3];
    Student *stu=NULL;
    while(1)
    {
        gets(c);
        if(strcmp(c,"S")==0)
        {
            stu=new Student;
            cin>>stu->num>>stu->name;
        }
        else if(strcmp(c,"D A")==0)
        {
            if(b)
            {    
                for(i=0;i<n;i++)
                cout<<b[i]<<" ";
                cout<<endl;
                delete b;
                b=NULL;
            }
            else
                cout<<"该指针释放失败"<<endl;
        }
        else if(strcmp(c,"D S")==0)
        {
            if(stu)        
            {    
                cout<<stu->num<<" "<<stu->name <<endl;
                delete stu;
                stu=NULL;
            }
            else
                cout<<"该指针释放失败"<<endl;
        }
        else if(strcmp(c,"Q")==0)
            break;
        else //B 5
        {
            n=c[2]-48;
            b=new int[n+1];
            for(i=0;i<n;i++)
                cin>>b[i];
        }
    }
    return 0;
}
其中else 接收:A空格6 B空格5 之类的。。。。
如上程序输入
  A 6
  1 2 3 4 5 6
  D A
后怎么不对的。输出的是5个地址的。高手指教。。。

回复列表 (共4个回复)

沙发

看的好晕,把题目说出来,

板凳

原因是这样的:
当输入1 2 3 4 5 6并按下回车键之后,
gets(c)将不会读入上次输入的回车,并把它当成一个空字符。
gets(s)函数与scanf("%s:",s)相似,但不完全相同,使用scanf("%s",s);函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到回车为止。需要注意的是,在执行过之前的读入操作后,gets函数会将行末的回车符当作一个空行读入,因此有必要时可以写两句。(注意最后这句话)


int main()
{    
    int i,n,*b=NULL;
    char *c=new char[1025];
    //char c[3];
    Student *stu=NULL;
    while(1)
    {
        gets(c);

        if(strcmp(c,"S")==0)
        {
            stu=new Student;
            cin>>stu->num>>stu->name;
        }
        else if(strcmp(c,"D A")==0)
        {
            if(b)
            {    
                for(i=0;i<n;i++)
                cout<<b[i]<<" ";
                cout<<endl;
                delete b;
                b=NULL;
            }
            else
                cout<<"该指针释放失败"<<endl;
        }
        else if(strcmp(c,"D S")==0)
        {
            if(stu)        
            {    
                cout<<stu->num<<" "<<stu->name <<endl;
                delete stu;
                stu=NULL;
            }
            else
                cout<<"该指针释放失败"<<endl;
        }
        else if(strcmp(c,"Q")==0)
            break;
        else //B 5
        {
            n=c[2]-48;
            b=new int[n+1];
            for(i=0;i<n;i++)
                cin>>b[i];
            gets(c);  //加上这句
        }
    }
    return 0;
}

3 楼

2L强,谢谢了。。。

4 楼

[quote]原因是这样的:
当输入1 2 3 4 5 6并按下回车键之后,
gets(c)将不会读入上次输入的回车,并把它当成一个空字符。
gets(s)函数与scanf("%s:",s)相似,但不完全相同,使用scanf("%s",s);函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到回车为止。需要注意的是,在执行过之前的读入操作后,gets函数会将行末的回车符当作一个空行读入,因此有必要时可以写两句。(注意最后这句话)


int main()
{    
    int i,n,*b=NULL;
    char *c=new char[1025];
    //char c[3];
    Student *stu=NULL;
    while(1)
    {
        gets(c);

        if(strcmp(c,"S")==0)
        {
            stu=new Student;
            cin>>stu->num>>stu->name;
        }
        else if(strcmp(c,"D A")==0)
        {
            if(b)
            {    
                for(i=0;i<n;i++)
                cout<<b[i]<<" ";
                cout<<endl;
                delete b;
                b=NULL;
            }
            else
                cout<<"该指针释放失败"<<endl;
        }
        else if(strcmp(c,"D S")==0)
        {
            if(stu)        
            {    
                cout<<stu->num<<" "<<stu->name <<endl;
                delete stu;
                stu=NULL;
            }
            else
                cout<<"该指针释放失败"<<endl;
        }
        else if(strcmp(c,"Q")==0)
            break;
        else //B 5
        {
            n=c[2]-48;
            b=new int[n+1];
            for(i=0;i<n;i++)
                cin>>b[i];
            gets(c);  //加上这句
        }
    }
    return 0;
}[/quote]
解决了。。理解了 

我来回复

您尚未登录,请登录后再回复。点此登录或注册