El lenguaje de progtwigción C K&R ejercicio 1- 9

Soy nuevo aquí y relativamente nuevo a la lógica de progtwigción en general. En un esfuerzo por desarrollar mi habilidad, comencé a leer esta excelente obra literaria. Realmente siento que estoy captando bien los conceptos, pero este ejercicio parece haberme tomado por sorpresa. Puedo producir el progtwig, pero algunos de los ejemplos que he visto parecen introducir algunos conceptos que aún no están cubiertos en el libro, como los ejemplos aquí . inspace parece estar cumpliendo una función que es más que una simple variable creada por el progtwigdor.

 #include  int main(void) { int c; int inspace; inspace = 0; while((c = getchar()) != EOF) { if(c == ' ') { if(inspace == 0) { inspace = 1; putchar(c); } } /* We haven't met 'else' yet, so we have to be a little clumsy */ if(c != ' ') { inspace = 0; putchar(c); } } return 0; } 

En el siguiente ejemplo, la pc parece estar haciendo algo con respecto al conteo de espacios, pero no estoy seguro de qué.

Logré crear un progtwig que complete esta tarea pero estaba usando solo la variable c que creé, por lo que entiendo su propósito.

El objective de este código es copiar texto y si hay más de un espacio ' ' impresión consecutiva solo un espacio.

La inspace variable se utiliza para realizar un seguimiento de si la última vez que se imprimió el carácter era de espacio o no.
si inspace es cero significa que se imprimió un carácter que no era espacio. y
si inspace es uno significa que se imprimió un último espacio de tiempo.

Por lo tanto, si inspace es cero la próxima vez que scape se pueda imprimir al leer un scape, y si inspace es una, entonces se puede encontrar el siguiente scape consecutivo para no imprimir espacio.

Ver C es la lectura actual de caracteres. ( leer comentarios )

  if(c == ' ') // currently space read { if(inspace == 0) // last time non-space printed, So space can be print { inspace = 1; // printing space so switch inspace 1 putchar(c); // print space } } 

Siguiente if

 if(c != ' ') // A char not space read, its to to print unconditionally { inspace = 0; // remember that non-scape print putchar(c); } 

Me tomó un tiempo, pero esta es la respuesta, creo.

 #include  main() { int c, blank; blank = 0; while ((c=getchar()) != EOF){ if (c == ' '){ if (blank == 0){ printf("%c", c); blank = 1; } } if (c != ' '){ if (blank == 1){ blank = 0; } printf("%c", c); } } } 

inspace es esencialmente una variable para indicar que usted está o no está en el estado de “solo visto un espacio”. Entras en este estado después de ver un espacio, y sales de este estado cuando ves un espacio no. Imprime su entrada solo si no está en el estado de inspace , por lo tanto no imprime múltiples espacios adyacentes.

Logré crear un progtwig que complete esta tarea pero estaba usando solo la variable c que creé, por lo que entiendo su propósito. En su progtwig, si la entrada es “hola mundo”, ¿es su salida exacta? El progtwig que publicaste mostrará “hola mundo” (comprimiendo los múltiples espacios entre las palabras hasta uno).