[Ayuda C]Consejos para TP Final

Iniciado por n-utz, 27 Septiembre 2016, 03:40 AM

0 Miembros y 1 Visitante están viendo este tema.

n-utz

[PRIMERA DUDA RESUELTA POR MAFUS]
Buenas, estoy ya preparando mi TP final para aprobar la asignatura, vengo en busca de unos consejos y sacarme varias dudas. El TP es con manejo de archivos y estructura, nada complicado.
Lo que pasa que quiero hacerlo lo mas optimo posible y por eso acudo a ustedes.

Mi primera duda es que en el programa tengo que leer bocha de datos ingresados por teclado, y siempre en todos mis programas tengo problemas, al combinar gets y scanf, con el buffer. Que funciones me recomiendan usar para lecturas de datos?

Recuerden que tengo windows y no se si es conveniente poner un fflush(stdin) cada dos lineas.

Tengo que leer cadenas y numericos, no mas.

(Ire cambiando el post y editandolo entre tilde y cruz cada vez que tengo una pregunta, para evitar doble, triple, cuadruple post) Gracias a los interesados!

Ademas les pido a los que tengan, algun paper con apuntes de C especificamente de archivos, ya que los que tengo dejan algo que desear.



[SEGUNDA DUDA]

Modifico este post para no plaguear el sub-foro.
Ahora tengo una duda con el archivo, al grabarlo lo grabo con extension .txt, y graba todo perfectamente, y si lo leo desde el IDE lo imprime perfectamente. El problema esta cuando yo voy directamente al txt creado y lo abrio, se ven todos simbolos ilegibles, como si fuera basura, y me han dicho que no tiene porque ser asi.

Mi duda es como hacer para que se no se grabe "basura" en el txt, y tambien pueda modificarlo desde alli.

Gracias.

MAFUS

No uses fflush ( stdin ). Esta función sólo está pensada para flujos de salida. Usada en flujos de entrada su comportamiento no está definido, puede pasar cualquier cosa.

No uses gets, es una función obsoleta por su inseguridad y está marcada a desaparecer.

n-utz

Cita de: MAFUS en 27 Septiembre 2016, 10:41 AM
No uses fflush ( stdin ). Esta función sólo está pensada para flujos de salida. Usada en flujos de entrada su comportamiento no está definido, puede pasar cualquier cosa.

No uses gets, es una función obsoleta por su inseguridad y está marcada a desaparecer.

Perfecto, y entonces? Me manejo con scanf nada mas? Como controlo el buffer? Combino getchar y scanf?

MAFUS

Scanf tiene muchas opciones, incluso puede dimensionar el buffer por ti con el especificador m.
Pásate por aquí y verás todo lo que puede hacer: https://linux.die.net/man/3/scanf

Y printf también tiene más opciones de las que te habrán contado. Dale un repaso también a su página de manual.

n-utz

Cita de: MAFUS en 27 Septiembre 2016, 20:55 PM
Scanf tiene muchas opciones, incluso puede dimensionar el buffer por ti con el especificador m.
Pásate por aquí y verás todo lo que puede hacer: https://linux.die.net/man/3/scanf

Y printf también tiene más opciones de las que te habrán contado. Dale un repaso también a su página de manual.

Gracias genio! Estas funciones son compatibles con windows no?

MAFUS

És la librería estándar de C. Sirve para cualquier compilador que siga el estándar.

n-utz

Lo que pasa que no logro encontrar una funcion de scanf que me lea los espacios.
Cual deberia utilizar  o de que forma?
fscanf(stdin...) no me funciona tampoco.

MAFUS

scanf tiene una especie de expresión regular: si sustituyes %s por %[] scanf aceptará solamente los caracteres que haya entre corchetes, pero si el primer caracter que hay entre los corchetes es el acento circunflejo ^ scanf leerá todos los caracteres hasta encontrar los de la lista.
Así %[^\n] leerá toda la cadena hasta encontrar el caracter de nueva línea.

n-utz

#8
Cita de: MAFUS en 27 Septiembre 2016, 22:44 PM
scanf tiene una especie de expresión regular: si sustituyes %s por %[] scanf aceptará solamente los caracteres que haya entre corchetes, pero si el primer caracter que hay entre los corchetes es el acento circunflejo ^ scanf leerá todos los caracteres hasta encontrar los de la lista.
Así %[^\n] leerá toda la cadena hasta encontrar el caracter de nueva línea.

perfecto, disculpa, se que esa teoria esta en la pagina que me pasaste pero no me manejo muy bien con el lexico del rubro en ingles.

Gracias una vez mas.


Plantee una nueva duda aqui mismo, editando el post principal para evitar el doble post.

Gracias a los interesados!

MOD: No hacer doble post.