elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  contador de dos caracteres consecutivos en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: contador de dos caracteres consecutivos en C  (Leído 3,995 veces)
kellogs95

Desconectado Desconectado

Mensajes: 4


Ver Perfil
contador de dos caracteres consecutivos en C
« en: 10 Noviembre 2013, 15:01 pm »

Hola pues eso: Necesito hacer un programilla y queria saber si alguien podria decirme al menos el error que he cometido.

Este no es el programa total ya que tengo que meterlo en una funcion.

el programa tendria que sumar al contador+1 cada vez que hubiese un '0' y un '1' juntos: ej; 10101110  ...... contador=3

Código
  1. #include <stdio.h>
  2. int main (void){
  3.  
  4. char actual;
  5. char anterior;
  6. int contador = 0;
  7.  
  8. printf ( "\n Introduzca la serie digital terminada en (enter):");
  9.  
  10. while (actual != '\n'){
  11.  
  12. if ((anterior == '0') && (actual = '1')){
  13. anterior = actual;
  14. contador++;}
  15.  
  16. if ((anterior == '1') && (actual== '0')){
  17. anterior = actual;
  18. contador++;}
  19.  
  20. scanf ("%c", &actual);}
  21.  
  22. printf (" Numero de grupos es: %d", contador);
  23. fflush (stdout);
  24.  
  25. return 0;
  26. }
  27.  
  28.  


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: contador de dos caracteres consecutivos en C
« Respuesta #1 en: 10 Noviembre 2013, 16:16 pm »

* Lo primero que salta a la vista es el uso de las variables "actual" y "contador" sin antes asignarles un valor, eso sucede en la primera iteración del bucle.

* En la primera sentencia if del bucle:
Código
  1. if ((anterior == '0') && (actual = '1')){
Utilizas el operador de asignación "=" cuando debería ser el de comparación "==".

* Debes actualizar el valor de la variable "anterior" en cada iteración del bucle, una opción aquí es, si los dígitos son distintos, asignar el valor '\0' para descartar el par de dígitos (al parecer esa es la intención en tu programa).

El bucle corregido (se puede acortar utilizando el operador lógico OR "||"):
Código
  1. char anterior = '\0';
  2.  
  3. /* ... */
  4.  
  5. while (scanf("%c", &actual) == 1 && actual != '\n'){
  6.   if ((anterior == '0') && (actual == '1')){
  7.      anterior = '\0';
  8.      contador++;
  9.   }else if ((anterior == '1') && (actual == '0')){
  10.      anterior = '\0';
  11.      contador++;
  12.   }else
  13.      anterior = actual;
  14. }

Una forma mas corta esta basada en el uso del especificador "%1[01]" con scanf, con el nos aseguramos de leer un solo carácter igual a '0' o '1' (seguido de un '\0', por eso se utilizan arrays) y en caso de que los bits sean iguales se puede regresar uno a la entrada estándar con ungetc:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   char a[2];
  7.   char b[2];
  8.   int i;
  9.  
  10.   printf("Introduzca la serie digital:");
  11.   fflush(stdout);
  12.  
  13.   i = 0;
  14.   while (scanf("%1[01]%1[01]", a, b) == 2)
  15.      if (*a != *b)
  16.         i++;
  17.      else
  18.         ungetc(*b, stdin);
  19.  
  20.   printf("Numero de pares distintos: %d\n", i);
  21.  
  22.   return EXIT_SUCCESS;
  23. }

Un saludo


En línea

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
kellogs95

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: contador de dos caracteres consecutivos en C
« Respuesta #2 en: 10 Noviembre 2013, 19:17 pm »

Muchisimas Gracias, Anda perfectamente  ;-)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Contador de caracteres [JAVA]
Java
diegoak 2 11,343 Último mensaje 17 Marzo 2005, 09:34 am
por diegoak
lista de numeros consecutivos
Java
Dem0ny 4 16,622 Último mensaje 16 Noviembre 2008, 22:41 pm
por Dem0ny
Cuadrar tablas/divs por bloques seguidos/consecutivos (css)
Desarrollo Web
Cergath 2 7,727 Último mensaje 1 Mayo 2010, 19:01 pm
por Syphroot
Alguien sabe buscar palabra de x caracteres y los demás caracteres a continuació
Programación Visual Basic
usuario oculto 3 5,055 Último mensaje 2 Agosto 2010, 18:36 pm
por Psyke1
Delimitadores consecutivos
Scripting
Gokuman 2 2,487 Último mensaje 14 Marzo 2015, 04:03 am
por FranciskoAsdf
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines