标签长度可变(\ t)

时间:2017-01-20 12:46:11

标签: c printf

我是编码和尝试完成作业的初学者。

虽然我已经解决了我的问题,但在这样做的时候,我遇到了意想不到的\ t。我在这里得到了不同的标签长度​​\ t \ t。这是我的代码:

  #include<stdio.h>

int calculate_intpart_qutent(int dividend, int diviser);
int main()
{

    int a;
    int b;
    int choice;


    do
    {
        printf("Enter the Dividend (a) :\t");
        scanf("%d", &a);

        printf("\nEnter the Divisor (b) :\t");
        scanf("%d", &b);

        printf("\n\nThe quotient is:\t%d", calculate_qutent(a, b));

        printf("\n\nDo you want to try again?(Y\\N):\t");
        choice = getchar();

        if (choice == '\n') choice = getchar();
        printf("\n\n\n");

    } while (choice=='y'|| choice=='Y');


 }

int calculate_intpart_qutent(int dividend, int diviser)
{
    return (dividend/diviser);

}

这是我的输出:

enter image description here

由于我在两个第一个printf语句中使用了单选项卡,为什么我在输出屏幕上获得不同的选项卡长度?我在这里做错了什么?

在你投票并埋葬这个问题之前,请考虑我是C的初学者。任何帮助将不胜感激。

我正在使用Visual Studio 2017 RC。

2 个答案:

答案 0 :(得分:5)

  

由于我在两个第一个printf语句中使用了单选项卡,为什么我在输出屏幕上获得不同的选项卡长度?

使用标签won't guarantee打印的空格数。

如果您想要printf中的固定长度,请尝试使用%-30s之类的内容。它保证打印的字符串有30个空格,-表示左对齐。

    printf("%-30s", "Enter the Dividend (a) :");
    scanf("%d", &a);

    printf("\n%-30s", "Enter the Divisor (b) :");
    scanf("%d", &b);

答案 1 :(得分:3)

'\ t'字符会将文字与下一个'\ t'停止对齐。在您的情况下,Tab每隔8个字符停止一次。

printf("Enter the Dividend (a) :\t");

'\ t'之前的字符数等于24.所以下一个'\ t'将在8 * 4 = 32nd Position处对齐。

printf("\nEnter the Divisor (b) :\t");

'\ t'= 23之前的字符数。因此,下一个'\ t'将在8 * 3 =第24位置对齐。

这不是问题,你没有做错。您需要了解标签在终端中的行为方式(因为用户可以更改标签宽度)。您可以删除'\ t'并在printf语句中使用固定长度,如@artm answer中所述。