【问题标题】:Variable length of tab (\t)制表符的可变长度 (\t)
【发布时间】:2017-01-20 12:46:11
【问题描述】:

虽然我已经解决了我的问题,但是在这样做时我遇到了 \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);

}

这是我的输出:

由于我在前两个 printf 语句中都使用了单个制表符,为什么我的输出屏幕上的制表符长度不同?我在这里做错了吗?

我正在使用 Visual Studio 2017 RC。

【问题讨论】:

    标签: c printf


    【解决方案1】:

    由于我在前两个 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);
    

    【讨论】:

    • 谢谢您,先生!对我很重要。请将此问题标记为重复问题。
    【解决方案2】:

    '\t' 字符会将文本与下一个 '\t' 停止对齐。在您的情况下,制表符在每 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 =24th 位置对齐。

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

    【讨论】:

    • 技术上“标签在所用终端中的行为方式”,而不是“在 C 中”。
    猜你喜欢
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    相关资源
    最近更新 更多