Usando fscanf () para saltar una cadena

El archivo de entrada es tal que tiene una cadena seguida por un número entero en la primera línea y desde la segunda línea tiene una cadena seguida por 2 números enteros. Mi código de abajo funciona bien, pero ¿hay alguna manera de omitir la cadena? Solo lo estoy escaneando con un conjunto de caracteres de carácter receptor [30]. En realidad no necesito este valor, ¿cómo puedo usar fscanf () para omitir esta cadena y simplemente leer números enteros?

#include #include int main() { int v,i=0,f=1; static int *p,*q; FILE *fp; char sink[30]; fp = fopen("some.txt","r"); while(!feof(fp)) { if(f) { fscanf(fp,"%s %d",sink,&v); p = (int *)malloc(sizeof(int)*v); q = (int *)malloc(sizeof(int)*v); f=0; } else { fscanf(fp,"%s %d %d",sink,&p[i],&q[i]); i++; } } fclose(fp); printf("The input vertices are\n"); for(i=0;i<v;i++) printf("%d %d\n",p[i],q[i]); return 0; } 

Para descartar datos en scanf , usa un asterisco entre el especificador de formato como %*s , %*c etc. Esto es lo mismo para fscanf . Simplemente agregue un asterisco para escanear y descartar la cadena:

 fscanf(fp,"%*s %d",&v); 

Esto escaneará una cadena del archivo, la descartará y luego escaneará y asignará un número entero a v . Puedes hacer lo mismo para tu segundo fscanf :

 fscanf(fp,"%*s %d %d",&p[i],&q[i]); 

Si su entrada está orientada a la línea, es mucho mejor utilizar la entrada orientada a la línea. Como fgets() , que te permite leer líneas enteras. Por supuesto, hacer un seguimiento de si la línea de lectura es la primera o no es bastante fácil.

También:

  • Debe verificar el valor de retorno de fscanf() (y otras funciones de E / S) ya que pueden fallar.
  • No lance el valor de retorno de malloc() en C.