标题:很诡异的现象----const引用问题
只看楼主
yijing21
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-11-7
 问题点数:0 回复次数:3 
很诡异的现象----const引用问题
void Information::save_file()
{
    ofstream out;
    out.open("stu.txt",ios::out | ios::app);
    student stu;
    while(cin)
    {
        cout<<"\n请输入8位学号:";
        cin>>stu.num;
    
        if(!cin)
            break;
        string str=repeat(stu.num);
        vc.push_back(str);
        out<<str<<"\t";
                  ............
                  ............
}

string Information::repeat(const string &str)
{
    ifstream in;
    in.open("stu.txt",ios::in);
    while(in)
    {
        student stu;
        in>>stu.num>>stu.name>>stu.score[0]>>stu.score[1]>>stu.score[2];
        vc.push_back(stu.num);
    }
    

    string m_str=str;
    
    for(vector<string>::size_type i=0;i!=vc.size()-1;++i)
        {
            if([bo]m_str[/bo]==vc[i])
            {
                i=vc.size()-1;
                cout<<"\n重复输入:";
                cout<<"\n请输入8位学号:";
                cin>>m_str;
                repeat(m_str);
            }
        }
    
    return m_str;
}

问题在repeat函数。
这是一个判别是否重复输入的问题  注意for语句里的==判断的句子  用m_str的话  程序可正常运行遇到重复输入的字符创可以提示  再次输入不重复的就接收  但是如果[bo]m_str[/bo]用[bo]str[/bo]也就是传进来的常量的话程序运行时如果先遇到重复的字符串会提示,再输入不重复的字符串 它也提示重复  想了好久不知道这里用const引用去比较为什么会出现这种现象?
搜索更多相关主题的帖子: stu const str ios 
2008-04-19 11:36
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
模块设计的原则是高内聚低耦合....看的好像有点乱..你可以调整下结构

学习需要安静。。海盗要重新来过。。
2008-04-19 11:59
yijing21
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-11-7
得分:0 
楼上是指改成if(vc[i]==str)这样问题是一样的  也是不行  高内聚低耦合什么意思啊  ?
2008-04-19 12:54
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
我没理解你意思(看看我的有没有问题)
#include<vector>
#include<string>
#include<fstream>
#include<iostream>
using namespace std;
namespace demo{
class  Information
{
private :
   vector<string> vc;
   class student
    {
        public:
        string num;
        string name;
        float  score[3];
    };
public:
      void save_file();
      string repeat(const string &str);
};
void Information::save_file()
{
    ofstream out;
    out.open("stu.txt",ios::out | ios::app);
    student stu;
    while(cin)
    {
        cout<<"\n请输入8位学号:";
        cin>>stu.num;
   
        if(!cin)
            break;
        string str=repeat(stu.num);
        vc.push_back(str);
        out<<str<<"\t";
   }
}

string Information::repeat(const string &str)
{
    ifstream in;
    in.open("stu.txt",ios::in);
    while(in)
    {
        student stu;
        in>>stu.num>>stu.name>>stu.score[0]>>stu.score[1]>>stu.score[2];
        vc.push_back(stu.num);
    }
   

    string m_str=str;
   
    for(vector<string>::size_type i=0;i!=vc.size()-1;++i)
        {
            if(m_str==vc[i])
            {
                i=vc.size()-1;
                cout<<"\n重复输入:";
                cout<<"\n请输入8位学号:";
                cin>>m_str;
                repeat(m_str);
            }
        }
   
    return m_str;
}
}
int main()
{
    demo::Information  inf;
    inf.save_file();
    return 0;
}

学习需要安静。。海盗要重新来过。。
2008-04-19 13:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-209905-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013458 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved