How to Assign Inputs as Addresses in C Programming?

  • Thread starter Thread starter akueddy
  • Start date Start date
  • Tags Tags
    Arrays Pointers
Click For Summary

Discussion Overview

The discussion revolves around a beginner's experience with C programming, specifically focusing on assigning inputs as addresses in an array and handling user input safely. Participants explore issues related to warnings generated by the compiler, array initialization, and the challenges of programming for a PIC microcontroller.

Discussion Character

  • Exploratory
  • Technical explanation
  • Homework-related
  • Debate/contested

Main Points Raised

  • One participant questions the warning about 'pArray' being assigned a value that is never used, suggesting that the variable is reassigned without utilizing its initial value.
  • Another participant points out that the variable 'n' is used before being initialized, which could lead to undefined behavior.
  • Suggestions are made for initializing larger arrays, including using individual assignments or a for loop for populating the array with values.
  • A participant raises concerns about the safety of using 'scanf' without validating the input, emphasizing the risk of input values being outside the expected range or of the wrong type.
  • One participant expresses a desire to handle a larger array size of about 100 elements with unpredictable values.
  • A later reply discusses the context of programming for an ignition system, explaining how the program will assign spark timing based on engine speed, indicating a more complex application of the initial C programming concepts.
  • Questions are raised about the differences between standard C code and the specific instructions used for programming a PIC microcontroller, with a request for clarification on how to integrate the two.
  • Another participant seeks advice on progressing with coding for calculating RPM, expressing confusion about the logic involved in existing examples.

Areas of Agreement / Disagreement

Participants express various concerns and suggestions, but there is no consensus on the best approach to handle the issues raised, particularly regarding input validation and array initialization methods.

Contextual Notes

Limitations include the lack of input validation in the original code, potential undefined behavior from using uninitialized variables, and the complexity of transitioning from standard C programming to PIC-specific instructions.

akueddy
Messages
14
Reaction score
0
Hi guys,

***I just started c programming, I've done some reading last week and i came up with a basic program.Ive got a problem trying to assign an input as an address to a specified value.Basically i have 3 datas in my array and it will be called by inputting a number which points to the address.

***Here's the program that i wrote :


#include <stdio.h>


void main()
{

int n;

int Array[3];
Array[0] = 10;
Array[1] = 20;
Array[2] = 30;

int *pArray;

pArray = &Array[n];

printf("choose a number 0-2\n");
scanf("%d", &n);

pArray = &Array[n];

printf("because you choose that number ill give you : $%d\n",*pArray);
}

-------------------------------------------------------------------------------------

***Although there's an error message, the program runs just fine...


C:\Borland\BCC55\Bin>bcc32 pointers4
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
pointers4.cpp:
Warning W8004 pointers4.cpp 16: 'pArray' is assigned a value that is never used
in function main()
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

C:\Borland\BCC55\Bin>pointers4
choose a number 0-2
2
because you choose that number ill give you : $30

C:\Borland\BCC55\Bin>

--------------------------------------------------------------------------------------


***here's my question :

1) Can someone explain to me what's the warning all about and how to correct it? i though i have assign a value for 'pArray' according to the user's input.
2) What if i want to have a really large amount of datas stored in my array, let's say 100 datas. Is there any simple way of doing it say :

Array[10,20,30,40,50,60,70...1000]?
 
Technology news on Phys.org
  1. You're assigning to pArray and then assigning to it again without using the value you first assigned to it. Furthermore, you're using n before it's been initialised, which you should never do.
    [*]There are two ways of doing this. You could either assign them each individually:
    Code:
    int array[] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
    …or if there are loads, you could use a for loop:
    Code:
    int array[100];
    for (int i = 0; i < 100; i++)
    {
        array[i] = i = array[(i + 1) * 10];
    }
 
Maybe your problem is not exactly the real problem of your program.
The biggest problem of your program exists here:
Code:
scanf("%d", &n);
Because you haven't checked the value of the input.
No one can guarantee the the input value is of type int and in the range of 0~2.
That means if the input value is not 0~2 or not even a int value, there may be some
severe errors occurrence.
 
1) Inquisitus

Id prefer this one cause my actual array size is going to be about 100 and the values are not predictable although it is increasing.

int array[] = { 13, 21, 35, 41, 51, 63, 74, 81, 99......1000 };

2) shwx

The program that i want to write is for an ignition system where depending on the speed of the engine, i will assign a suitable time of spark. So ill assume my input is going to be either on or off and depending on the "on time", i can calculate the speed,it will then points to an address which is the time of spark. Its really an ambitious thing to do for a beginner but i decided to do it anyways.

***new question***

Eventually ill need to apply my c code to program a PIC. I am using Wiz-c as my compiler because i find that its quite easy to visualize what's happening when the code is compiled and simulated. I don't know if this is too elaborate, i hope someone can help me :

1) What is the difference between typical c code (standard stuff such as prinf,scanf) and the ones used on a pic (movlw,movwf,trisa,trisb). I was learning C and PIC code separately and i didnt know that it can be combined(see link for further details). Is the ones on the pic is just an extension of c codes needed in order to make the PIC working?

2) Can anyone give me some tips on how to progress from here on? I am quite confuse on how to write a code to calculate the rpm, there are some examples on the web on a DIY CDI but i just don't understand the logic..

code.http://www.sportdevices.com/ignition/ignition.c"
 
Last edited by a moderator:

Similar threads

  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 17 ·
Replies
17
Views
3K
  • · Replies 25 ·
Replies
25
Views
3K
  • · Replies 23 ·
Replies
23
Views
2K
Replies
20
Views
2K
  • · Replies 6 ·
Replies
6
Views
3K
Replies
47
Views
5K
  • · Replies 9 ·
Replies
9
Views
3K
Replies
1
Views
2K
  • · Replies 3 ·
Replies
3
Views
3K