Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 28th, 2012  |  syntax: None  |  size: 1.30 KB  |  hits: 15  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. sscanf optional column
  2. sscanf(currentline[i], "%[^t] %[^t] %11 [^n]", aIDVar, someDataVar, furtherDatVar) ==  3
  3.        
  4. #include <stdio.h>
  5.  
  6. static void testFn (char *str) {
  7.     int var1, var2, var3;
  8.  
  9.     if (sscanf(str, "%d %d %d", &var1, &var2, &var3) !=  3) {
  10.         var3 = 42;
  11.         if (sscanf(str, "%d %d", &var1, &var2) !=  2) {
  12.             var1 = var2 = var3 = -1;
  13.         }
  14.     }
  15.     printf ("[%-10s] -> %3d %3d %3dn", str, var1, var2, var3);
  16. }
  17.  
  18. int main (void) {
  19.     testFn ("");
  20.     testFn ("1");
  21.     testFn ("1 2");
  22.     testFn ("1 2 3");
  23.     testFn ("1 2 3 4");
  24.  
  25.     return 0;
  26. }
  27.        
  28. [          ] ->  -1  -1  -1
  29. [1         ] ->  -1  -1  -1
  30. [1 2       ] ->   1   2  42
  31. [1 2 3     ] ->   1   2   3
  32. [1 2 3 4   ] ->   1   2   3
  33.        
  34. static void testFn (char *str) {
  35.     int quant, var1, var2, var3;
  36.  
  37.     if ((quant = sscanf(str, "%d %d %d", &var1, &var2, &var3)) !=  3)
  38.         if (quant ==  2)
  39.             var3 = 42;
  40.         else
  41.             var1 = var2 = var3 = -1;
  42.     printf ("[%-10s] -> %3d %3d %3dn", str, var1, var2, var3);
  43. }
  44.        
  45. void input(char *str){
  46.     int x, vars[3];
  47.     char *sp;
  48.     for(x=0,sp=strtok(str, " t");x<3&&sp; x++,sp=strtok(NULL, " t")){
  49.           vars[x] = atoi(sp);
  50.     }
  51.     if(x<3) //didn't read enough
  52.        //..deal with it
  53.     if(sp) //your optional field is present
  54.        //deal with that.
  55. }