我已查看here,here和here。我没有使用cin.ignore()。我对此代码有两个问题,但将此限制为一个。 unsigned int int long“sID”应该包含“020961797”,但只包含“20961797”。
bool GPA::importStudents(string mapFileName, string setFileName)
{
long long int sID;
string sName;
string sAddress;
string sPhone;
stringstream ss;
string line;
int mline_count = 0;
int sline_count = 0;
double x;
int y;
ifstream map_file;
ifstream set_file;
map_file.open(mapFileName);
set_file.open(setFileName);
if (map_file.is_open()){
for (int i = 0; i < mline_count/4; i++){
getline(map_file, line);
ss << line;
ss >> sID;
getline(map_file, line);
ss << line;
ss >> sName;
getline(map_file, line);
ss << line;
ss >> sAddress;
getline(map_file, line);
ss << line;
ss >> sPhone;
StudentInterface * SI = new Student(sID, sName, sAddress, sPhone);
my_map.insert(std::pair<unsigned long long int, StudentInterface*>(sID, SI));
//my_map.emplace(Student(sID, sName, sAddress, sPhone));
}
}
}
以下是应该从中读取数据的文件的第一部分:
020961797
Joshua Cooper
0509 McCrooke Avenue,Columbus,California 52826
552-534-8671
答案 0 :(得分:1)
sID实际上包含1001111111101101000000101b
,因为它有数字表示。使用默认格式打印时,它确实呈现为20961797
。如果您需要,可以通过操纵器0
和020961797
强制引导setw(9)
获得setfill(' ')
。
除非您必须对该字段值执行算术运算,否则将其作为字符串处理可能更合适。
答案 1 :(得分:0)
您无法使用int
存储前导零,您必须将sID存储为string
,然后在必要时将其转换为数字。可以说ID是一个标识符而不是一个数字,你不应该真的需要用它做任何数学运算,所以string
是一个理想的解决方案
string sID = "020961797";
//For some reason you need the ID as a number
int idToInt = atoi(sID.c_str());
请注意,当你转换它时,int不会保持前导零
答案 2 :(得分:0)
数字类型包含数字,而不是数字的表示。 “十”,“10”,“010”,“我拥有的手指的数量”和“IIIIIIIIII”都是相同数字的不同表示。如果要保留字符,请使用字符串。