所以我试图显示一行数据,我想整齐地显示数据。我使用了,但是使用 tab 不一致:
电流输出(大约):
Location City Price Rooms Bathrooms Carpark Type Furnish
Mont-Kiara Kuala-Lumpur 1000000 2 2 0 Built-up Partly
Cheras Kuala-Lumpur 310000 3 2 0 Built-up Partly
我当前的代码:
#include <stdio.h>
#include <string.h>
struct data_struct {
char location[150];
char city[150];
long long int prices;
int rooms;
int bathroom;
int carpark;
char type[150];
char furnish[150];
} data[5000];
void data_read(FILE *file) {
char location[150];
char city[150];
long long int prices;
int rooms;
int bathroom;
int carpark;
char type[150];
char furnish[150];
char header[1000];
fscanf(file, "%[^\n]\n", header);
int i = 0;
while(fscanf(file, "%[^,],%[^,],%lld,%d,%d,%d,%[^,],%[^\n]\n", location, city, &prices, &rooms, &bathroom, &carpark, type, furnish) == 8) {
strcpy(data[i].location, location);
strcpy(data[i].city, city);
data[i].prices = prices;
data[i].rooms = rooms;
data[i].bathroom = bathroom;
data[i].carpark = carpark;
strcpy(data[i].type, type);
strcpy(data[i].furnish, furnish);
i = i + 1;
}
}
void display_data(int row) {
printf("Location \t City \t\t Price \t Rooms \t Bathrooms \t Carpark \t Type \t Furnish\n");
for(int i = 0; i < row; i++) {
printf("%s \t %s \t %lld \t %d \t %d \t %d \t %s \t %s\n", data[i].location, data[i].city, data[i].prices, data[i].rooms, data[i].bathroom, data[i].carpark, data[i].type, data[i].furnish);
}
}
int main() {
FILE *file = fopen("file(in).csv", "r");
data_read(file);
int t;
scanf("%d", &t);
display_data(t);
return 0;
}
我尝试在网上寻找解决方案,但没有找到任何有用的东西。有没有办法让它在C中看起来像这样?感谢所有帮助!
预期的输出看起来像这样(没有边框):
地点 | 城市 | 价格 | 房间 | 浴室 | 停车场 | 类型 | 提供 |
---|---|---|---|---|---|---|---|
满家乐 | 吉隆坡-吉隆坡 | 1000000 | 2 | 2 | 0 | 已建成 | 部分 |
蕉赖 | 吉隆坡-吉隆坡 | 310000 | 3 | 2 | 0 | 已建成 | 部分 |
尽管没有要打印的文件的内容,但很明显,这里的答案是使用宽度字段和
%s
格式说明符来确保对齐。
例如
printf("%-8s %-8s %-8s\n", "A", "B", "C");
printf("%-8d %-8d %-8d\n", 42, 56, 896);
打印:
A B C
42 56 896