So my program is suppose to change 3 run-on spaces from an input into a single tab in the output. If it comes across 2 spaces, it will replicate the 2 spaces. If it comes across 4 spaces, it will change the 3 spaces into a tab and then output the single leftover space. As of right now my program does funny stuff when it runs into a space...I am unsure where I am doing it wrong. Maybe you guys can help me find out my place(s) of error. Thank you
Code:
#include <stdio.h>
#define MAXLINE 1000
#define TAB 3
int getline(char line[]);
void copy(char to[], char from[]);
//prints out a line with 3 spaces replaced by tabs
//spaces of 2 or 1 between other letters or number
//will remain the same
main(){
int len; //current line length
char spaced[MAXLINE]; //current input line
char tabbed[MAXLINE]; //detabbed line saved here
len = 0;
while ((len = getline(spaced)) > 0){
copy(tabbed, spaced);
printf("%s", tabbed);
}
return 0;
}
//read a line into s, return length
int getline(char s[]){
int c, i;
for(i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
s[i] = c;
if(c == '\n'){
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
//copy from into to: assume to is big enough
//replaces continuous tabs with 3 spaces
void copy(char to[], char from[]){
int i, i2, tmp, tmp2, x;
i = 0;
i2 = 0;
tmp = 0;
//while from[i2] is not equal to end of line
while (from[i2] != '\0'){
//if from[i2] is equal to a blank
//add 1 to tmp
if (from[i2] == ' '){
++tmp;
//if tmp is ever equal to 3
//set to[i] to become a tab
//reset t
if (tmp == 3){
to[i] = '\t';
tmp = 0;
}
}
//else if from[i2] is not a blank
else if (from[i2] != ' '){
//if tmp is equal to 2
//set to[i] and to[i+1]
//to be blanks
if (tmp == 2){
tmp = 0;
for(x = 0; x != 2; ++x){
to[i] = ' ';
++i;
}
to[i] = from[i2];
}
//if tmp is equal to 1
//set to[i] to be blanks
else if (tmp == 1){
tmp = 0;
to[i] = ' ';
++i;
to[i] = from[i2];
}
//otherwise copy from[i2]
//to to[i] as normal
else to[i] = from[i2];
}
++i;
++i2;
}
to[i] = '\0';
}