c - 将字符串格式化为 C 中的列

标签 c string printf string-formatting

无论每个字符串的大小如何,我都无法让这个字符串很好地均匀分布到列中。我尝试了不同的格式和其他东西;它只是不工作。该函数的工作方式是,在 printCompanyTable 工作之前,还有另一个函数更新您在下面看到的所有字符串变量,所以我猜这就是问题所在,我想。

int printCompanyInfo() {  // this will print out the format for as long as I need it.
    char discount[30];
    char tax[30];
    if (discountTypeLookup == 0) {
        strcpy_s(discount, 30, "Not Applicable");
    }
    else if (discountTypeLookup == 1) {
        strcpy_s(discount, 30, "before Tax");
    }
    else if (discountTypeLookup == 2) {
        strcpy_s(discount, 30, "After Tax");
    }
    else if (discountTypeLookup == 3) {
        strcpy_s(discount, 30, "Before Tax > 14,500");
    }
    if (payTaxLookup == 0) {
        strcpy_s(tax, 30, "No");
    }
    else if (payTaxLookup == 1) {
        strcpy_s(tax, 30, "Yes");
    }
    printf_s("%s %s %f %s %s %s\n", companyId, companyNameLookup, discountRateLookup, discount, tax, pickUpBayLookup);
    return(0);
}

最佳答案

除了在 link 中接受的答案由 Japu_D_Cret 提供,如果您使用 %-30s 它将把字符串格式化为 30 个字符,但如果字符串更长,它将打印所有这些...

试试这个:

printf_s("%s %s %f %-30.30s %-30.30s %s\n", companyId, companyNameLookup, discountRateLookup, discount, tax, pickUpBayLookup);

使用 . 意味着它将把字符串格式化为恰好 30 个字符,而 - 意味着字符串将左对齐(默认为右对齐)。

编辑:调整代码以反射(reflect)@Jonathan Leffler 所做的更正

关于c - 将字符串格式化为 C 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43022596/

相关文章:

c - 如何检查密码是否包含 C 语言字母

c - 函数指针局部变量的意外值

java - 拆分没有分隔符的字符串

c - 在参数中使用指针时的类型转换

C:在文件中搜索内容

c - "kernel must be loaded first"

mysql - 在空单元格的情况下排除左连接

Java:在字符串变量中累积输出模式?

c - "sprintf"使用 Visual Studio 2013 引发异常

c - 为什么第一个 printf 需要更长的时间?