2013-03-13 4 views
1

Je suis en train de câbler un code en C qui est censé imprimer à l'écran (en utilisant printf()) une table de multiplication où le coin inférieur droit (le produit max de la table) est passé à la fonction en tant que MaxMult.générer un tableau char de l'espace blanc en longueur variable

par exemple pour MaxMult = 4 il faut imprimer:

1 2 3 4 

    2 4 6 8 

    3 6 9 12 

    4 8 12 16 

les exigences sont que la table sera aligné à droite, et se trouve ici mon problème:

pour chaque numéro, le nombre de l'espace blanc à sa gauche est différente. et parce que j'en ai besoin pour suivre la demande que le MaxMult ait seulement 1 espace blanc à sa gauche, tout le reste est en référence à lui. Au début, je pensais que je pourrais peut-être passer une variable à printf. quelque chose comme ceci:

printf("% Num_Of_Wite_Space d", currNum) 

mais je ne peux pas sembler pouvoir faire ceci.

alors maintenant j'ai besoin d'un moyen de générer une chaîne d'espace blanc, de longueur différente en fonction du nombre de chiffres de chaque numéro, afin de passer IT à printf. (j'espère que je suis assez clair ..)

quelqu'un peut-il me dire comment faire cela?

Répondre

2

Le moyen le plus simple est d'utiliser simplement une largeur de champ fixe pour chaque valeur, par ex.

printf("%3d", a[i][j]); 

Cela entraînera chaque valeur de sortie pour être remplie par des espaces si nécessaire pour donner une largeur de champ de 3, par exemple,

1 2 3 4 

2 4 6 8 

3 6 9 12 

4 8 12 16 

De toute évidence, si vous avez besoin d'imprimer des valeurs avec plus de deux chiffres, vous devez augmenter la largeur du champ en conséquence.

Si vous avez besoin d'une largeur de champ qui sera déterminé au moment de l'exécution plutôt que d'être fixé à la compilation, vous pouvez utiliser:

printf("%*d", field_width, a[i][j]); 

Voir man printf pour plus de détails.

+0

Cela ne fonctionnera pas pour les cas où la finale (en bas à droite) la valeur est supérieure à 2 chiffres. – unwind

+0

@unwind: true - c'était juste un exemple illustratif pour ce cas particulier - j'ai mis à jour la réponse maintenant pour couvrir différentes largeurs de champs et largeurs de champs qui sont spécifiées à l'exécution plutôt qu'à la compilation. –

3

quelque chose comme ceci:

printf("% Num_Of_Wite_Space d", currNum)

mais je ne peux pas sembler être en mesure de le faire.

Bien sûr, vous pouvez le faire. La syntaxe est:

printf("%*d", fieldWidth, currNum); 

Notez que fieldWidth est la largeur totale de (espaces + nombre).

+0

Merci Paul! J'ai corrigé la réponse. –

0

Il est pas trop difficile:

int width = 10; //< number of chars in one column 
printf("%*d", width, a[i][j]); 

Vous pouvez définir la largeur de colonne fixe ou utiliser des valeurs calculées à partir tableau:

int width[COLS]; 
int a[ROWS][COLS]; 
int row, col; 

... // fill in a and width 

for (row = 0; row < ROWS; ++row) 
{ 
    for (col = 0; col < COLS; ++col) 
    { 
     printf("%*d", width[col], a[row][col]); 
    } 
    printf("\n"); 
} 
Questions connexes