2017-03-25 2 views
1

Ich habe ein Problem mit dieser Zeichenfolge gleichmäßig in Spalten trotz trotz welcher Größe jeder der Zeichenfolgen sind. Ich habe verschiedene Formatierungen und andere Sachen ausprobiert; es funktioniert einfach nicht. Die Funktionsweise der Funktion ist, dass, bevor die printCompanyTable funktioniert, es eine andere Funktion gibt, die alle String-Variablen aktualisiert, die Sie unten sehen, also denke ich, dass das das Problem ist, denke ich.Formatieren Sie eine Zeichenfolge in Spalten in C

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); 
} 
+1

in Ihrer Ausgabe reflektieren Sie eine Breite für die Spalte festgelegt und somit gleichmäßig verteilte Säulen halten - hier als Referenz http://stackoverflow.com/q/1809399/3858121 –

+0

Es gibt eine Menge globaler Variablen - das ist ein schlechtes Zeichen. –

Antwort

1

Neben der akzeptierte Antwort in der durch Japu_D_Cret bereitgestellt link, wenn Sie %-30s verwenden es die Zeichenfolge 30 Zeichen formatiert werden, aber wenn der String länger ist, wird es all das drucken ...

mit Try this:

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

mit der . bedeutet, dass es die Zeichenfolge genau 30 Zeichen formatiert werden und die - bedeutet die Zeichenfolge gerechtfertigt gelassen werden (die Standardeinstellung ist rechtsbündig).

EDIT: den Code Berichtigt, um die Korrektur von @ Jonathan Leffler

+1

Beachten Sie, dass "% -. 30s" bedeutet "linksbündig; Abschneiden bei 30, wenn Sie nicht früher fertig sind". Wenn die Feldbreite 30 sein soll, auch wenn die Zeichenfolge kürzer ist, müssen Sie% -30.30s verwenden. Im allgemeinen Fall können Sie '% - *. * S' verwenden und für jedes' * 'vor der Zeichenkette den gleichen 'int'-Wert angeben - oder Sie können in der Tat andere Werte für die beiden Ganzzahlen verwenden, wenn Sie möchten. aber oft wollen Sie den gleichen Wert zweimal. –

+0

Richtig !! den Code entsprechend editiert, Danke! – karkazz

Verwandte Themen