这个程序该怎么做?我不理解。
问题是:编写一个程序detab,将输入中的制表符替换为适当数量的空格以跳转到下一个制表符停止位。假设有一组固定的制表符停止位,例如每n列。n应该是变量还是符号参数?
我首先用空格(' ')替换了制表符('\t')。但我想这是错误的方法。
请提供建议?
顺便问一下,n应该是变量还是符号参数?
到目前为止的代码:
在这个练习中发布的所有问题中,我都无法理解意思。
这是我的最终代码,请告诉我它是否有任何问题/错误。我认为它正在按照应该的方式工作。
感谢@Nit,@Chrono Kitsune,@dasblinkenlight和所有其他帮助过我的人们。
问题是:编写一个程序detab,将输入中的制表符替换为适当数量的空格以跳转到下一个制表符停止位。假设有一组固定的制表符停止位,例如每n列。n应该是变量还是符号参数?
我首先用空格(' ')替换了制表符('\t')。但我想这是错误的方法。
请提供建议?
顺便问一下,n应该是变量还是符号参数?
到目前为止的代码:
#include<stdio.h>
#define TAB 5
int main() {
int i, c;
while((c = getchar()) != EOF) {
if(c == '\t') {
for(i = 0; i < TAB; ++i)
putchar(' ');
} else
putchar(c);
}
return 0;
}
在这个练习中发布的所有问题中,我都无法理解意思。
这是我的最终代码,请告诉我它是否有任何问题/错误。我认为它正在按照应该的方式工作。
感谢@Nit,@Chrono Kitsune,@dasblinkenlight和所有其他帮助过我的人们。
#include<stdio.h>
#define TAB 8
int main() {
int c, count = 0, space = 0;
while((c = getchar()) != EOF) {
if(c == '\t') {
space = (TAB - (count % TAB));
while(space > 0){
putchar(' ');
count++;
space--;
}
}
else{
putchar(c);
++count;
}
if(c == '\n')
count = 0;
}
return 0;
}
\t
。制表符并不意味着恰好是x个空格,而是1到x个空格,因此我们现在处于下一个制表位,这些制表位位于每行开头的n*x位置。 - Deduplicator\t
,它应该移到下一个制表符停止位。基本上,你要通过输出移动到下一个制表符停止位所需的空格数来复制相同的效果。 - user539810TAB - column%TAB
),以移动到第8列,这是下一个制表符停止位置。 然后打印“crazy”,使您处于第13列。 另一个制表符将您移动到第16列,因此“8-13%8 = 8-5 = 3个空格”。 最后打印“world”。 如果您使用Linux或OS X,则可以在命令行中使用“printf”实用程序来了解它:“printf'hi \ tcrazy \ t world \ n hi crazy world \n”的输出。 (我的空格数量可能有点不正确,但您可以像我说的那样自己尝试)。 - user539810