Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在类中的字符数组中使用空格_C++_Arrays_Class_Whitespace - Fatal编程技术网

C++ 在类中的字符数组中使用空格

C++ 在类中的字符数组中使用空格,c++,arrays,class,whitespace,C++,Arrays,Class,Whitespace,所以我意识到这在技术上是一个重复的问题,所以我为此道歉,但是我的代码表现得很奇怪,我不知所措。我不是程序员,我甚至不上课,但有人要求我在一项作业上给予帮助,我正回顾我为课程编写的旧程序,决定四处玩玩,看看是否能让它们更有效率。所以,这里是我有错误的代码片段,我会发布整个代码,但它很长,其中98%与我的问题无关 class Exam { //properties private: char m_fileName[50]; public: //Default Constructo

所以我意识到这在技术上是一个重复的问题,所以我为此道歉,但是我的代码表现得很奇怪,我不知所措。我不是程序员,我甚至不上课,但有人要求我在一项作业上给予帮助,我正回顾我为课程编写的旧程序,决定四处玩玩,看看是否能让它们更有效率。所以,这里是我有错误的代码片段,我会发布整个代码,但它很长,其中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;
    }
};
所以,这是一个我似乎无法解决的问题。我希望能够键入测试文件,如“测试A”或“测试B”或其他什么,并在空白处读取字符数组
m_fileName
。我知道,要做到这一点,通常需要使用
getline
或其他形式,因为“cin”在出现空白时会停止读取。实际上,任何其他形式的输入,除了它是怎样的,抛出:

3[main]chrisjohnson_ip3 9684 cygwin_异常::打开_stackdumpfile:将堆栈跟踪转储到chrisjohnson_ip3.exe.stackdump


直接在“输入考试名称:”之后,其他时候,当它要求输入问题数量时(不允许我输入任何内容),它会抛出它。我肯定我错过了一些非常愚蠢的事情,但我已经花了好几个小时试图弄清楚这一点,所以我想我会召集大人物。如果您需要我发布更多的代码或更具体的东西,请让我知道。感谢您的时间和知识:)

我建议您使用调试器逐步完成代码。这使得查找bug变得更加容易

但是,我可以指出代码中的一些错误:

首先关闭,m_filename作为独立的构造函数在构造函数中做什么

   Exam() {
      m_fileName;
   }
如果您想要一个空构造函数,那么您可以执行以下操作(这只是我的方式):


其次,在类函数中滥用了m_文件名。当您将此字符声明为一个可容纳50个字符值的数组时,当您接受行中的输入时:

   cin >> m_fileName;
您没有指定分配给my_fileName数组的50个内存块中的哪一个获得输入的字符。这本身就应该导致编译错误


另一件事:您的整个代码部分似乎都有缺陷。我不知道你在这里想干什么。也许你可以在评论框中解释,或者更新你的问题帖子

   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]);
   }
cout>m_文件名;
for(无符号整数l=0;l<50;l++)
{
m_fileName[l]=toupper(m_fileName[l]);
}
我不确定setFile()到底应该做什么,所以我无法为解决方案提供任何固定的代码



此外,正如一些建议,您还可以将my_文件名的数据类型更改为字符串数据类型,因为我假设输入的考试名称长度不只是1个字符。

解决此类问题的正确工具是调试器。在询问堆栈溢出之前,应该逐行检查代码。如需更多帮助,请阅读。至少,您应该[编辑]您的问题,以包括一个重现您的问题的示例,以及您在调试器中所做的观察。
char m_fileName[50]
是此代码中所有邪恶的根源。将其替换为
std::string m_fileName并修复所有编译错误,直到它再次运行。
Exam(){m_fileName;}
Huh???@Yousaf,为什么不呢?感谢调试链接,我会查看它……我更愿意学习如何修复我自己的问题,但我的知识已经到了尽头,所以我想在这里提问;)在我阅读并尝试这个过程之后,如果我还有问题,我会编辑我的帖子。再次感谢您的回复。因此,该程序的最终目标是允许用户创建一组测试文件。当他们创建一个新文件时,他们可以选择创建一定数量的问题,这些问题可以是TF或多项选择。创建所有问题后,它们将返回到主菜单,在主菜单中可以显示所有创建的测试、加载测试或显示测试。一切正常,我没有编译错误或任何东西(我正在使用NetBeans 8.0.2供参考)。但是,当使用“cin>>m_fileName;”时,我无法使用空格。我尝试过使用getline,我尝试过使用string而不是char…当我这样做时,我在尝试读取文件时遇到问题(例如,ifstream input(testFile[t-1].getFile());可以工作,但仅在使用cin>>m_fileName时),当我尝试对m_filename使用字符串而不是char时,我会遇到类型不匹配的错误。关于错误代码,您的最后一点评论只是要求用户为测试文件输入一个名称,然后我将其转换为所有大写,只是为了让人看起来更容易,并忽略用户的大小写输入。您尝试过使用getline()吗是否为字符值而不是字符串值?请参阅本文中的第一个示例,而不是执行
cin>>my_fileName
,尝试执行此操作:
getline(my_fileName,50)
   cin >> m_fileName;
   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]);
   }