> 文档中心 > 100 Days of Code-day30-detab(实现从输入的参数中读取)

100 Days of Code-day30-detab(实现从输入的参数中读取)


编写一个程序 detab,用适当数量的空格替换输入中的制表符,以留出下一个制表位。 假设一组固定的制表位,比如每 n 列。 n 应该是变量还是符号参数?

每个n列放置一个制表符停止位,这里把TABINC定义成一个符号参数。

#include#include#define TABINC 8#define MaxParameter 100int main(){char c,*argv[MaxParameter], **temp;int nb, pos, argc;//nb is the space required for tab charactertemp = argv;scanf("%d", &argc);getchar();for (int i = 1; i < argc; i++) {argv[i] = (char *)malloc(MaxParameter * sizeof(char));gets(argv[i]);}pos = 1;while (--argc > 0 && *++temp) {while ((c = *temp[0]++) != '\0'){if (c == '\t'){nb = TABINC - (pos - 1) % TABINC;//while (nb > 0) {//putchar(' ');//++pos;//--nb;//}while (nb--)putchar(' ');pos = 1;//通过该语句直接在打印完空格后,将光标位置更新,这样就不用在打印空格的过程中实时更新光标的位置//输入换行符后,光标位置一定会停在1+TABINC*n (假设初始位置为1,n为整数)//这里的n值并不会影响后续nb的计算结果}else {putchar(c);++pos;}}putchar('\n');pos = 1;//每次读取完参数后,对于光标位置的初始化十分重要}return 0;}