/[cvs]/joko/Uni/BSArch/01/prime.c
ViewVC logotype

Diff of /joko/Uni/BSArch/01/prime.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.8 by joko, Fri May 12 23:38:15 2006 UTC revision 1.9 by joko, Sat May 13 09:20:36 2006 UTC
# Line 3  Line 3 
3  #include <stdio.h>  #include <stdio.h>
4  #include <stdlib.h>  #include <stdlib.h>
5  #include <limits.h>  #include <limits.h>
6    #include <errno.h>
7    
8  #define BOOL int  #define BOOL int
9  #define TRUE 1  #define TRUE 1
# Line 16  BOOL is_prime(long int number) Line 17  BOOL is_prime(long int number)
17  {  {
18          int i;          int i;
19                    
20          /* negative values are never prime numbers */          /* negative values, 0 and 1 are never prime numbers */
21          if (number < 2) return FALSE;          if (number < 2) return FALSE;
22                    
23          /* check all numbers 2..sqrt(number) for being a prime number */          /* check all numbers 2..sqrt(number) for being a prime number */
# Line 29  BOOL is_prime(long int number) Line 30  BOOL is_prime(long int number)
30    
31  /* convert from string to long int, with error checking */  /* convert from string to long int, with error checking */
32  long int convert_number(const char *nptr) {  long int convert_number(const char *nptr) {
33          long int number = strtol(nptr, (char **)NULL, 10);          
34          if (number == LONG_MAX || number == LONG_MIN) {          errno = 0;
35            char * endptr;
36            long int number = strtol(nptr, &endptr, 10);
37            
38            /* invalid characters? */
39            if (*endptr != '\0') {
40                    char message[254];
41                    snprintf(message, 256, "Could not convert '%s' to a valid number.", nptr);
42                    PRINTERROR(message);
43                    exit(EXIT_FAILURE);
44            }
45            
46            /* invalid range? */
47            /* if (number == LONG_MAX || number == LONG_MIN) { */
48            if (errno == ERANGE) {
49                  char message[254];                  char message[254];
50                  snprintf(message, 256, "Number is not in range of 'long int': %s", nptr);                  snprintf(message, 256, "Number is not in range of 'long int': %s", nptr);
51                  PRINTERROR(message);                  PRINTERROR(message);
52                  exit(-1);                  exit(EXIT_FAILURE);
53          }          }
54            
55            return number;
56            
57  }  }
58    
59  int main(int argc, char * argv[])  int main(int argc, char * argv[])
# Line 43  int main(int argc, char * argv[]) Line 61  int main(int argc, char * argv[])
61                    
62          if (argc == 1) {          if (argc == 1) {
63                  PRINTERROR("No arguments given.");                  PRINTERROR("No arguments given.");
64                  exit(-1);                  exit(EXIT_FAILURE);
65          }          }
66                    
67          /* (3) range mode */          /* (3) range mode */
68          if (argc > 2) {          if (argc > 2) {
69                  long int i, j;                  long int i, j;
70                    i = convert_number(argv[1]);
71                  j = convert_number(argv[2]);                  j = convert_number(argv[2]);
72                  for (i = convert_number(argv[1]); i< j; i++) {                  for (i; i< j; i++) {
73                          PRINTPRIME(i);                          PRINTPRIME(i);
74                  }                  }
75                    

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.9

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed