Tengo un archivo de texto con el siguiente contenido:El uso de [] en fscanf()
"abc","def","ghi"
las siguientes obras para leer el contenido del archivo correctamente:
int main()
{
char name[1024] = {0};
FILE *file = fopen("file.txt", "r");
while(1)
{
if (fscanf(file, " %[\",]s ", name) == EOF)
break;
if (fscanf(file, " %[a-zA-Z]s ", name) == EOF)
break;
printf("%s\n", name);
}
return 0;
}
Sin embargo, la siguiente falla :
int main()
{
char name[1024] = {0}, garbage[5];
FILE *file = fopen("file.txt", "r");
while(1)
{
if (fscanf(file, " %[\",]s%[a-zA-Z]s ", garbage, name) == EOF)
break;
printf("%s\n", name);
}
return 0;
}
estoy usando MSVC++ 08. ¿Qué me falta? Estoy buscando una solución con fscanf()
solo en el while
loop.
Mientras que hay un montón de sugerencias que permitan solucionar el problema, la mejor solución es no utilizar 'fscanf' para este tipo de cosas. Obtendrá una solución mucho más robusta (es decir, tratará casos de bordes extraños y entradas mal formadas) si escribe su propia máquina de estado lexer. –
+1 Oli Charlesworth :) – pmg
@Oli: estoy de acuerdo. Estaba resolviendo un problema de programación en el que no tenía que lidiar con entradas raras. para los casos de entrada totalmente válidos, me encantaría hacerlo en la máquina, en lugar de hacerlo manualmente. – Donotalo