因此我意识到这在技术上是一个重复的问题,所以我为此道歉,但是我的代码表现得很奇怪而且我很茫然。我不是程序员,我甚至没有上课,但是有人问我在任务上提供一些帮助,我回过头来为课程编写的旧程序,并决定玩游戏,看看我是否能让它们更有效率。所以,这里是我有错误的代码片段,我会发布整个代码,但它很长,98%的它与我的问题无关...
class Exam {
//properties
private:
char m_fileName[50];
public:
//Default Constructor
Exam() {
m_fileName;
}
//functions
void setFile(){
cout << "Enter the name of the Exam: ";
cin >> m_fileName;
for(unsigned int l = 0; l < 50; l++)
{
m_fileName[l] = toupper(m_fileName[l]);
}
}
char* getFile(){
return m_fileName;
}
};
在main
中,我创建了一个名为Exam
的{{1}}个对象数组。它转到带有switch语句的菜单,等等等等。当我选择创建一个新的测试文件时,它会转到以下代码:
testFile[50]
所以,这是我似乎无法解决的问题。我希望能够键入测试文件,如“测试A”或“测试B”或其他任何内容,并在空白区域中读取char数组 case 3: {
testFile[f].setFile();
cin.ignore();
cout << endl << "Enter the amount of questions, Max. of 50: ";
cin >> numQuestions;
if (numQuestions > 50) {
throw -1;
}
ofstream write(testFile[f].getFile());
。我知道,通常这样做,你需要使用m_fileName
或其他形式,因为“cin”在它到达空白区域时会停止阅读。好吧,字面意思是除了它之外的任何其他形式的输入,抛出:
3 [main] chrisjohnson_ip3 9684 cygwin_exception :: open_stackdumpfile:将堆栈跟踪转储到chrisjohnson_ip3.exe.stackdump
直接在“输入考试名称:”之后,有时它会在要求输入问题数量时抛出它(不让我输入任何内容)。我确定这是一个非常愚蠢的东西,我很想念,但我一直试图想出这几个小时,所以我想我会打电话给大枪。如果您需要我发布更多代码或更具体的内容,请告诉我。感谢您的时间和知识:)
答案 0 :(得分:0)
我建议您使用调试器来逐步执行代码。它使得查找错误变得更加容易。
但是,我可以在您的代码中指出一些错误:
首先关闭,什么是 m_filename 在您的构造函数中独立完成?
Exam() {
m_fileName;
}
如果你想拥有一个空构造函数,那么你可以执行以下操作(这只是我的方式):
Exam() {
;
}
其次,您在类函数中滥用 m_fileName 。当您在行中接受输入时,将此char声明为一个可容纳50个char值的数组:
cin >> m_fileName;
您没有指定分配给my_fileName数组的50个内存块中的哪一个获取输入的char。仅这一点就应该导致编译错误。
另一件事:你的代码的这一部分似乎都是错误的。我不确定你在这里要做什么。也许您可以在评论栏中解释它或更新您的问题帖子。
cout << "Enter the name of the Exam: ";
cin >> m_fileName;
for(unsigned int l = 0; l < 50; l++)
{
m_fileName[l] = toupper(m_fileName[l]);
}
我不确定setFile()应该做什么,所以我不能为解决方案提供任何固定代码。
另外,就像一些建议一样,您也可以将my_fileName的数据类型更改为字符串数据类型,因为我假设输入的考试名称不仅仅是1个字符。