# Arrays problem

1. Feb 6, 2008

### akueddy

Hi,

I tried to assign inputs to a particular output and ive got some funny results. In this code
ive change the value of rpm to into the address of arrays that ive set. The adress correspond to the delay time for spark to occur.

Heres my c code :

Code (Text):
#include <stdio.h>

void main()
{

int n,x;

int Array[8] = { 5, 4, 3.5, 2, 1.5, 1,  0.5, 0};

int *pArray;

printf("what is the RPM of the engine? 0-8000\n");
scanf("%d", &n);

x = n/1000 ;

pArray = &Array[x];

printf("Spark will be produce at : %d microseconds before top dead centre\n",*pArray);
}

And heres the output :

Code (Text):

C:\Borland\BCC55\Bin>bcc32 pointers5
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
pointers5.cpp:

C:\Borland\BCC55\Bin>pointers5
what is the RPM of the engine? 0-8000
500
Spark will be produce : 5 microseconds before top dead centre

C:\Borland\BCC55\Bin>pointers5
what is the RPM of the engine? 0-8000
1000
Spark will be produce : 4 microseconds before top dead centre

C:\Borland\BCC55\Bin>pointers5
what is the RPM of the engine? 0-8000
7999
Spark will be produce : 0 microseconds before top dead centre

C:\Borland\BCC55\Bin>pointers5
what is the RPM of the engine? 0-8000
8000
Spark will be produce : 8000 microseconds before top dead centre

C:\Borland\BCC55\Bin>
My questions :

1) Why is the output's value equals to data stored in array 2 when clearly the input(1000) was suppose to point in array 1?

2) Why do i get 8000 microseconds when it is suppose to be 0 microseconds?

2. Feb 6, 2008

### Staff: Mentor

Here are some changes you need to make:
Code (Text):

#include <stdio.h>

int main()  /* main always returns an int */
{

int n,x;

float Array[8] = { 5, 4, 3.5, 2, 1.5, 1,  0.5, 0}; /* these are float numbers not int */

float *pArray;  /* float pointer */

printf("what is the RPM of the engine? 0-8000\n");
scanf("%d", &n);
x = n/1000 ;
pArray = &Array[x];
printf("Spark will be produced at : %f microseconds before top dead centre\n",
*pArray); /* %d to %f */
return 0;
}

When you divide two integers 7999/1000 you get 7 not 8.

arrays have indexes that start at 0, not 1. The second element of the array is array[1], the first element is array[0];

In the case pf 8000 - you went past the end of the array you looked at array[8], the ninth element - this is undefined behavior.

Undefined means anything (always bad) can happen. I think in this case the integer n was stored on the stack right after the end of the array. Also, consider getting a free modern C compiler. You're using a C++ compiler for C, which may also lead to unexpected results.

Last edited: Feb 6, 2008