Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Arrays problem

  1. Feb 6, 2008 #1
    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:
    Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

    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. jcsd
  3. Feb 6, 2008 #2

    jim mcnamara

    User Avatar
    Science Advisor
    Gold Member

    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
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: Arrays problem
Loading...