Solved

a newcomer to c programming needs help again

Posted on 2004-04-05
3
266 Views
Last Modified: 2010-04-17
i have once again come to a dead end with my logon program in c.
whatever value is given to my program it outputs the results for 2.
i have created a simpler program that produces the same error:

#include stdio

int main(int val1)
{
if(val1==1)
{
printf("1");
}
if(val1==2)
{
printf("2");
}
if(val1==3)
{
printf("3");
}
if(val1==4)
{
printf("4");
}
}

it is probably just me being stupid but can anyone explain this?
0
Comment
Question by:ico2
  • 2
3 Comments
 
LVL 1

Expert Comment

by:llewelm
ID: 10760236
The main() function takes two parameters as follows:

int main(int argc, char *argv[])

The first parameter is the number of command line arguments, the second are the actual arguments.  My guess is that you've compiled your program and have a c.exe or something similar and your typing

c 1

and "2" is coming out.  That is correct because your program has two command line arguments -- "c" and "1".

Your program should look more like:

#include <stdio.h>

int main(int argc, char *argv[])
{
  if (strcmp(argv[1], "1") == 0) {
   printf("1");
  }
  if (strcmp(argv[1], "2") == 0) {
   printf("2");
  }

etc...
0
 
LVL 4

Accepted Solution

by:
PerryDK earned 20 total points
ID: 10760573
Output of program ran with c.exe 1 2 3 -5 -10 20 15 8

ptrValues[0] = 1
ptrValues[1] = 2
ptrValues[2] = 3
ptrValues[3] = -5
ptrValues[4] = -10
ptrValues[5] = 20
ptrValues[6] = 15
ptrValues[7] = 8

The Sum of the numbers is 34

Actual program:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
  if(argc < 2)
  {
    printf("improper usage.  Please pass some integer values to this program");

    //return -1 indicating failure
    return -1;
  }

  int numValues = argc -1;
  int* ptrValues = new int[numValues];
  for(int i = 0; i < numValues; i++)
  {
    //convert the paramters passed in to integers and store
    //them in our array for later usage
    //Note that if the string can not be converted to an integer
    //the value stored will be 0
    ptrValues[i] = atoi(argv[i+1]);
  }

  //lets enumerate through all the values displaying them to the user
  //and lets add them up just for fun
  int sum = 0;
  for(int i = 0; i < numValues; i++)
  {
    printf("ptrValues[%i] = %i \n", i, ptrValues[i]);
    sum += ptrValues[i];
  }

  printf("\nThe Sum of the numbers is %i", sum);

  delete[] ptrValues;

  return 0;
}


By the way are using strictly the C language or are you using C++.  If your using strictly the C language which I'm not sure why you wouldn't be using C++ but if you are write me back and I can change the code to work with strictly C.  Basically the allocation and deallocation of the ptrValues array will differ.  You'll have to use malloc and stuff like that which you don't have to use in C++.
0
 
LVL 4

Expert Comment

by:PerryDK
ID: 10760608
Heres the program written strictly in C code if you need it.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
  if(argc < 2)
  {
    printf("improper usage.  Please pass some integer values to this program");

    //return -1 indicating failure
    return -1;
  }

  int numValues = argc -1;
  int* ptrValues = (int*)malloc(numValues * sizeof(int));
  for(int i = 0; i < numValues; i++)
  {
    //convert the paramters passed in to integers and store
    //them in our array for later usage
    //Note that if the string can not be converted to an integer
    //the value stored will be 0
    ptrValues[i] = atoi(argv[i+1]);
  }

  //lets enumerate through all the values displaying them to the user
  //and lets add them up just for fun
  int sum = 0;
  for(int i = 0; i < numValues; i++)
  {
    printf("ptrValues[%i] = %i \n", i, ptrValues[i]);
    sum += ptrValues[i];
  }

  printf("\nThe Sum of the numbers is %i", sum);

  free(ptrValues);

  return 0;
}

0

Featured Post

Simplifying Server Workload Migrations

This use case outlines the migration challenges that organizations face and how the Acronis AnyData Engine supports physical-to-physical (P2P), physical-to-virtual (P2V), virtual to physical (V2P), and cross-virtual (V2V) migration scenarios to address these challenges.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Whether you’re a college noob or a soon-to-be pro, these tips are sure to help you in your journey to becoming a programming ninja and stand out from the crowd.
Computer science students often experience many of the same frustrations when going through their engineering courses. This article presents seven tips I found useful when completing a bachelors and masters degree in computing which I believe may he…
An introduction to basic programming syntax in Java by creating a simple program. Viewers can follow the tutorial as they create their first class in Java. Definitions and explanations about each element are given to help prepare viewers for future …

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question