Tôi đang hiển thị một bảng được phân vùng trông giống như:
Số Tên thiết bị Loại phân vùng Kích thước tính bằng MB
------------------------------------------------------------
1/dev/sda1 NTFS 300
2 /dev/sda2 *Win95 FAT32 99
3 /dev/sda3 Không xác định 128
4 /dev/sda4 NTFS 19472
120/dev/sda120 NTFS 3000
*=Phân vùng đang hoạt động
Bây giờ để hiển thị nội dung trên, chúng ta sử dụng printf đầu ra được định dạng, chuỗi định dạng là
"%-6d=số phân vùng %-25.25s=tên thiết bị %c=phân vùng hoạt động %-30.30s=loại bộ phận %7Ld=size"
Bây giờ tôi muốn hiển thị cùng một bảng phân vùng nhưng sửa đổi nó một chút để các khoảng trống trong các khe phân vùng sẽ được hiển thị theo phạm vi, như:
5-119 /dev/sda5.../dev/sda119 Trống 0
Tôi sử dụng chuỗi định dạng như:
%d-%-6d=phạm vi phân vùng %s%d...%s%d=(/dev/sda5.../dev/sda119) %c %-30.30s %7Ld
Nhưng điều này không giúp tôi.
Chuỗi định dạng đúng phải là gì? Tôi đang sử dụng trình biên dịch gcc.
Tôi nghĩ bạn cần sử dụng snprintf()
để chuẩn bị hai chuỗi ghép, sau đó sử dụng chuỗi đơn giản hơn printf()
để thực hiện việc in ấn thực tế. Vì bạn không hiển thị mã thực của mình nên chúng tôi phải đoán mọi thứ, điều này thật rắc rối...
int tối thiểu = 5;
int max = 119;
char *dev = "/dev/sda";
char num_range[32];
char dev_range[60];
snprintf(num_range, sizeof(num_range), "%d-%d", min, max);
snprintf(dev_range, sizeof(dev_range), "%s%d...%s%d", dev, min, dev, max);
printf("%-10s %-50.50s %c%-30.30s %7d", num_range, dev_range, '', "Trống", 0);
Bạn đã chỉ định cho một thiết bị %-25,25 giây
, vì vậy không rõ liệu bạn nên nhân đôi phạm vi hay sử dụng một giá trị khác (hoặc thậm chí cùng một giá trị); bạn sẽ cần điều chỉnh phần đó của chuỗi định dạng cho phù hợp với mình. Kỹ thuật này cũng là cách tôi lấy dấu hai chấm ở cuối tên - định dạng tên và dấu hai chấm thành một chuỗi, sau đó định dạng chuỗi đó thành thao tác in cuối cùng.
Tôi là một lập trình viên xuất sắc, rất giỏi!