数组在C++中不会向后填充
Array will not fill backwards in C++
我试图将数组从20向后填充到0,但无论何时打印出来,它仍然向前打印。例如,我想输入1,2,3,4,5,然后得到5,4,3,2,1。
我曾尝试过做一个从20向后计数到0的for循环,但当我打印它时,它仍然不正确。有什么帮助吗?
int temp;
for (int i = 20; i > 0; i--)
{
cout << "Please enter the next number. Use a -1 to indicate you are done: ";
cin >> temp;
while(temp > 9 || temp < -2)
{
cout << "You may only put numbers in 0 - 9 or -1 to exit. Please enter another number: ";
cin >> temp;
}
arr1[i] = temp;
cout << arr1[i];
}
for (int i = 21; i > 0; i--)
{
cout << arr1[i];
您的数组大小是多少?假设大小为21(索引从0到20)
首先请注意,您的第一个循环永远不会填充索引0处的数组(像这样的arr1[0] = temp
永远不会在第一个循环中执行)
如果你想避免这种行为,你应该这样写你的第一个for循环:
for (int i = 20; i >= 0; i--){
。。。}
。
第二个for循环有一些问题:
- 您正在向后遍历数组,而您希望执行相反的操作
- 循环从超出界限(21)的索引开始
- 循环可能会打印一些未定义的值(您应该记住上次添加值的索引)
我建议你使用其他数据结构,如堆栈,但如果你想使用数组,你可以编辑你的代码如下:
int i;
for (i = 20; i >= 0; i--){...}
for (i; i <= 20; ++i) { cout << arr1[i]; }
如果你不想在循环外声明int i;
,你可以这样做:
int lastAdded;
for (int i = 20; i >= 0; i--){
...
lastAdded = i;
}
for (int i = lastAdded; i <= 20; i++) { cout << arr1[i]; }
编辑:请注意,在插入-1后,您的代码和我的代码都不会停止请求新值。
如果你想实现这种行为,你应该使用while循环而不是第一个for循环,并检查退出条件。
相关文章:
- 在c++中用vector填充一个简单的动态数组
- 如何使用用户输入在C++中正确填充2D数组
- 如何找到大小'x'数组是否完全填充,在C++?
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 通过for循环使用用户输入填充列表
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 如何正确填充在堆上分配的二维数组?
- 将数字转换为填充字符串
- 有没有办法在一行中填充矢量图
- 用C++中的数字和条件填充向量
- 用真值填充矢量
- 使用结构成员指针在C++中填充结构
- 流填充字符的默认定位
- 使用不同算法的 PKCS1v15 填充进行加密 ++ 签名
- C++:使用缓冲区中的数据填充结构
- 如何将零填充的多维数组传递给 C++ 中的函数?
- Cryptopp:获取密码输入的填充字符串
- 填充上编译器生成的复制构造函数之间的不一致
- RcppEigen 模板化函数,用于填充单位法线
- 我想生成许多矩阵并用随机数填充它