¿Cómo usar sscanf en loops?

¿Hay una buena manera de recorrer una cadena con sscanf ?

Digamos que tengo una cadena que se ve así:

 char line[] = "100 185 400 11 1000"; 

y me gustaría imprimir la sum. Lo que realmente me gustaría escribir es esto:

 int n, sum = 0; while (1 == sscanf(line, " %d", &n)) { sum += n; line +=  } 

pero no hay una manera clara de sacar esa información de sscanf . Si devuelve la cantidad de bytes consumidos, sería útil. En casos como este, uno puede usar strtok , pero sería bueno poder escribir algo similar a lo que puede hacer desde stdin :

 int n, sum = 0; while (1 == scanf(" %d", &n)) { sum += n; // stdin is transparently advanced by scanf call } 

¿Hay una solución simple que estoy olvidando?

Busque el especificador de conversión %n para sscanf() y familia. Te da la información que necesitas.

 #include  int main(void) { char line[] = "100 185 400 11 1000"; char *data = line; int offset; int n; int sum = 0; while (sscanf(data, " %d%n", &n, &offset) == 1) { sum += n; data += offset; printf("read: %5d; sum = %5d; offset = %5d\n", n, sum, offset); } printf("sum = %d\n", sum); return 0; } 

Cambió ‘línea’ a ‘datos’ porque no puede incrementar el nombre de una matriz.