' \吨'数组

时间:2015-07-06 09:32:52

标签: c arrays tabs whitespace

我已经编写了这个C代码,并在Windows 8.1中的GNU GCC和TURBO C编译器中编译。代码具有大小为20的浮点数组,并使用for循环和' \ t'打印数组。将printf()函数放入for循环中的字符用于间隔目的。 在整个循环中20次' \ t'应该打印相等的空格,但它只打印2个空格,用于a [i] 0到10的值和剩余执行中的regalr空间。 我不明白为什么会这样。是否因为我在打印浮点变量后使用它?

代码C代码如下所示:

#define n 20

    int main()
    {
        float a[n]={0.1,0.9,0.23,0.8,0.32,0.57,0.4,0.14,0.25,0.11,0.7,0.86,0.75,0.19,                    0.55,0.95,0.34,0.29,0.64,0.45},ex,temp,x;
        int i,idx;
        system("cls");

        /*for(i=0 ; i<n ; i++)
        {
            printf("a[%d]: %f\t",i,a[i]);
        }*/

        for(i=0 ; i<n ; i++)
        {
            x=a[i];
            idx=a[i]*10;

            printf("\na[%d]: %f \t idx: %d",i,a[i],idx);
            //printf("\na[%d]: %f *\t idx: %d",i,a[i],idx);
        }

        getch();
        return 0;
    }

O / p的图像如下:

enter image description here

根据图像中显示的o / p,红色区域中的空间小于蓝色区域。这怎么可能?它是什么原因?

3 个答案:

答案 0 :(得分:4)

\t只是一个角色。您的终端将决定如何处理它,通常它意味着&#34;转到下一个标签停止位置&#34;,一个常见的惯例是每8列有这样一个位置。您无法在程序中控制您的终端将使用它做什么。

如果要控制输出格式,请改用printf()提供的功能。转换允许指定字段宽度和精度,使用这些,请参见此处:http://www.cprogramming.com/tutorial/printf-format-strings.html

答案 1 :(得分:3)

没有&#39; \ t&#39;是TAB的转义序列。
并且TAB&#34;将活动位置移动到当前行上的下一个水平制表位置&#34;。
因此,它不会打印相等的空格,而只是将光标移动到当前行的下一个制表位置。

答案 2 :(得分:2)

您可能在制表符空间和填充之间感到困惑。选项卡空格(假设值为8)在屏幕上的6个字符后将留下2个字符的空格,而在8个字符后,将连续的8个空格留空。填充允许我们根据需要对齐要在屏幕上打印的数据。您的问题的可能(和临时)解决方案是:删除printf语句中/ t之后的空格。我希望它有效