* 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:
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 "||"):
char anterior = '\0';
/* ... */
while (scanf("%c", &actual
) == 1 && actual
!= '\n'){ if ((anterior == '0') && (actual == '1')){
anterior = '\0';
contador++;
}else if ((anterior == '1') && (actual == '0')){
anterior = '\0';
contador++;
}else
anterior = actual;
}
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:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char a[2];
char b[2];
int i;
printf("Introduzca la serie digital:");
i = 0;
while (scanf("%1[01]%1[01]", a
, b
) == 2) if (*a != *b)
i++;
else
printf("Numero de pares distintos: %d\n", i
);
return EXIT_SUCCESS;
}
Un saludo