我很难理解我的代码的运行时错误。这是我的班级作业,我认为很容易,但发生了一些奇怪的事情。我在下面发布了我的代码。
这个作业的提示是创建一个程序,要求用户输入一些单词,然后它应该输出有多少个单词。我有一个朋友运行了该程序并且它有效,但是,每当我尝试运行它时,我都会收到此运行时错误。
[https://i.stack.imgur.com/Vhqbe.jpg https://i.stack.imgur.com/Vhqbe.jpg ]
请记住,我是 C++ 和一般编程的初学者,因此我无法理解非常技术性的答复。预先感谢您的帮助。
#include <string>
#include <iostream>
#include <cstring>
using namespace std;
int wordCounter(char *);
int main()
{
char *stringArray = nullptr;
stringArray = new char[120];
cout << "Please enter a saying or a phrase that has more than one word: " << endl;
cin.getline(stringArray, 120);
int words = wordCounter(stringArray);
cout << "Your statement contains " << words << " words." << endl;
system("pause");
return 0;
}
int wordCounter(char *stringTest)
{
char characterToTest;
int numberOfWords = 0;
for (int i=0; i < 120; i++)
{
characterToTest = *(stringTest + i);
if (isspace(characterToTest) && i != 120)
{
char characterToTestTemp = *(stringTest + (i + 1));
if (isalnum(characterToTestTemp))
{
numberOfWords++;
}
}
}
return numberOfWords;
}
isspace
而朋友却出人意料地难以正确称呼。具体来说,你不能安全地通过char
对他们来说,因为char
正如错误消息所示,值可以为负值,这是不允许的。
你应该投射到unsigned char
为了安全起见:
isspace(static_cast<unsigned char>(characterToTest))
这不是这里的主要问题,您需要首先修复溢出,但这是您收到错误消息的部分原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)