Quiero escanear líneas comoEscapar de corchetes] en sscanf
"[25, 28] => 34"
escribí un pequeño programa para probarlo:
#include <cstdlib>
#include <iostream>
int main() {
char* line = "[25, 28] => 34";
char a1[100], a2[100];
int i;
sscanf(line, "[%[^,], %[^\]] => %i", a1, a2, &i);
std::cout << "a1 = " << a1 <<"\na2 = " << a2 << "\ni = "<<i <<"\n";
return 0;
}
compilar esto da
warning: unknown escape sequence '\]'
y la salida
a1 = 25
a2 = 28
i = -1073746244
Si lo cambio a
sscanf(line, "[%[^,], %[^]] => %i", a1, a2, &i);
consigo ninguna queja del compilador, pero aún
a1 = 25
a2 = 28
i = -1073746244
Sé que el problema está en el segundo marcador porque
sscanf(line, "[%[^,], %[]] => %i", a1, a2, &i);
da
a1 = 25
a2 = 28
i = 34
Pero quiero usar una condición de terminación para el segundo token. ¿Cómo puedo hacer eso?
-1 no funciona - '% s' coincide con todo hasta el siguiente espacio en blanco, por lo que absorberá el siguiente carácter de puntuación (', 'o'] ') y la coincidencia posterior fallará. –
Dios mío, estoy un poco rezagado ... 8) muy bien votado. – ColWhi