yijing21 发表于 2008-4-19 11:36

很诡异的现象----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][color=Magenta]m_str[/color][/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][color=Magenta]m_str[/color][/bo]用[bo][color=Red]str[/color][/bo]也就是传进来的常量的话程序运行时如果先遇到重复的字符串会提示,再输入不重复的字符串 它也提示重复  想了好久不知道这里用const引用去比较为什么会出现这种现象?

sunkaidong 发表于 2008-4-19 11:59

模块设计的原则是高内聚低耦合....看的好像有点乱..你可以调整下结构

yijing21 发表于 2008-4-19 12:54

楼上是指改成if(vc[i]==str)这样问题是一样的  也是不行  高内聚低耦合什么意思啊  ?

sunkaidong 发表于 2008-4-19 13:20

我没理解你意思(看看我的有没有问题)

#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;
}

页: [1]

编程论坛