arrays - 循环的数组输入覆盖值
问题描述
我将包含整个代码以防万一,但未注释的部分是行为不端的部分。出于某种原因,它接受元素 5 之前的输入,但之后它将循环的值设置为用户输入的任何值。元素 0-5 工作得很好,我之前设置了另一个循环,它工作得很好,假设一个永远不会到达元素 5
编辑:我知道我现在做了什么。我再次使用相同的数组而没有调整它的大小。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define ARRAY_SIZE 6
#define ARRAY_SIZE2 10
int main(void);
int main(void)
{
int array [ARRAY_SIZE];
int array2 [ARRAY_SIZE2];
int loop;
int loop2;
/* for (loop = 0; loop < ARRAY_SIZE; loop++) //prompt for ARRAY_SIZE number of integers and put them in the array
{
printf("\nEnter an integer:");
scanf("%d", &array[loop]);
}
printf("\n\nThe original order:");
for (loop = 0; loop < ARRAY_SIZE; loop++) //prints the array out one line at a time
{
printf("\n%d", array[loop]);
}
printf("\n\nReverse order:");
for (loop = ARRAY_SIZE - 1 ; loop > -1; loop--) //prints the array in reverse order
{
printf("\n%d", array[loop]);
}
printf("\nMy name is Corbin King\n");*/
for (loop = 0; loop < ARRAY_SIZE2; loop++)
{
printf("\nenter an integer:");
scanf(" %d", &array[loop]);
printf("%d", loop);
}
for (loop = 0; loop < ARRAY_SIZE2; loop++)
{
printf("%d\n", array[loop]);
}
/*for (loop = 0; loop < ARRAY_SIZE2; loop++)
{
for (loop2 = loop + 1; loop2 < ARRAY_SIZE2; loop2++)
{
if (array [loop] > array [loop2])
{
array2 [loop] = array [loop2];
}
}
}
for (loop = 0; loop < ARRAY_SIZE2; loop++)
{
printf("\n%d", array2 [loop]);
}*/
getch(); //The getch command waits until a user presses a key
return 0;
}
解决方案
变量array
有一个大小ARRAY_SIZE
。您只能循环直到ARRAY_SIZE-1
,从 开始0
,其中循环控制变量用于索引。通过ARRAY_SIZE2
在控制表达式中使用,您实际上是在使用超出范围的索引,并且访问超出范围的内存是未定义的行为。
for
将循环的控制表达式更改为loop < ARRAY_SIZE
。
推荐阅读
- javascript - javascript模数执行不清楚
- python - 如何使用 Azure Databricks 运行具有多个文件和模块的 ML 程序?
- makefile - 在 z/OS makefile 中使用条件
- javascript - 如何从 React.js 中的函数调用 API?
- oracle - What is the difference between BEGIN followed by IF and IF followed by BEGIN
- python - Problem installing PyQtChart module in python 3.7
- visual-studio-code - 特定文件名的 vscode 设置
- c++ - 尝试控制飞利浦 Hue Lights 时,桥接器没有响应
- node.js - 包装 athenticate 函数时 PassportJs 会话不起作用
- windows - CMD Batch - 我不能做这个循环工作