/* * scanf regression test * * usage: tscanf < tscanf.in * * please add to this * * ++jrb bammi@cadence.com * with parts from glibc */ #include #if __STDC__ # include # ifndef EXIT_FAILURE # include /* HP strikes again! */ # endif #else # define EXIT_FAILURE (1) /* failure return value for exit() */ # define EXIT_SUCCESS (0) /* success return value for exit() */ #endif int main() { int i, n; float x; char name[50]; int exit_val = EXIT_SUCCESS; /* input: 25 54.32E-1 thompson */ /* output: n = 3 i = 25 x = 5.432000 name = :thompson: */ n = scanf("%d%f%s", &i, &x, name); printf("Expect:\tn = 3 i = 25 x = 5.432000 name = :thompson:\n"); printf("Got:\tn = %d i = %d x = %f name = :%s:\n\n", n, i, x, name); if(n != 3) exit_val |= EXIT_FAILURE; /* input: 56789 0123 56a72 */ /* output: n = 3 i = 56 x = 789.000000 name = :56: */ /* a72 left over */ n = scanf("%2d%f%*d %[0-9]", &i, &x, name); printf("Expect:\tn = 3 i = 56 x = 789.000000 name = :56:\n"); printf("Got:\tn = %d i = %d x = %f name = :%s:\n\n", n, i, x, name); if(n != 3) exit_val |= EXIT_FAILURE; /* output: n = 1 name = :a72: */ n = scanf("%s", name); printf("Expect:\tn = 1 name = :a72:\n"); printf("Got:\tn = %d name = :%s:\n\n", n, name); if(n != 1) exit_val |= EXIT_FAILURE; /* input: 56789 0123 56a72 */ /* output: n = 3 i = 56 x = 789.000000 name = :56: */ /* 'a72' left over */ n = scanf("%2d%f%*d %[0123456789]", &i, &x, name); printf("Expect:\tn = 3 i = 56 x = 789.000000 name = :56:\n"); printf("Got:\tn = %d i = %d x = %f name = :%s:\n\n", n, i, x, name); if(n != 3) exit_val |= EXIT_FAILURE; /* output: n = 1 name = :a72: */ n = scanf("%s", name); printf("Expect:\tn = 1 name = :a72:\n"); printf("Got:\tn = %d name = :%s:\n\n", n, name); if(n != 1) exit_val |= EXIT_FAILURE; /* input: 2 quarts of oil 10.0LBS of fertilizer 100ergs of energy output: count = 3, quant = 2.000000, item = oil, units = quarts count = 3, quant = 10.000000, item = fertilizer, units = LBS count = 3, quant = 100.000000, item = energy, units = rgs count = -1, quant = 0.000000, item = , units = */ printf("Expect:\n\tcount = 3, quant = 2.000000, item = oil, units = quarts\n"); printf("\tcount = 3, quant = 10.000000, item = fertilizer, units = LBS\n"); printf("\tcount = 3, quant = 100.000000, item = energy, units = rgs\n"); printf("\tcount = -1, quant = 0.000000, item = , units = \n"); printf("Got:\n"); while (!feof (stdin) && !ferror (stdin)) { float quant = 0.0; char units[21], item[21]; units[0] = item[0] = '\0'; n = fscanf (stdin, "%f%20s of %20s", &quant, units, item); (void) fscanf (stdin, "%*[^\n]"); printf ("\tcount = %d, quant = %f, item = %.21s, units = %.21s\n", n, quant, item, units); } if(n != EOF) exit_val |= EXIT_FAILURE; return exit_val; }