Hi
In one of my tutorials, I needed to write a program that prompts the user to enter a number, then calculate and show the prime number following the input.
The program needs to prompt the user again and again until the user enters 0.
Since its a beginner unit, no error checking is needed (so if you enter "a", the program does go crazy )
My program kind of works, but I'm not sure how to make it so that the program prompts the user for an input again if they input a negative number, since right now, I have it exit with a negative number.
Also, my lecturer once that "exit()" is evil... so is there a better way to make the program exit when the user inputs a 0?
I'm sure this isn't the best solution to the problem, so if you have any suggestions on how to improve it, it would be very much appreciated
Code:
/* File name: prime.c
* This program takes a number, then displays the next prime number.
*/
#include <stdio.h>
#include <math.h>
#define TRUE 1
#define FALSE 0
/* Prototypes */
int isPrime(int input);
int nextPrimeNumber();
int main(void){
nextPrimeNumber();
}
/* Function for determining the next prime number */
int nextPrimeNumber(){
int inputNumber = 1;
int nextPrimeNumber;
while(inputNumber != 0){
printf("\nPlease enter an integer: ");
scanf("%d", &inputNumber);
if(inputNumber<=0){
printf("The number you have entered is zero or negative.\n");
exit(0);
}
nextPrimeNumber = inputNumber + 1;
/* if the number is even, make it odd (2 is special case) */
if(nextPrimeNumber%2 == 0 && nextPrimeNumber != 2){
nextPrimeNumber+=1;
}
/* while its not a prime number, check the next odd number */
while(!isPrime(nextPrimeNumber)){
nextPrimeNumber+=2;
}
printf("The prime number following %d is %d\n", inputNumber, nextPrimeNumber);
}
return 0;
}
/* Function that checks whether or not a given number is
* a prime number or not.
*/
int isPrime(int input){
int i;
int prime = TRUE;
if(input == 2){
return TRUE;
}
if(input%2 == 0 || input <= 1){
prime = FALSE;
} else {
for(i=3; i<=sqrt(input); i+=2){
if(input%i == 0){
prime = FALSE;
}
}
}
return prime;
}
Thanks very much
Ani