C sharp - contar \n usando getchar()

 
Vista:
sin imagen de perfil

contar \n usando getchar()

Publicado por Diego (5 intervenciones) el 25/10/2015 18:48:47
Buenas tardes, desde ayer me estoy rompiendo la cabeza para intentar hacer el siguiente ejercicio de una mejor manera:


Escriba un programa que lea caracteres del teclado empleando getchar() y los cuente hasta
encontrar EOF.
Luego debe imprimir la cantidad de caracteres y líneas encontradas.


"luego de leer lo interpreté como que tengo que contar los caracteres imprimibles y de los no imprimibles solo cuente el salto de linea"
Dada la siguiente entrada desde consola: \n\nASDC\nEOF tengo entendido que en el buffer quedará la siguiente secuencia: \n\nA\nS\nD\nC\nEOF



Tampoco encontré como usar la siguiente manera de compilar en consola desde debian.


En GNU/Linux puede comprobar la funcionalidad con los comandos wc -c y wc -l.
Nota: Puede leer de teclado o invocar el programa con un archivo cómo parámetro. Por
ejemplo:
./ejecutable.bin < archivo_param
Esto hace que el contenido de archivo_param se vea desde el programa ejecutable.bin
como proveniente del teclado.
Notará que si utiliza sólo el teclado, el programa no funcionará hasta que ingrese ENTER.
Esto es propio del manejo de buffers en C.

"Supongo que a la hora de compilar el programa tengo que usar el signo < luego del ejecutable, pero no sé como usar el archivo_param dentro del programa, ya que apenas llegamos a mencionar los arreglos y todavia no comenzamos a ver archivos."


Este es el último código que logre hacer:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
int main(){
	int c_act, c_imprimibles = 0, lineas = 0, c_totales = 0;
	do{
		c_act = getchar();
		if ((c_act == '\n') || ((c_act > 31) && (c_act < 127))){
			++c_totales;
			if ((c_act > 31) && (c_act < 127)){
				++c_imprimibles;
			}
		}
	}while(c_act != EOF);
	lineas = c_totales - (c_imprimibles * 2);
	printf("Cantidad de caracteres imprimibles: %d\t cantidad de lineas: %d\n", c_imprimibles, lineas);
	return 0;
}

Lo estuve testeando y pareciera funcionar, pero no tuve en cuenta que los no imprimibles entrarán en la condicion ya que requieren un enter para ingresarse(yo crei que se ingrsaban como el EOF; sin necesidad de un enter).

Mejorando eso los contaría bien, pero me parece que esta manera en que lo hice puede no ser la mejor(sin involucrar a arreglos o a punteros) Así que si tienen alguna sugerencia para plantearlo de otra manera se los agradecería.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder