[英]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 '\0' character wouldn't be copied over.
這樣,您將精確循環字符串的長度(假設 in 永遠不會超過 1024 個字符。
此外,您應該像這樣打印數組:
cout << modifyArray;
因為在您的代碼中,您正在打印超出數組范圍的第一個字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.