# Thread: I hate school...

1. ## I hate school...

can someone tell me why this doesnt generate anything but 0's.

Code:
```void read()
{
for(suba = 0; suba < 4; suba++)
{
for(subb = 0; subb < 8; subb++)
{
x = rand()%51;
if(x > 50 || x < 1)
{
num[suba][subb] = x;
continue;
}
printf("%4d", num[suba][subb]);
}
printf("\n");
}
}```
there is an array declared above called num[4][8] as well as the other variables.

2. Code:
```x = rand()%51;
if(x > 50 || x < 1)```
Because here your valid random ranges are 0 to 50. Since you prevent anything other than zero from making it past the if check, that's all you get.

Quzah.

3. Now all I get are lines and spaces where there used to be 0's...
Code:
`if(x < 50 || x > 1)`

4. What number are you trying to do here? You are doing one of two things in your loop:
1) Putting the number 1 through 50 in an array. Then you continue, skipping printf.
2) Calling printf if the number is a zero.

Work through your code line by line in your head or on paper, or what not, and you'll see the problem. Try posting exactly what the program is supposed to do the next time you have a question also.

Quzah.

5. you if statement is the probelm it should read
if(x < 50 && x > 1)

when you want to have a number in a ceratain range you need to have and instead of or cause if the first part of your or condition is false the if statment will never execute, but if you use and then both condition have to be vaild.

Hope this help you

6. Im not thinking at all anymore. I am so fed up with this calss I just want to drop itand take knitting or something... No one taught us to use rand() but they are telling us to use it with no reference to it other than rand(). I need a random number between 1 and 50 put into each place in the array. then it has tp print out each number from the array in 4 X 8 format (the array is [4][8])
Code:
```#include <stdio.h>

int num[4][8];
int suba, subb;
int ctr, ctr2, x;

void eoj();
void read();

void main()
{
read();
}

void read()
{
for(suba = 0; suba < 4; suba++)
{
for(subb = 0; subb < 8; subb++)
{
x = rand()%51;
if(x < 50 || x > 1)
{
num[suba][subb] = x;
continue;
}
printf("%4d", num[suba][subb]);
}
printf("\n");
}
}

void eoj()
{
name();
printf("EXECUTION COMPLETED... Press ENTER to contiune.\n");
getchar();
}```

7. oh i forgot one more thing when you are using the rand function you have to do following

at the top of your program put

#include <time.h>

and before you call the rand() put

srand(time(NULL));

this will help in generating random numbers, don't ask me why, but it works

8. one more thing i forgot, take out the continue, it is considered bad programming habit, and you should never use it cause you can write loops such as a for, while or do while that can control your program.

Good Luck

9. There are comments throught out the following code that you might want to take note of - a lot of them are not to do with your immediate problem, but good to know, nonetheless.

Code:
```#include <stdio.h>
#include <stdlib.h> /* need this to use rand() */
#include <time.h>   /* for srand() */

int num[4][8];

int suba = 0;
int subb = 0;
int ctr = 0;
int ctr2 = 0;
int x = 0;

void eoj(void);   /* if function takes no parameters use void */
void read(void);
int getrand(int range);

int main(void) /* main returns an int - always */
{
read();
return 0;  /* should return status to the caller */
}

void read(void)
{

srand(time(NULL));
for (suba = 0; suba < 4; suba++) {
for (subb = 0; subb < 8; subb++) {
x = getrand(50); /*get random numbers, argument is to set range of numbers */
num[suba][subb] = x;
....}
}

printf("\n");

}

void eoj(void)
{
name();
printf("EXECUTION COMPLETED... Press ENTER to contiune.\n");
getchar();
}

/* getrand will get you numbers between 0 and 50 */

int getrand(int range)
{
return (int) ((double) rand() / ((double) RAND_MAX + 1) * range);
}```
You might also try 'man 3 rand' if you are on a *nix computer.

I will leave it up to you to figure out how to properly print all of the elements out.

HTH

~/

10. ## Re

That did the trick. Thanks. Now I am stuck on how to get it to do a basic search of the array and print whether or not an integer entered is in the array. It prints every single time it loops, I only want one answer, that the number is in the array or it is not, and then the location (eg num[4][0]). Here is the code so far:
Code:
```void diff()
{
char ans;
int s;
printf("\n\nSearch for a number in the array?");
fflush(stdin);
scanf("%c", &ans);
if(ans == 'y' || ans == 'Y')
{
printf("\n\nKey in integer to be searched for:");
fflush(stdin);
scanf("%d", &s);
for(suba = 0; suba < 4; suba++)
{
for(subb = 0; subb < 8; subb++)
{
if(num[suba][subb] == s)
{
printf("\n\n%d is in the array\n", s);
break;
}
else
{
printf("\n\n%d is not in the array", s);
}
if(ans == 'N' || ans == 'n')
{
eoj();
}
}
}
}
}```

11. this will help in generating random numbers, don't ask me why, but it works
The reason why you need this is because rand() will always return the same series of random numbers for a given seed. As such if you do not seed the random number generator (using srand() ) it will use the default value.

edit: Forgot to add: what srand( (unsigned) time(NULL)); does it to get the current time in seconds and use that to seed the RNG. However this is not fool proof as if you run the program in the same second you will get the same results.

12. ## re

ok, that part is working now its the second half I do not get. I have to make a loop that will print if a certain number is in the array, now filled with the random numbers. And only print one answer, that it is not in there, or that it is in there at a certain location

13. Ok, so loop through each element of the array, and check to see if it's there. If it is, stop there and do whatever it is you need to do. (Print the index, or value, or what not.) Then, if you're still having problems, consider starting a new thread on it. Also, post your attempt, and specificly what you're having trouble with.

Quzah.

14. ## Re

There is a new chunk of code just a couple of post above this one with the new function that I tried out. I just need to get it to break out of two loops instead of one.

15. You could break out of this loop by setting a flag then breaking as many loops as you like if this flag is set.

You could do it with "goto"; to break out of just two nested loops this maybe considered poor form but the idea is worth considering as it is often the clearest cleanest method. Be aware though that most people shun 'goto' in C as it can lead to code that is very hard to follow.

Popular pages Recent additions