Thread: Simple project becomes very annoying.

  1. #1
    Registered User
    Join Date
    Feb 2002
    Posts
    465

    Simple project becomes very annoying.

    First of all, let me say right up front that I am very novice to C++. ive been playing around with it the past couple weeks and doing as much research as I could, and I reached the point where I believed I could design a simple game.

    boy, was I wrong.....

    I've searched for answers to my problem, and since I'm not entirely sure what my problem is, I have turned to the wise sages on this message board for assistance.

    I am going to state all the problems up front, then explain them later:

    1. the program suddenly crashes for no apparent reason. (I have dug through my code, and there doesnt seem to be a problem. It is all stuff I have done before)
    2. a certain value in my program always returns the same, even though its supposed to be random. I have played around with random numbers before, and I thought I had the hang of it.

    here is my code: if you dont feel like reading the whole thing, skip it. I will explain afterwards where exactly I think the problems are, so you dont have to read the whole thing. But I may be wrong, so here is the code to use for referance.



    #include <stdio.h>
    #include <math.h> //I included this becuase I thought
    I would need it origionally.

    #include <stdlib.h>
    #include <time.h>

    int hand ();

    void main() {
    int choice;
    int pick;
    int score = 20;
    bool quit = false;
    int hidden;

    printf("This is a simple game of chance. The rules are as follows:\n");
    printf("I will show you five numbers. One of these numbers is the correct\n");
    printf("number, and the other four are fake. If you chose the correct\n");
    printf("number, that number will be added to your score.\n");
    printf("Every hand subtracts two points from your score. you start with 20 points.\n");
    printf("Here is the catch, though:\n");
    printf("The higher the number is, the less likely it is to be the correct one,\n");
    printf("but you get more points for higher numbers.\n");
    printf("\n");
    printf("Good luck!\n");
    system ("PAUSE");
    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n");

    while ( ! quit ) {
    hidden = hand();
    printf(" 1. pick\n 2. quit\n 3. score\n");
    printf("Enter a selection number:");


    scanf("%d", choice); //CRASH HAPPENS AFTER INPUT HERE.



    if (choice == '2')
    quit = true;

    if (choice == '3')
    printf("%d", score);

    if (choice == '1') {
    score = score - 2;
    scanf("Enter a number choice: %d", pick);
    if (pick == hidden) {
    score = score + hidden;
    printf("That is correct! Your score is now %d\n", score);
    }
    if (pick != hidden) {
    printf("Wrong! Your score is now %d\n", score);
    }
    }

    }
    }

    int hand() { // function for creating hand and
    assigning one number to 'hidden'

    int a, b, c, d, e, hidden; // the 5 random numbers
    and the 'hidden'

    int aasg, basg, casg, dasg, easg; // intergers used to
    assign weight to numbers
    so that larger numbers have
    less chance of being selected
    (asg = assign)

    int aper, bper, cper, dper, eper; // per = percent. not really
    a percent, but used to decide
    which number is selected.

    srand ( time (NULL) );
    a = ( rand() % 20 ) + 1;
    b = ( rand() % 20 ) + 1;
    c = ( rand() % 20 ) + 1;
    d = ( rand() % 20 ) + 1;
    e = ( rand() % 20 ) + 1;

    printf("%d %d %d %d %d\n\n", a, b, c, d, e);

    if ( 0 < a <= 5 ) // assigning weight
    aasg = 4;
    if ( 5 < a <= 10 )
    aasg = 3;
    if ( 10 < a <= 15 )
    aasg = 2;
    if ( 15 < a <= 20 )
    aasg = 1;

    if ( 0 < b <= 5 )
    basg = 4;
    if ( 5 < b <= 10 )
    basg = 3;
    if ( 10 < b <= 15 )
    basg = 2;
    if ( 15 < b <= 20 )
    basg = 1;

    if ( 0 < c <= 5 )
    casg = 4;
    if ( 5 < c <= 10 )
    casg = 3;
    if ( 10 < c <= 15 )
    casg = 2;
    if ( 15 < c <= 20 )
    casg = 1;

    if ( 0 < d <= 5 )
    dasg = 4;
    if ( 5 < d <= 10 )
    dasg = 3;
    if ( 10 < d <= 15 )
    dasg = 2;
    if ( 15 < d <= 20 )
    dasg = 1;

    if ( 0 < e <= 5 )
    easg = 4;
    if ( 5 < e <= 10 )
    easg = 3;
    if ( 10 < e <= 15 )
    easg = 2;
    if ( 15 < e <= 20 )
    easg = 1;

    aper = aasg; // giving the ()per values
    ranges. such as
    aper = from 0 to aasg

    bper = basg + aasg; // bper looks like its
    actually from 0 to basg,
    but I clear that up below

    cper = casg + basg + aasg;
    dper = dasg + casg + basg + aasg;
    eper = easg + dasg + casg + basg + aasg;

    hidden = ( rand() % ( aasg + basg + casg + dasg + easg ) ) + 1;

    if ( hidden <= aper )
    hidden = a;

    if ( aper < hidden <= bper ) // giving bper its true
    range: from aper to bper

    hidden = b;
    if ( bper < hidden <= cper )
    hidden = c;
    if ( cper < hidden <= dper )
    hidden = d;
    if ( dper < hidden <= eper ) // hidden always has value
    hidden = e; of e, no matter what.
    (not supposed to happen)


    return hidden; // allowing hidden to be
    extracted from this function

    }






    ok, whew.... thats the end of my code. (I also attached the file for those who dont like reading it inside of a little post, and would like to see the whole file as it appears to me)

    after the initial introduction, I show them the hand and give them options. I have this bit of code seperated from the rest, and the comment "//CRASH HAPPENS AFTER INPUT HERE" so that it is easier to find. no matter what they put as input, they get an illegal opperation.

    thats the first of my problems. solving that is a priority, and I have no idea where to go to solve it.

    second, a minor code problem, my hidden value is always the last number in the hand (in the code, this is the 'e' value). I had the program print the hidden value and I ran through it multiple times. my question is this: are multiple operators allowed in "IF" statements? such as:

    if ( cper < hidden <= dper )
    hidden = d;

    does that statement actually work in determining of hidden falls between cper and dper, or does it only look at the part after hidden. the reason I ask is because that is the only thing I can think of that would always give hidden the 'e' value, because

    if (dper < hidden <= eper)
    hidden = e;

    ,since it is the last statement , would always assign e to hidden, since hidden will always be <= eper.

    well, guys... what do you think? I know it is a long post, but this was the only way I could state my problem, and this place is the only place I know of that would probably help solve it.

    thanks ahead of time, and I appreciate your patience in wading through this very looong post.

  2. #2
    Registered User
    Join Date
    Feb 2002
    Posts
    465
    forgot to attach the file

  3. #3
    Mayor of Awesometown Govtcheez's Avatar
    Join Date
    Aug 2001
    Location
    MI
    Posts
    8,823
    > scanf("%d", choice); //CRASH HAPPENS AFTER INPUT HERE.

    That's because scanf takes a pointer as the second argument. You'll have to use scanf("%d", &choice);

    (That goes for your other scanf calls, too - add a &)

  4. #4
    Registered User
    Join Date
    Feb 2002
    Posts
    465
    oh yeah! *slaps forhead*

    i started out in C++ using cin and cout, and im trying to convert to printf and scanf

    what about the second problem though? are those IF statements correct?

  5. #5
    Mayor of Awesometown Govtcheez's Avatar
    Join Date
    Aug 2001
    Location
    MI
    Posts
    8,823
    (sorry, didn't read the whole post, just the "it crashes here" part)

    > are those IF statements correct?

    I don't think you can do it like that - You'll probably have to say
    if((cper < hidden) && (hidden <= dper))

  6. #6
    Registered User
    Join Date
    Feb 2002
    Posts
    465
    ah, ok... thanks bunches.

  7. #7
    Flash Animator, OF DOOOOM bluehead's Avatar
    Join Date
    Nov 2001
    Posts
    269
    Heh why stop using cout and cin?
    Code:
    #if _emo
      #define stereo_type_i_dislike
    #endif

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Operating System Project
    By Pete in forum Projects and Job Recruitment
    Replies: 1
    Last Post: 07-15-2004, 09:33 AM
  2. application project
    By featherflutter in forum C++ Programming
    Replies: 2
    Last Post: 06-26-2004, 11:12 AM
  3. Please, suggest a project ….
    By Dragon227Slayer in forum C# Programming
    Replies: 1
    Last Post: 06-12-2004, 11:16 AM
  4. Please, suggest a project ….
    By Dragon227Slayer in forum Tech Board
    Replies: 1
    Last Post: 06-12-2004, 10:48 AM
  5. Remove ActiveX from VC++ project
    By cr_naik in forum Windows Programming
    Replies: 2
    Last Post: 07-02-2003, 11:15 AM