Ver Mensaje Individual
  #3 (permalink)  
Antiguo 22/05/2006, 12:22
pitukilloloco
 
Fecha de Ingreso: mayo-2006
Mensajes: 40
Antigüedad: 18 años, 7 meses
Puntos: 0
Aqui el problema es que la funcion fscanf se "come" los caracteres "nueva-linea" y no tienes manera de saber cuando lo hace. Una solucion que se me ocurre es de que leas caracter por caracter hasta encontrar el que corresponde a la nueva linea o hasta encontrar un digito, y en caso de encontrar el digito, devolverlo al flujo de entrada para aplicar la funcion fscanf y lea el siguiente entero.
Te paso a continuacion un pequeño programa en C que resuelve el problema (aqui supongo que los enteros estan en ARCHIVO.TXT). El programa solamente despliega los dos primeros numeros de cada linea o solo uno en caso de que no haya mas numeros en esa linea.
Código:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

main ()
{
	FILE *fp;
	int d1, d2;
	char ch;

	if ((fp = fopen ("archivo.txt", "r")) == NULL) {
		fprintf (stderr, "\nError al abrir el archivo.\n");
		return EXIT_FAILURE;
	}

	do {
		fscanf (fp, "%d", &d1);
		printf ("%d", d1);
		do {
			ch = fgetc (fp);
		} while (ch != EOF && ch != '\n' && !isdigit (ch));
		if (ch == EOF)
			break;
		if (ch == '\n') {
			printf ("\n");
			continue;
		}
		ungetc (ch, fp);
		fscanf (fp, "%d", &d2);
		printf (" %d\n", d2);
		do {
			ch = fgetc (fp);
		} while (ch != EOF && ch != '\n');
		if (ch == EOF)
			break;
	} while (!feof (fp));

	fclose (fp);
	return EXIT_SUCCESS;
}