У меня есть следующий код для замены вкладок в stdin на четыре пробела.
Когда у меня есть stdin, разделенный двумя пробелами, например, «tab tab», последний printf печатает правильную строку «tab tab», однако, когда мой ввод является разделенной табуляцией «tab tab», а затем добавляются четыре пробела вместо этого, последний printf печатает только строку «tab» и ничего более. Любой совет приветствуется.
#include <stdio.h>
#define MAX 1000
#define TAB 4
void read_stdin(char s[], int len);
int main(){
char str[MAX];
read_stdin(str, MAX);
return 0;
};
void read_stdin(char s[], int len){
int i, ii;
int c;
for (i = 0; i < len && (c = getchar()) != EOF; i++){
printf("c = %d, i = %d\n", c, i);
if (c == '\t'){
for (ii = 0; ii < TAB; ii++){
printf("space ");
s[i] = ' ';
i++;
printf("i = %d\n", i);
};
} else {
s[i] = c;
};
};
s[i] = '\0';
printf("last i = %d\n", i);
printf("string completed: %s\n", s);
};
в консоли, вкладки разделены пробелом
tab tab
c = 116, i = 0
c = 97, i = 1
c = 98, i = 2
c = 32, i = 3
c = 116, i = 4
c = 97, i = 5
c = 98, i = 6
c = 10, i = 7
last i = 8
string completed: tab tab
и вкладки разделены символом табуляции
tab tab
c = 116, i = 0
c = 97, i = 1
c = 98, i = 2
c = 9, i = 3
space i = 4
space i = 5
space i = 6
space i = 7
c = 116, i = 8
c = 97, i = 9
c = 98, i = 10
c = 10, i = 11
last i = 12
string completed: tab