0

此代码每次都要求输入名称、方向和数字,并将其保存在数组中。它会询问您是否要继续。0 用于输入另一个联系人,1 用于打印列表。我尝试使用 \t 在其标题下对齐每个项目,当我输入的字符串没有空格时它可以完美地工作,但是当我使用空格时,字符串不对齐。问题是什么?我想不通。提前致谢。

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>

void desplegar(int, char[][20], char[][20],char[][20]);

int main()
{
    char nombres[20][20];
    char direcciones[20][20];
    char numeros[20][20];
    int opcion = 0;
    int contactos = 0;

    system("hostname");

    do {

        printf("\nIngrese el nombre del contacto: ");
        gets(nombres[contactos]);

        printf("\nIngrese la direccion del contacto: ");
        gets(direcciones[contactos]);

        printf("\nIngrese el numero del contacto: ");
        gets(numeros[contactos]);

        contactos++;

        printf("\nDesea ingresar otro contacto? (0/1): ");
        scanf("%d",&opcion);
        getchar();
    }while(opcion != 1 && contactos < 20);

    desplegar(contactos,nombres,direcciones,numeros);


    printf("\n");
    system("pause");
    return 0;
}

void desplegar(int cantidad,char nombres[][20],char direcciones[][20],char numeros[][20]){
printf("Nombres\t\tDirecciones\t\tTelefono\n");

    for (int i = 0; i < cantidad; i++){ 

        printf("%s\t\t%s\t\t%s\n",nombres[i],direcciones[i],numeros[i]);

    }
}
4

1 回答 1

0

阅读printf 格式说明符,不要使用制表符。制表符是邪恶的,因为它们可以从零扩展到 8 个(至少)空格并破坏您的列格式。

例如,如果第 1 列的宽度为 20 个字母,则对文本使用“%20s”或对数字使用“%20d”。您必须查看如何使用说明符的左对齐。

注意:此方法仅对等宽字体有效。使用可变宽度字体(如字符宽度、字符间距等)时工作量更大

于 2013-10-09T21:44:53.117 回答