
ianclever
(usa Arch Linux)
Enviado em 30/11/2013 - 11:31h
gente o que eu estou perguntando aqui na verdade não é bem um erro eu só quero saber se é possível ter 2 scanset dentro de 1 único scanf ou fscanf?
a duvida surgiu depois disso, estou ca eu fazendo um código e lá pelas tantas surgiu a necessidade de agilizar(para eu programador) a escrita formatada em um arquivo texto e a leitura também então optei por escrever tudo que precisava com fprintf e ler com fscanf, a escrita foi ok, foi algo asssim( em um arquivo texto aberto para escrita e posteriormente fechado):
fprintf(stream,"%d\n%s\n%c\n%c\n",inteiro,string,char1,char2);
isso produz uma saida assim(vou ilustrar os \n para ficar mais fácil de entender)
10\n
string\n
c\n
$\n
aí depois dissso( como já disse) fechei o arquivo e reabri agora para leitura e fiz o que seria o certo:
fscanf(stream,"%d %*c %s[^\n] %*c %c %*c %c %*c",&inteiro,string,&char1,&char2);
seria para ele ler primeiramente o inteiro e deixar o \n para o proximo modificador, mas por algum motivo ele já lê direto e enfia ele em algum lugar, então tive que mudar:
fscanf(stream,"%d %s[^\n] %*c %c %*c %c %*c",&inteiro,string,&char1,&char2);
aí ele leu o inteiro e a string e ignorou o \n pq eu mandei ele ignorar então lógicamente eu teria que ler ele no próximo modificador, mas não lia então eu tentei o mesmo do segundo mas sem sucesso:
fscanf(stream,"%d %s[^\n] %c %*c %c %*c",&inteiro,string,&char1,&char2);
daí eu deduzi que o scanset do anterior estava me impedindo de ler o \n , eu até coloquei outro scanset naquele char para poder forçar ele a ler o \n que ficou, mas nada, então para resolver eu fiz o seguinte:
fscanf(stream,"%d %s[^\n]",&inteiro,string);
fscanf(stream,"%*c %c %*c %c %*c",&char1,&char2);
daí eu identifiquei que o modificador de char no fscanf também lê o caractere e já enfia o \n em algum lugar, então só restou um \n voando no espaço, sendo assim eu poderia resumir em uma única linha, mas para isso tenho que usar 2 scansets, a leitura atual está assim(funcionando mas ainda da para melhorar):
fscanf(stream,"%d %s[^\n]",&inteiro,string);
fscanf(stream,"%*c %c %c",&char1,&char2);
Reforço mais uma vez a pergunta, dá para usar 2 ou mais scansets em uma única função scanf ou fscanf?