不能打印或访问c++中字符数组的最后一个字符



我试图将句子的单个字符(包括空格)存储在字符数组中,如"Do or die"但是每当我打印数组(char arr)时,它不会打印数组中的最后一个字符,即。"e"。

谁能告诉我为什么会这样?我是c++的初学者。

#include<iostream>
using namespace std;
int main()
{
int n;
cout << "Enter the length of the arrayn";
cin >> n;
char arr[n + 1];
cin.ignore(n, 'n');
cout << "Enter the characters of the arrayn";
cin.getline(arr, n);
for(int i = 0; i < n; i++)
cout << arr[i] << endl;
return 0;
}
  1. 在这里您需要了解cin.getline(arr,n)是如何工作的
  2. 它将从流中提取字符并将它们存储到arr中,直到n个字符被写入arr(包括终止符null字符)。

所以如果你把这个cin.getline(arr, n)改成这个cin.getline(arr, n+1),它会很好地工作。

First在c++中,数组的大小必须是编译时常量因此,以以下代码片段为例:

int n = 10;
int arr[n]; //INCORRECT because n is not a constant expression

正确的写法是:

const int n = 10;
int arr[n]; //CORRECT

类似地,下面(你在代码示例中所做的)是不正确的:

int n;
cout << "Enter the length of the arrayn";
cin >> n;
char arr[n + 1]; //INCORRECT

第二你没有在屏幕上打印最后一个字符的原因是因为你的数组的大小是n+1但是在for循环中:

for(int i = 0; i < n; i++)

你只到n。你应该取代上述:

for(int i = 0; i < n + 1; i++)// note that +1 ADDED HERE

更好的解决方案是使用std::string,如下所示:

#include<iostream>

int main()
{
std::string inputString;
std::cout << "Enter the string"<<std::endl;
std::getline(std::cin, inputString);

//first way to print the string 
std::cout << inputString << std::endl;
//second way to print the string 
for(int i = 0; i < inputString.size(); ++i)
{
std::cout << inputString[i];
}

return 0;
}

相关内容

  • 没有找到相关文章

最新更新