/[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.9 by joko, Sat May 13 09:20:36 2006 UTC revision 1.10 by joko, Sat May 13 12:06:38 2006 UTC
# Line 11  Line 11 
11    
12  #define PRINTPRIME(x) if (is_prime(x)) printf("%i\n", x)  #define PRINTPRIME(x) if (is_prime(x)) printf("%i\n", x)
13  #define PRINTERROR(message) fprintf(stderr, "ERROR: %s\n", message)  #define PRINTERROR(message) fprintf(stderr, "ERROR: %s\n", message)
14    #define PRINTWARNING(message) fprintf(stderr, "WARNING: %s\n", message)
15    
16  /* check for prime number */  /* check for prime number */
17  BOOL is_prime(long int number)  BOOL is_prime(long int number)
# Line 31  BOOL is_prime(long int number) Line 32  BOOL is_prime(long int number)
32  /* convert from string to long int, with error checking */  /* convert from string to long int, with error checking */
33  long int convert_number(const char *nptr) {  long int convert_number(const char *nptr) {
34                    
         errno = 0;  
35          char * endptr;          char * endptr;
36          long int number = strtol(nptr, &endptr, 10);          long int number = strtol(nptr, &endptr, 10);
37    
38            errno = 0;
39                    
40          /* invalid characters? */          /* invalid characters? */
41          if (*endptr != '\0') {          if (*endptr != '\0') {
# Line 86  int main(int argc, char * argv[]) Line 88  int main(int argc, char * argv[])
88                                    
89                  /* (2) file mode: read numbers from file */                  /* (2) file mode: read numbers from file */
90                  } else {                  } else {
91                          char entry[11];                          char entry[81];
92                          while (fgets(entry, 11, fp)) {                          long int number;
93                                  long int number = convert_number(entry);                          long int lineno = 0;
94                            while (fgets(entry, 81, fp)) {
95                                    
96                                    /* count line number (for warnings) */
97                                    lineno++;
98    
99                                    /* skip empty lines */
100                                    if (strlen(entry) < 2) continue;
101    
102                                    /* line handling: policy = skip exceeding lines */
103                                    
104                                    /* if last char is newline, strip it */
105                                    if (entry[strlen(entry)-1] == '\n') {
106                                            entry[strlen(entry)-1] = '\0';
107                                            
108                                    /* line exceeds max length */
109                                    } else {
110                                            char message[254];
111                                            snprintf(message, 256, "Line too long (max 80 chars) in line number: %i", lineno);
112                                            PRINTWARNING(message);
113                                            
114                                            /* eat all characters until newline */
115                                            while (fgetc(fp) != 10);
116                                            
117                                            /* skip this line from prime calculation */
118                                            continue;
119                                    }
120                                    
121                                    number = convert_number(entry);
122                                  PRINTPRIME(number);                                  PRINTPRIME(number);
123                          }                          }
124                          fclose(fp);                          fclose(fp);

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

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