Comprueba si un personaje es un espacio.

Estoy creando un progtwig absurdamente simple en C para getchar() con getchar() . El progtwig imprimirá lo que ingresa hasta que presione Entrar y garantizará que sus líneas no tengan más de 80 caracteres cada una. Para hacer esto, mantengo una cuenta stream de cuántos caracteres se han ingresado. Una vez que el recuento de caracteres llegue a 70, el siguiente espacio encontrado causará un salto de línea. Si no se encuentra ningún espacio entre 70-80, se producirá un salto de línea independientemente. Me doy cuenta de que esta es una implementación súper ingenua y podría optimizarse hacia la izquierda y hacia la derecha, pero recuerda, solo estoy fastidiando:

 while ((c = getchar()) != '\n') { if (lineLengthCount < 70) { putchar(c); lineLengthCount++; } else if (lineLengthCount < 80 && (c == ' ')) { printf("%c\n", c); lineLengthCount = 0; } else { printf("%c\n", c); lineLengthCount = 0; } } 

El problema es que el condicional c == ' ' no parece estar comprobando realmente un espacio. Me sale de esta manera:

 fitter happier more productive comfortable not drinking too much regula r exercise at the gym three days a week getting on better with your ass ociate employee contemporaries at ease eating well no microwaved dinner 

donde esperaba que las líneas se truncaran cuando se encontró un espacio. En cambio, no importa qué carácter se ingrese después de la línea 70, se crea una nueva línea. ¿Me estoy perdiendo de algo? ¿Realmente significa algún personaje?

 while ((c = getchar()) != '\n') { if (lineLengthCount < 70) { putchar(c); lineLengthCount++; } else if (lineLengthCount < 80 && (c == ' ')) { printf("%c\n", c); lineLengthCount = 0; } else if (lineLengthCount >= 80){ printf("%c\n", c); lineLengthCount = 0; } else{ putchar(c); lineLengthCount++; } } 

Creo que esto debería funcionar. Eso debería evitar que el otro se ejecute cuando hay menos de 80 caracteres pero el carácter no es un espacio.

EDITAR: Me di cuenta ahora que, en cambio, si lineLengthCount es menor que 80 pero el carácter no es un espacio que no se imprimirá, por lo que agregué otra más al final para solucionarlo.

¿No sería esto más corto y conciso?

 while ((c = getchar()) != '\n') { putchar(c); if((c == ' ' && lineLengthCount >= 70) || lineLengthCount >= 80){ printf("\n"); lineLengthCount = 0; } else ++lineLengthCount; } 

Hay un problema con sus condiciones: si lineLengthCount es> 70 pero el siguiente carácter no es un espacio, el último será golpeado, rompiendo la línea y reiniciando el contador.

Si no está seguro de lo que está pasando, recomendaría dividir el condicional “if” en tres controles explícitos:

 while ((c = getchar()) != '\n') { lineLengthCount++; if (lineLengthCount < 70) { putchar(c); } if (lineLengthCount < 80 && (c == ' ')) { printf("%c\n", c); lineLengthCount = 0; } if (lineLengthCount == 80) { printf("%c\n", c); lineLengthCount = 0; } } 

Si desea ver lo que está sucediendo, escriba alguna salida de depuración en cada "si" para que se dé cuenta de cuándo se llama.

Una vez que funciona, y entiendes por qué, puedes editarlo y combinar los "ifs" ...

Usar ” es completamente válido. También puede intentar usar la función estándar de la biblioteca isspace () para verificar si el carácter es un espacio. Esta función devuelve una expresión booleana, como en:

 char ch = '0'; if (isspace(ch)) //the char is a space... 

Por “es espacio”, esta función en realidad significa que es cualquier carácter de “espacio en blanco”, por lo que incluye “\ n” o cualquier otro carácter que se imprima como espacio vacío.

También podrías el valor decimal 32 que significa lo mismo que un espacio:

 if (ch==32) 

Sin embargo, para facilitar la lectura prefiero usar la primera versión!