Hola Buenos tardes a todos! Tengo 2 dudas y espero puedan resolver, es sobre ficheros. Aquí mi primera duda:
1 - Resulta que tengo un archivo.txt con esto:
4
10
6
2
1
20
-102
43
23
65
2
10
1
-5
-10
102
85
97
Son varios números xd. Y este es mi código (funciona bien):
#include <iostream>
#include <stdio.h>
using namespace std;
#define cantidad_fila_imprimir 7
int main()
{
FILE *arch_lectura;
if ((arch_lectura = fopen("archivo.txt", "r+"))== NULL)
cout << "El Archivo no se puede leer." << endl;
else{
int cantidad = 0, numero, i = 0, j = 0;
while(fscanf(arch_lectura, "%d", &numero) != EOF) cantidad++; //cantidad elementos
rewind(arch_lectura); //Cursor al principio
int Arr[cantidad]; //Creamos el array
while(fscanf(arch_lectura, "%d", &Arr[i]) != EOF) i++; //asignamos al array cada elemento
fclose(arch_lectura); //cerramos archivo.
//Mostramos array:
for (i = 0; i<cantidad; i++){
cout << Arr[i] << " ";
j++;
if (j == cantidad_fila_imprimir) {j = 0; cout << endl;}
}
}
return 0;
}
Bueno este código básicamente abre el archivo.txt para lectura, primero cuenta los elementos, posicionamos el cursor al inicio con rewind y luego los lee de nuevo ya que creamos un array con la cantidad de elementos y se los asignamos, y buno después los muestra. Ahora Mi pregunta:
¿Hay alguna forma de almacenar esos datos en algún array (para despues ordenarlos buscar menor mayor o algo así) solamente procesando el archivo una vez (No sé si con punteros o "dinámicamente" se pueda)? (Y no 2 como lo hice yo)
Ahora mi segunda pregunta:
2 - Suponiendo que tengo un archivo2.txt con esto:
2 5
3 3 4
5 5
6 10 8 6
Resulta que cada vez que uso "fscanf" automáticamente me hace un salto de linea, como podría yo leer los datos ?
Por ej:
leo el 2, y en vez de saltar de linea el cursor de mantiene al inicio del 5, y luego leo el 5. Y de alguna forma, que supongo de manera manual, salta de línea y sigue leyendo el número 3, luego el otro 3, luego el 4 y un salto de línea, y así...
Gracias ! Saludos!