duda con programa que cuenta caracteres

Iniciado por dx671, 7 Julio 2011, 01:57 AM

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

dx671

Hola a todos, tengo que preparar un programa que me cuenta los caracteres que introduzco utilizando arreglos y ciclos. Lo que tengo hecho no es mcho, pero voy a explicar lo que trato de hacer



#include <stdio.h>
#include <stdlib.h>
#define tam 1000

int main()
{
int i=0;

char a[tam];

    for(i=0 ;i<1000; i++)
    a = fgetc(i);
    printf("%d", %i);
}

estoy definiendo un array de 1000 caracteres y un contador i que aumente cada vez que agregue uno, y al final recibir el valor de i cuando haga el printf

PiroskY

Explica mejor el ejercicio
Que tiene que hacer exactamente?
A medida que apretás una tecla mostrarla? y también ir mostrando el numero de teclas presionadas?
o simplemente ingresar algo, y al final mostrar cuantos caracteres introdujiste?

dx671

lo que debe hacer es lo siguiente:
escribo X cantidad de caracteres, le doy enter y el programa me dice "escribiste X caracteres", depues me tengo que poner mas exquisito y decir cuantas mayusculas hay, pero lo que mas me interesa es la primera parte
gracias :)

javahat



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 20

int main()
{
    char frase[MAX];
    int i=0;
    int espacio=0;

    gets(frase);

    for(i=0; i<MAX; i++)
    {
      if(frase[i] == ' ')
      {
          espacio++;
      }
    }

    printf("%d caracteres\n",strlen(frase));
    printf("%d espacios\n",espacio);

}



espero te sirva, lo hice en code::blocks 10.05, Windows  :)

leogtz

No necesitas un arreglo para esto, podrías hacerlo así:

#include <stdio.h>

int main(void)
{
    char c;
    unsigned contador = 0;
    while((c = getchar()) != EOF)
    contador++;

    printf("Escribiste : %u\n", contador);
    return 0;
}


Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

PiroskY

Supongo que con el EOF funciona, pero yo lo compararía contra '\n'

rir3760

Se debe comparar contra EOF en caso de error o fin de archivo y contra '\n' para cumplir con el enunciado (debe procesar solo una linea de texto).

Por ultimo se debe cambiar el tipo de la variable "c" en el programa de Leo a "int" ya que ese es el tipo de retorno de la función "getchar":
int c;
unsigned contador = 0;

while((c = getchar()) != EOF && c != '\n')
   contador++;


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

leogtz

Cierto, y también comparar contra '\n', como en el código de rir3760, ya que creo que daría un caracter de más. Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

PiroskY

int c;
unsigned contador = 0;

while((c = getchar()) != EOF && c != '\n')
   if(c != '\n')
      contador++;


ahí quedaría, creo yo

rir3760

Cita de: PiroskY en  7 Julio 2011, 18:16 PM
int c;
unsigned contador = 0;

while((c = getchar()) != EOF && c != '\n')
   if(c != '\n')
      contador++;


ahí quedaría, creo yo
No tendria efecto ya que el cuerpo del bucle (la sentencia de seleccion) se ejecuta mientras el caracter sea distinto de EOF y '\n'. En otras palabras dentro del cuerpo del bucle "c != '\n'" siempre es verdadero (1 en este caso).

Si se debe contabilizar el caracter '\n' esa condicion se puede colocar a continuacion del bucle:
int c;
unsigned contador = 0;

while ((c = getchar()) != EOF && c != '\n')
   contador++;
if (c == '\n')
   contador++;

/* ... */


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language