很诡异的现象----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引用去比较为什么会出现这种现象?
我没理解你意思(看看我的有没有问题)
#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]
