#include <stdio.h>
/* * Total input consisting of integers, skipping bad data */ int main(int argc, char **argv) { int sum = 0; /* Sum of input ints. */ int ct = 0; /* How many summed? */ int errors = 0; /* Num conv errors.*/ /* Read all the input. */ while(1) { /* Try to read an integer, then see what happened. */ int intin; int res = scanf("%d", &intin); /* And end-of-file, we're done. */ if(res == EOF) break; /* A return of 0 means a conversion error */ if(res == 0) { /* Skip to the next digit. */ scanf("%*[^0-9-]"); ++errors; continue; } /* A return of 1 means success. */ if(res == 1) { sum += intin; ++ct; continue; } } /* Print the results. */ printf("%-10s %5d\n%-10s %5d\n%-10s %5d\n", "sum:", sum, "ct:", ct, "errors:", errors); } | import java.util.*;
import java.lang.RuntimeException; /* * Total input consisting of integers, skipping bad data */ class Addem { public static void main(String[] args) { int sum = 0; // Sum of input integers. int ct = 0; // How many were summed. int errors = 0; // Num conv errors. // Standard class that reads and converts items // in the input. Scanner in = new Scanner(System.in); // This makes the scanner behave more like C // scanf. It lets a number end with any non-digit. // Still, with a little thought, I expect you can // find some input on which the two programs disagree. in.useDelimiter("[^0-9-]\\s*"); try { // Read all the input. The // NoSuchElementException gets us out // of the loop, which can be thrown by either // in.nextInt() or in.skip(). while(true) { // Attempt to read the next integer. int next; try { sum += in.nextInt(); ++ct; } catch(InputMismatchException e) { // This is a bad conversion. // We'll count it, and we need to skip // the bad stuff. ++errors; in.skip("[^0-9-]+"); } } } catch(NoSuchElementException e) { // This is thrown at eof. Print results. System.out.printf ("%-10s %5d\n%-10s %5d\n%-10s %5d\n", "sum:", sum, "ct:", ct, "errors:", errors); } } } |