diff --git a/The C Programming Language/1.20.c b/The C Programming Language/1.20.c new file mode 100644 index 0000000..9db3a33 --- /dev/null +++ b/The C Programming Language/1.20.c @@ -0,0 +1,72 @@ +#include + +int _getline(char s[], int lim) +{ + int c, i, j; + for (i = 0; (c = getchar()) != '\n'; ++i) + { + if (i < lim - 1) + s[i] = c; + } + + j = i; + if (j > lim - 1) + j = lim - 1; + s[j] = '\0'; + return j - 1; +} + +void entab(char to[], char from[], int columns) +{ + int is_placing_spaces = 0; + int remaining_spaces = columns; + int i_to = 0; + int i_from = 0; + + while (from[i_from] != '\0') + { + if (from[i_from] == '\t') + is_placing_spaces = 1; + + if (is_placing_spaces) + { + if (remaining_spaces == 0) + { + is_placing_spaces = 0; + remaining_spaces = columns + 1; + ++i_from; + } + else + { + to[i_to] = '_'; + ++i_to; + } + } + else + { + if (remaining_spaces == 0) + remaining_spaces = columns; + + to[i_to] = from[i_from]; + ++i_to; + ++i_from; + } + + --remaining_spaces; + } + + to[i_to] = '\0'; +} + +main() +{ + int size = 500; + char from[size]; + char to[size]; + while (1) + { + _getline(from, size); + entab(to, from, 4); + printf("%s\n", to); + } +}