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
			
			
			
				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?
			
			
			
				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 :)
			
			
			
				
#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  :)
			
			
			
				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.
			
			
			
				Supongo que con el EOF funciona, pero yo lo compararía contra '\n'
			
			
			
				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
			
			
			
				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.
			
			
			
				int c;
unsigned contador = 0;
while((c = getchar()) != EOF && c != '\n')
   if(c != '\n')
      contador++;
ahí quedaría, creo yo
			
			
			
				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
			
 
			
			
				cierto, pero entonces me parece que no contaría uno de mas