练习1-20
编写程序detab ,将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方。假设制表符终止位的位置是固定的,比如每隔n列就会出现一个制表符终止
可以通过这篇文章了解制表符的原理:
在这篇文章了解了什么是制表符终止位?_Eureka1024的博客-CSDN博客_制表符终止位
#include#define N 8 int main(){ //制表符原理 printf("1234567t0n"); printf("12345678t0n"); printf("123456789t0n"); int c ; int pos = 0; int nb = 0; while((c=getchar()) != EOF) { //只要不是制表符就输出,并且将pos移到制表符前的第一个字符 if(c != 't') { putchar(c); pos++; if(c == 'n')//这里需要对末尾的换行符进行处理,不然第二次的时候会出现错误 pos = 0; } else { //对N(8)进行取模,再用N减去它得到得到需要填充空格的个数 //假如前面输入了abctxyz,则pos移动到c字符的位置,pos的值为3, //由此nb = N-pos%N计算可得 nb = 5,因此需要填充的空格个数为5个 //假如前面输入了12345678abctxyz,则pos移动到c字符的位置,pos的值为11, //由此nb = N-pos%N计算结果nb也是为5,填充的空格个数也是为5个,结果也是正确的 nb = N-pos%N; while(nb>0) { putchar(' '); --nb; } pos = 0;//重新计算 } } return 0; }
输出如下:



