for(int j=0;j<numbooks;j++) { printf("%5s\t%15s\t%10s\t%25s\n",bookList[j].id,bookList[j].name,bookList[j].author,bookList[j].press); }怎么改进
时间: 2024-03-31 21:32:37 浏览: 52
超声除藻的参数优化及其在太湖除藻中的应用
可以改进为以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
typedef struct {
char id[30];
char name[30]; //书名
char author[30]; //作者
char press[30]; //出版社名
int available;//1表示未借出,0表示已借出
} Book;
Book bookList[MAX_BOOKS]=
{
{"1","唐诗三百首","孙洙","南京大学出版社",1},
{"2","三体","刘慈欢","北美权威科幻类出版社",1},
{"3","稻草人","叶圣陶","湖南儿童出版社",1},
{"4","老人与海","海明威","上海译文出版社",1},
{"5","c语言","泰戈尔","浙江文艺出版社",1}
};
int main()
{
int numbooks = 5;
setlocale(LC_ALL, ""); // 设置本地化环境为系统默认
for(int j=0;j<numbooks;j++) {
wprintf(L"%5S\t%15S\t%10S\t%25S\n", bookList[j].id, bookList[j].name, bookList[j].author, bookList[j].press);
}
return 0;
}
```
在上面的代码中,我们使用了宽字符类型 `wprintf` 函数,这样就可以直接输出 Unicode 编码的字符了。同时,我们使用了 `setlocale` 函数将本地化环境设置为系统默认,这样就可以在不同的系统环境中正确输出中文字符了。
注意,在使用 `wprintf` 函数时,需要将 `char` 类型的字符串转换成 `wchar_t` 类型的字符串,以便正确输出中文字符。因此,在书名、作者和出版社名中包含中文字符时,需要将这些字符串定义为宽字符类型 `wchar_t` 类型的字符串,如下所示:
```c
typedef struct {
char id[30];
wchar_t name[30]; //宽字符类型的书名
wchar_t author[30]; //宽字符类型的作者
wchar_t press[30]; //宽字符类型的出版社名
int available;//1表示未借出,0表示已借出
} Book;
Book bookList[MAX_BOOKS]=
{
{"1", L"唐诗三百首", L"孙洙", L"南京大学出版社", 1},
{"2", L"三体", L"刘慈欢", L"北美权威科幻类出版社", 1},
{"3", L"稻草人", L"叶圣陶", L"湖南儿童出版社", 1},
{"4", L"老人与海", L"海明威", L"上海译文出版社", 1},
{"5", L"c语言", L"泰戈尔", L"浙江文艺出版社", 1}
};
```
阅读全文