C++ C++;使用cin.getline()时程序挂起
我正在制作一个程序,记录不同的人,我试图从文件中读取。我使用一个以ifstream文件为参数的构造函数,然后尝试从该文件读入数据。我可以读取第一行,它只是一个int(每个人的唯一数字),但是当我试图转到下一行并获取它时,程序挂起。有人知道为什么吗C++ C++;使用cin.getline()时程序挂起,c++,getline,freeze,C++,Getline,Freeze,我正在制作一个程序,记录不同的人,我试图从文件中读取。我使用一个以ifstream文件为参数的构造函数,然后尝试从该文件读入数据。我可以读取第一行,它只是一个int(每个人的唯一数字),但是当我试图转到下一行并获取它时,程序挂起。有人知道为什么吗 #include <iostream> #include <fstream> #include <cstring> #include <cctype> #include <cstd
#include <iostream>
#include <fstream>
#include <cstring>
#include <cctype>
#include <cstdlib>
using namespace std;
const int MAXPERS = 100;
const int MAXTXT = 80;
const int DATELEN = 7;
class Person {
private:
int nr;
char* firstName;
char birthDate[DATELEN];
public:
Person() {
char fname[MAXTXT];
cout << "First name: "; cin.getline(fname, MAXTXT);
firstName = new char[strlen(fname) + 1];
strcpy(firstName, fname);
cout << "Birth date (DDMMYY): ";
cin >> birthDate; cin.ignore();
}
Person(int n, ifstream & in) {
nr = n;
char fname[MAXTXT];
cin.getline(fname, MAXTXT);
firstName = new char[strlen(fname) + 1];
strcpy(firstName, fname);
in >> birthDate;
}
void display() {
cout << "\nFirst name: " << firstName;
cout << "\nBorn: " << birthDate;
}
void writeToFile(ofstream & ut) {
ut << firstName << "\n" << birthDate;
}
};
void readFromFile();
Person* persons[MAXPERS + 1];
int lastUsed = 0;
int main() {
readFromFile();
persons[1]->display();
return 0;
}
void readFromFile() {
ifstream infile("ANSATTE.DAT");
if(infile) {
while(!infile.eof() && lastUsed < MAXPERS) {
int nr;
infile >> nr;
persons[++lastUsed] = new Person(nr, infile);
}
}
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
常量int最大值=100;
常量int MAXTXT=80;
常数int DATELEN=7;
班主任{
私人:
国际天然气公司;
char*名字;
出生日期[日期];
公众:
人(){
字符fname[MAXTXT];
cout生日;cin.ignore();
}
人员(int n、ifstream和in){
nr=n;
字符fname[MAXTXT];
cin.getline(fname,MAXTXT);
firstName=新字符[strlen(fname)+1];
strcpy(名字,fname);
在>>生日;
}
无效显示(){
如果fname
长度为一个或多个字符,并且如果fname长度为零个字符,则字符串(fname+1)
将是strlen(fname)-1
。它应该是strlen(fname)+1
strlen(fnavn+1)
也有同样的问题,在构造函数中应该是strlen(fnavn)+1
cin.getline(fnavn, MAXTXT);
因此,您的程序正在等待您键入内容。如果您想从文件中获取名称,则需要
in.getline(fnavn, MAXTXT);
^^ ifstream object
您还将遇到的问题。您需要添加
infile.ignore(std::numeric_limits<std::streamsize>::max(), '\n')
infle.ignore(std::numeric\u limits::max(),“\n”)
在while循环中的
infle>>nr;
之后。我尝试将其更改为strlen(fname)+1,但它仍然挂起。有什么线索吗?但现在它将名称放在生日字段中。为什么呢?这个来自文件的输入让我心碎。@AndreasBH我添加了发生这种情况的原因。您应该阅读附加的链接以获得详细解释。
infile.ignore(std::numeric_limits<std::streamsize>::max(), '\n')