c++:在修改c字符串数组时帮助纠正无休止循环
c++ : Help correcting endless loop while modifying c-string array
我有一项家庭作业,包括根据用户输入创建一个c字符串数组,修改数组的内容,使每隔一个字母都大写,并输出最终结果。我的代码目前陷入了无休止的循环中。我很难理解如何访问数组,然后修改它。(本周我们刚刚开始使用数组。)我已经在下面粘贴了我的代码。感谢您的帮助!
#include <iostream>
#include <cctype>
#include <string>
#include <cstring>
const int j = 1024;
using namespace std;
int main()
{
char letter;
char lineArray[j];
char modifyArray[j];
cout << "Hello! Please type a letter, word, " //user input prompt
<< "or phrase, followed by enter." << endl;
cin.getline(lineArray, j);
for(int i=0; i < 1024; i++)
{
letter = lineArray[i];
while (letter != 'n') //change and store letters
{
if (i%2 == 0)
letter = toupper(letter);
else if(i%2 != 0)
letter = tolower(letter);
}
modifyArray[i] = letter;
}
cout << modifyArray[j];
return 0;
}
在以下代码片段中
letter = lineArray[i];
while (letter != 'n') //change and store letters
{
if (i%2 == 0)
letter = toupper(letter);
else if(i%2 != 0)
letter = tolower(letter);
}
您正在基于letter
进行循环,但在循环内部,它不会以任何方式更改为'n'
。
此外,当使用getline
时,'n'
字符(换行符)不会被放入字符串中,因此与'n'
的比较毫无意义。相反,将for循环更改为以下内容(并删除while循环):
for(int i=0; i < strlen (lineArray) + 1; i++) // You need strlen + 1, because otherwise string terminating ' ' character wouldn't be copied over.
这样,您就可以精确地循环一个字符串的长度(假设in的长度永远不会超过1024个字符)
此外,您应该像这样打印数组:
cout << modifyArray;
因为在您的代码中,您要打印超出数组边界的第一个字符。
相关文章:
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 关于 SIGTSTP 错误和无休止的输入
- 宽藤会话更新无休止循环
- 为什么析构函数无休止地调用自己(导致堆栈溢出)?
- 在图像上覆盖文本的程序会产生无休止的字符串错误
- OpenSSL客户端陷入无休止的读取
- 无休止的 do while 循环C++代码
- 循环无休止地做
- 卡死胡同-无休止的循环,没有解决方案
- C++:如果输入不是整数,为什么这段代码会运行一个无休止的循环
- C++无休止的循环瓶颈
- 这无休止地循环是否有明显的原因
- C++ & SDL:SDL 事件无休止地重复
- 静态分析工具,用于检测由于类型提升而导致的无休止循环
- c++:在修改c字符串数组时帮助纠正无休止循环
- std::advanced()导致无休止的循环
- 避免无休止的虚拟查找
- 为什么我的函数无休止地循环
- 在无休止地循环cout时执行,忽略cin
- boost::asio系统的无休止循环:第一次连接后出现9个错误