搜索到的linux c更改命令行颜色为加上\033m 在尝试中发现如果使用>将结果保存到文件中 "./EXE_NAME > temp" 在文件会包含\033这些改变颜色的字符 但是对"ls"命令输出的文本带颜色,这样保存却不会有\033之类的字符串。 请问ls是采用其他改变颜色的方法吗?还是说我少做了啥。 感谢大佬
include include include define MEDICINE_FILE "medicine.txt" //药品文件名 typedef struct medicine { char drug_name[100]; //药品名 int drug_number; //药品编号 int price; //售价 int num; //药品剩余数量 } medicine; struct med { medicine medicine_array[500]; //存放药品的数组 int size; //数组已使用的大小 } med; //与药品操作相关函数 void showMenu(); //打印菜单 void read_medicine_file(); //从文件中读入药品信息 void add_medicine(); //添加药品信息 void show_medicine(); //查看所有药品信息 void drug_name_del(); //按名称删除药品信息 void drug_number_revise(); //按编号修改药品信息 int drug_number_find(int num); //按编号查找药品信息,返回下标 void show_drug_number_find(); //输出查找到的药品信息 int drug_name_find(char *name); //按姓名查找药品信息,返回下标 void show_drug_name_find(); //按姓名查找药品信息,并将药品信息输出 void save_medicine(); //保存药品信息到文件 int main(int argc, char *argv[]) { int select = 15; read_medicine_file(); //读取文件中药品的信息 while (1) { showMenu(); //打印菜单 while (scanf("%d", &select) != 1 || select 10) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); //将输入缓冲中所有数据丢弃 } switch (select) { case 0: //退出程序 exit(0); break; case 1: //添加药品信息 add_medicine(); break; case 2: //查看所有药品信息 show_medicine(); break; case 3: //按名称删除药品信息 drug_name_del(); break; case 4: //按编号修改药品信息 drug_number_revise(); break; case 5: //按编号查找药品信息,并将药品信息输出 show_drug_number_find(); break; case 6: //按名称查找药品信息,并将药品信息输出 show_drug_name_find(); break; } } return 0; } //打印菜单 void showMenu() { printf("-----------欢迎来到药房管理系统------------\n"); printf("-------------------------------------------\n"); printf("请输入你要选择的编号:\n"); printf("1、添加药品信息\n"); printf("2、查看所有药品信息\n"); printf("3、按名称删除药品信息\n"); printf("4、按编号修改药品信息\n"); printf("5、按编号查找药品信息\n"); printf("6、按姓名查找药品信息\n"); printf("0、退出本系统\n"); printf("-------------------------------------------\n"); } //从文件中读入药品信息 void read_medicine_file() { FILE *fp = fopen(MEDICINE_FILE, "r"); if (fp == NULL) { med.size = 0; memset(&med.medicine_array, 0, sizeof(med.medicine_array)); } else { while (fscanf(fp, "%s %d %f %d", med.medicine_array[med.size].drug_name, &med.medicine_array[med.size].drug_number, &med.medicine_array[med.size].price, &med.medicine_array[med.size].num) != EOF) { med.size++; } } fclose(fp); } //添加药品信息 void add_medicine() { int flag = 0; int num; //保存编号用于去重 printf("请输入你要添加的药品的数量\n"); int n, i; while (scanf("%d", &n) != 1 || n < 0) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); } for (i = 0; i < n; ++i) { printf("第%d个药品的信息\n", i + 1); printf("--------------------\n"); printf("请输入药品姓名\n"); scanf("%s", med.medicine_array[med.size].drug_name); printf("请输入药品编号\n"); med.medicine_array[med.size].drug_number = 0; do { while (scanf("%d", &num) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } int ret = drug_number_find(num); if (ret != -1) { printf("该编号已经存在,请重新输入\n"); } else { med.medicine_array[med.size].drug_number = num; break; } } while (1); printf("请输入药品售价\n"); while (scanf("%f", &med.medicine_array[med.size].price) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } printf("请输入药品数量\n"); while (scanf("%d", &med.medicine_array[med.size].num) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } flag = 1; med.size++; } if (flag == 1) save_medicine(); //保存到文件 } //查看所有药品信息 void show_medicine() { int i; for (i = 0; i < med.size; ++i) { printf("%s\t\t\t%d\t\t\t%.1f\t\t\t%d\n", med.medicine_array[i].drug_name, med.medicine_array[i].drug_number, med.medicine_array[i].price, med.medicine_array[i].num); } } //按姓名删除药品信息 void drug_name_del() { int flag = 0; int i, j, n; char name[100]; printf("请输入你要删除的药品数量\n"); while (scanf("%d", &n) != 1 || n < 0) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); } for (i = 0; i < n; ++i) { printf("第%d个药品的姓名\n", i + 1); printf("--------------------\n"); printf("请输入要删除的药品姓名\n"); scanf("%s", name); int ret = drug_name_find(name); if (ret != -1) { flag = 1; printf("删除成功,删除的信息为\n"); printf("%s\t\t\t%d\t\t\t%.1f\t\t\t%d\n", med.medicine_array[ret].drug_name, med.medicine_array[ret].drug_number, med.medicine_array[ret].price, med.medicine_array[ret].num); for (j = ret; j < med.size - 1; j++) { med.medicine_array[j] = med.medicine_array[j + 1]; } med.size--; } else { printf("未找到该药品,删除失败\n"); } } if (flag == 1) save_medicine(); } //按编号修改药品信息 void drug_number_revise() { int flag = 0; int i, j, n, number; //保存要修改的编号 int num; //保存新编号,用于去重 printf("请输入你要修改的药品数量\n"); while (scanf("%d", &n) != 1 || n < 0) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); } for (i = 0; i < n; ++i) { printf("第%d个药品的编号\n", i + 1); printf("--------------------\n"); printf("请输入要修改的药品编号\n"); while (scanf("%d", &number) != 1) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); } int ret = drug_number_find(number); if (ret != -1) { flag = 1; printf("找到该编号的药品,该药品信息为\n"); printf("%s\t\t\t%d\t\t\t%.1f\t\t\t%d\n", med.medicine_array[ret].drug_name, med.medicine_array[ret].drug_number, med.medicine_array[ret].price, med.medicine_array[ret].num); printf("请输入新信息\n"); printf("请输入药品新姓名\n"); scanf("%s", med.medicine_array[ret].drug_name); printf("请输入药品编号\n"); med.medicine_array[ret].drug_number = -1; //将该药品编号改为-1防止新输入的编号和当前编号相同,导致无法成功输入该编号 do { while (scanf("%d", &num) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } int res = drug_number_find(num); if (res != -1) { printf("该编号已经存在,请重新输入\n"); } else { med.medicine_array[ret].drug_number = num; break; } } while (1); printf("请输入药品售价\n"); while (scanf("%f", &med.medicine_array[ret].price) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } printf("请输入药品数量\n"); while (scanf("%d", &med.medicine_array[ret].num) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } printf("修改成功!\n"); } else { printf("未找到该编号的药品\n"); } } if (flag == 1) save_medicine(); } //按编号查找药品信息,返回下标 int drug_number_find(int number) { int i; for (i = 0; i < med.size; ++i) { if (number == med.medicine_array[i].drug_number) { return i; } } return -1; } //输出查找到的药品信息 void show_drug_number_find() { int number; printf("请输入要查找的编号编号\n"); while (scanf("%d", &number) != 1) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); } int ret = drug_number_find(number); if (ret == -1) { printf("未找到\n"); } else { printf("找到了,信息为\n"); printf("%s\t\t\t%d\t\t\t%.1f\t\t\t%d\n", med.medicine_array[ret].drug_name, med.medicine_array[ret].drug_number, med.medicine_array[ret].price, med.medicine_array[ret].num); } } //按姓名查找药品信息 int drug_name_find(char *name) { int i; for (i = 0; i < med.size; ++i) { if (strcmp(name, med.medicine_array[i].drug_name) == 0) return i; } return -1; } //按姓名查找药品信息,并将药品信息输出 void show_drug_name_find() { char name[100]; printf("请输入你要查找的药品姓名\n"); scanf("%s", name); int ret = drug_name_find(name); if (ret == -1) { printf("未找到\n"); } else { printf("找到了,药品信息为\n"); printf("%s\t\t\t%d\t\t\t%.1f\t\t\t%d\n", med.medicine_array[ret].drug_name, med.medicine_array[ret].drug_number, med.medicine_array[ret].price, med.medicine_array[ret].num); } } //保存药品信息到文件 void save_medicine() { int i; FILE *fp = fopen(MEDICINE_FILE, "w"); if (fp == NULL) { return; } for (i = 0; i < med.size; ++i) { fprintf(fp, "%s %d %f %d\n", med.medicine_array[i].drug_name, med.medicine_array[i].drug_number, med.medicine_array[i].price, med.medicine_array[i].num); } fclose(fp); } 文件 999感冒灵 1 14.9 200 氯雷他定片 2 65.0 150 肠炎宁片 3 28.0 150 布洛芬胶囊 4 29.8 230 板蓝根颗粒 5 23.8 300 输出的为什么是这样子的 999感冒灵 1 0.0 200 氯雷他定片 2 0.0 150 肠炎宁片 3 0.0 150 布洛芬胶囊 4 0.0 230 板蓝根颗粒 5 0.0 300
Hello! 简而言之,所谓"struct tcphdr"是一个来自外部的被include的库文件的结构体. 而且它这个结构体的构造有点诡异.我不知道什么是__extension__ union,这会让它更难处理吗? struct tcphdr { __extension__ union { struct { uint16_t th_sport; /* source port */ uint16_t th_dport; /* destination port */ tcp_seq th_seq; /* sequence number */ tcp_seq th_ack; /* acknowledgement number */ # if __BYTE_ORDER == __LITTLE_ENDIAN uint8_t th_x2:4; /* (unused) */ uint8_t th_off:4; /* data offset */ # endif # if __BYTE_ORDER == __BIG_ENDIAN uint8_t th_off:4; /* data offset */ uint8_t th_x2:4; /* (unused) */ # endif uint8_t th_flags; # define TH_FIN 0x01 # define TH_SYN 0x02 # define TH_RST 0x04 # define TH_PUSH 0x08 # define TH_ACK 0x10 # define TH_URG 0x20 uint16_t th_win; /* window */ uint16_t th_sum; /* checksum */ uint16_t th_urp; /* urgent pointer */ }; struct { uint16_t source; uint16_t dest; uint32_t seq; uint32_t ack_seq; # if __BYTE_ORDER == __LITTLE_ENDIAN uint16_t res1:4; uint16_t doff:4; uint16_t fin:1; uint16_t syn:1; uint16_t rst:1; uint16_t psh:1; uint16_t ack:1; uint16_t urg:1; uint16_t res2:2; # elif __BYTE_ORDER == __BIG_ENDIAN uint16_t doff:4; uint16_t res1:4; uint16_t res2:2; uint16_t urg:1; uint16_t ack:1; uint16_t psh:1; uint16_t rst:1; uint16_t syn:1; uint16_t fin:1; # else # error "Adjust your defines" # endif uint16_t window; uint16_t check; uint16_t urg_ptr; }; }; }; 我不能在程序里对它进行sizeof,或者对指向它的类型的地址进行"->"操作,无法编译通过. 问题是这是官方给的源码,它肯定自己编译是通过的啊?是我的编译选项有问题吗?我是本地交叉编译. 而且,sizeof实在不行的话我可以直接把它全改成具体的数字,但"->"这个操作我不可能把它混过去. 怎么办好呢?
Hello!. 我定义了一个普通的变长结构体用于UDP通信,大概类似这样. struct { int size; char data[0]; } 然而我发现一个问题,我在接收方设置的函数是。 recvfrom(serverSocket, buffer, 30000, 0, (struct sockaddr *)&clientAddr, &clientAddrLen); 它会接受小于30000以下的消息,而我的通信长度是无论如何都不会大于30000的。那这里的变长结构体还有意义吗? 我还想问一下当我在结构体的尾部使用"char data[0]"时会发生什么,谢谢。
╰─➤ ldd libx264-2881b7ff.so.164 linux-vdso.so.1 (0x00007fff1bec0000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9f37919000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9f37d5c000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9f37d57000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9f37600000) /lib64/ld-linux-x86-64.so.2 (0x00007f9f37d77000) 比如上面的输出,哪些是「绝对」,哪些是「相对」呢? 我觉得 "/lib64/ld-linux-x86-64.so.2 (0x00007f9f37d77000)" 是绝对 "linux-vdso.so.1 (0x00007fff1bec0000)" 是相对 但是类似 "libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9f37d5c000)" 这样的算绝对还是相对引用呢?这里的 "=>" 表示什么含义呢? *** 我有一个问题,就是「如果没有 / ,那么就按找一个特定的方式在在磁盘上寻找这个文件。这个时候,ldd 会用 => 显示寻找的结果。」,我安装了一个 pyav,通过 "pip install av" 安装,然后我查看 av 的一个动态链接库 "ldd _core.cpython-310-x86_64-linux-gnu.so" ,发现这个动态链接库里面的 => 都是指向 "/home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs" 里面的某个文件,我不清楚这个「特定的方式」是什么? (svddb_sdk) ╭─pon@admini ~/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av ╰─➤ ldd _core.cpython-310-x86_64-linux-gnu.so linux-vdso.so.1 (0x00007ffc8db53000) libavformat-20d4e1d0.so.59.27.100 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libavformat-20d4e1d0.so.59.27.100 (0x00007fd001254000) libavcodec-8a88085f.so.59.37.100 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libavcodec-8a88085f.so.59.37.100 (0x00007fcffff37000) libavdevice-ed40abdd.so.59.7.100 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libavdevice-ed40abdd.so.59.7.100 (0x00007fcffff18000) libavutil-1701948d.so.57.28.100 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libavutil-1701948d.so.57.28.100 (0x00007fcfffd3a000) libavfilter-2d5314ec.so.8.44.100 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libavfilter-2d5314ec.so.8.44.100 (0x00007fcfff8e9000) libswscale-a6aee226.so.6.7.100 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libswscale-a6aee226.so.6.7.100 (0x00007fcfff846000) libswresample-b868a3ce.so.4.7.100 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libswresample-b868a3ce.so.4.7.100 (0x00007fcfff824000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fcfff7f5000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcfff603000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fcfff4b4000) libxml2-47a785fa.so.2.9.13 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libxml2-47a785fa.so.2.9.13 (0x00007fcfff328000) libbluray-69850b93.so.2.1.2 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libbluray-69850b93.so.2.1.2 (0x00007fcfff2d3000) libgmp-dbb9f291.so.10.4.1 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libgmp-dbb9f291.so.10.4.1 (0x00007fcfff25a000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fcfff23e000) libgnutls-58994bd7.so.30.31.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libgnutls-58994bd7.so.30.31.0 (0x00007fcfff005000) libvpx-c1705a7a.so.7.0.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libvpx-c1705a7a.so.7.0.0 (0x00007fcffedf0000) liblzma-f3a5963b.so.5.2.5 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/liblzma-f3a5963b.so.5.2.5 (0x00007fcffedc5000) libdav1d-df61568f.so.5.1.1 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libdav1d-df61568f.so.5.1.1 (0x00007fcffebff000) libopencore-amrwb-9db94aa9.so.0.0.3 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libopencore-amrwb-9db94aa9.so.0.0.3 (0x00007fcffebe9000) libaom-e9efed4a.so.3.2.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libaom-e9efed4a.so.3.2.0 (0x00007fcffe4a9000) libmp3lame-3ecc6556.so.0.0.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libmp3lame-3ecc6556.so.0.0.0 (0x00007fcffe415000) libopencore-amrnb-393dbae2.so.0.0.3 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libopencore-amrnb-393dbae2.so.0.0.3 (0x00007fcffe3e7000) libopenjp2-0d101c52.so.2.4.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libopenjp2-0d101c52.so.2.4.0 (0x00007fcffe363000) libopus-70bda348.so.0.8.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libopus-70bda348.so.0.8.0 (0x00007fcffe307000) libspeex-b6a53f7a.so.1.5.1 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libspeex-b6a53f7a.so.1.5.1 (0x00007fcffe2eb000) libtheoraenc-276df146.so.1.1.2 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libtheoraenc-276df146.so.1.1.2 (0x00007fcffe2a9000) libtheoradec-f01ee89e.so.1.1.4 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libtheoradec-f01ee89e.so.1.1.4 (0x00007fcffe287000) libtwolame-72d74ef7.so.0.0.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libtwolame-72d74ef7.so.0.0.0 (0x00007fcffe25e000) libvorbis-f4a9a6fd.so.0.4.9 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libvorbis-f4a9a6fd.so.0.4.9 (0x00007fcffe221000) libvorbisenc-0d9d5bdf.so.2.0.12 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libvorbisenc-0d9d5bdf.so.2.0.12 (0x00007fcffe170000) libx264-2881b7ff.so.164 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libx264-2881b7ff.so.164 (0x00007fcffde4d000) libx265-d8690e8d.so.199 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libx265-d8690e8d.so.199 (0x00007fcffcbc1000) libxvidcore-d29bca61.so.4.3 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libxvidcore-d29bca61.so.4.3 (0x00007fcffcab3000) libxcb-65da195c.so.1.1.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libxcb-65da195c.so.1.1.0 (0x00007fcffc880000) libxcb-shm-7a199f70.so.0.0.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libxcb-shm-7a199f70.so.0.0.0 (0x00007fcffc679000) libxcb-shape-25c2b258.so.0.0.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libxcb-shape-25c2b258.so.0.0.0 (0x00007fcffc472000) libxcb-xfixes-9be3ba6f.so.0.0.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libxcb-xfixes-9be3ba6f.so.0.0.0 (0x00007fcffc262000) libpostproc-9d3ac700.so.56.6.100 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libpostproc-9d3ac700.so.56.6.100 (0x00007fcffc240000) libass-8499ab98.so.9.1.3 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libass-8499ab98.so.9.1.3 (0x00007fcffc1fe000) libfontconfig-99ba2620.so.1.12.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libfontconfig-99ba2620.so.1.12.0 (0x00007fcffc1aa000) libfreetype-19bd6cfb.so.6.17.1 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libfreetype-19bd6cfb.so.6.17.1 (0x00007fcffc0f9000) /lib64/ld-linux-x86-64.so.2 (0x00007fd0014fe000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fcffc0f1000) libunistring-aeeab030.so.2.1.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libunistring-aeeab030.so.2.1.0 (0x00007fcffbf6a000) libnettle-cb75a9d6.so.8.4 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libnettle-cb75a9d6.so.8.4 (0x00007fcffbf1f000) libhogweed-5d799758.so.6.4 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libhogweed-5d799758.so.6.4 (0x00007fcffbece000) libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fcffbcec000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fcffbccf000) libogg-bbd52b06.so.0.8.5 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libogg-bbd52b06.so.0.8.5 (0x00007fcffbcc3000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fcffbcb9000) libXau-00ec42fe.so.6.0.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libXau-00ec42fe.so.6.0.0 (0x00007fcffbab4000) libfribidi-baef595b.so.0.4.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libfribidi-baef595b.so.0.4.0 (0x00007fcffba91000) libharfbuzz-d40f381a.so.0.40100.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libharfbuzz-d40f381a.so.0.40100.0 (0x00007fcffb97d000) libuuid-f64cda11.so.1.3.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libuuid-f64cda11.so.1.3.0 (0x00007fcffb777000) libpng16-1f529098.so.16.37.0 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libpng16-1f529098.so.16.37.0 (0x00007fcffb746000) 比如其中的 "libavformat-20d4e1d0.so.59.27.100 => /home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libavformat-20d4e1d0.so.59.27.100 (0x00007fd001254000)" 这个是按照什么规定让 "libavformat-20d4e1d0.so.59.27.100" 指向 "/home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/libavformat-20d4e1d0.so.59.27.100 (0x00007fd001254000)" 的呢?按理来说,"/home/pon/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av/./../av.libs/" 不应该存在于系统的默认搜索路径中吧?而且我也没有添加类似 LD_LIBRARY_PATH、LD_PRELOAD、LD_LIBRARYN、LD_DEBUG、LD_BIND_NOW 的环境变量 (svddb_sdk) ╭─pon@admini ~/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av ╰─➤ printenv | grep LD_ 1 ↵ (svddb_sdk) ╭─pon@admini ~/.local/share/virtualenvs/svddb_sdk-qAt4tE2E/lib/python3.10/site-packages/av *** 如果使用 readelf 查看,就是下面这样 ─➤ readelf -d _core.cpython-310-x86_64-linux-gnu.so 1 ↵ Dynamic section at offset 0x2d000 contains 33 entries: Tag Type Name/Value 0x000000000000000f (RPATH) Library rpath: [$ORIGIN/../av.libs] 0x0000000000000001 (NEEDED) Shared library: [libavformat-20d4e1d0.so.59.27.100] 0x0000000000000001 (NEEDED) Shared library: [libavcodec-8a88085f.so.59.37.100] 0x0000000000000001 (NEEDED) Shared library: [libavdevice-ed40abdd.so.59.7.100] 0x0000000000000001 (NEEDED) Shared library: [libavutil-1701948d.so.57.28.100] 0x0000000000000001 (NEEDED) Shared library: [libavfilter-2d5314ec.so.8.44.100] 0x0000000000000001 (NEEDED) Shared library: [libswscale-a6aee226.so.6.7.100] 0x0000000000000001 (NEEDED) Shared library: [libswresample-b868a3ce.so.4.7.100] 0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0] 0x0000000000000001 (NEEDED) Shared library: [libc.so.6] 0x000000000000000c (INIT) 0x3000 0x000000000000000d (FINI) 0x63c4 0x0000000000000019 (INIT_ARRAY) 0x8cd8 0x000000000000001b (INIT_ARRAYSZ) 8 (bytes) 0x000000000000001a (FINI_ARRAY) 0x8ce0 0x000000000000001c (FINI_ARRAYSZ) 8 (bytes) 0x000000006ffffef5 (GNU_HASH) 0xb358 0x0000000000000005 (STRTAB) 0x12250 0x0000000000000006 (SYMTAB) 0xa8d8 0x000000000000000a (STRSZ) 2479 (bytes) 0x000000000000000b (SYMENT) 24 (bytes) 0x0000000000000003 (PLTGOT) 0x9000 0x0000000000000002 (PLTRELSZ) 2016 (bytes) 0x0000000000000014 (PLTREL) RELA 0x0000000000000017 (JMPREL) 0x1e40 0x0000000000000007 (RELA) 0x17b0 0x0000000000000008 (RELASZ) 1680 (bytes) 0x0000000000000009 (RELAENT) 24 (bytes) 0x000000006ffffffe (VERNEED) 0x16b0 0x000000006fffffff (VERNEEDNUM) 8 0x000000006ffffff0 (VERSYM) 0x15ce 0x000000006ffffff9 (RELACOUNT) 44 0x0000000000000000 (NULL) 0x0
#include #include #include #define MEDICINE_FILE "medicine.txt" //药品文件名 typedef struct medicine { char drug_name[100]; //药品名 int drug_number; //药品编号 float price; //售价 int num; //药品剩余数量 } medicine; struct med { medicine medicine_array[500]; //存放药品的数组 int size; //数组已使用的大小 } med; //与药品操作相关函数 void showMenu(); //打印菜单 void read_medicine_file(); //从文件中读入药品信息 void add_medicine(); //添加药品信息 void show_medicine(); //查看所有药品信息 void drug_name_del(); //按名称删除药品信息 void drug_number_revise(); //按编号修改药品信息 int drug_number_find(int num); //按编号查找药品信息,返回下标 void show_drug_number_find(); //输出查找到的药品信息 int drug_name_find(char *name); //按姓名查找药品信息,返回下标 void show_drug_name_find(); //按姓名查找药品信息,并将药品信息输出 void save_medicine(); //保存药品信息到文件 int main(int argc, char *argv[]) { int select = 15; read_medicine_file(); //读取文件中药品的信息 while (1) { showMenu(); //打印菜单 while (scanf("%d", &select) != 1 || select 10) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); //将输入缓冲中所有数据丢弃 } switch (select) { case 0: //退出程序 exit(0); break; case 1: //添加药品信息 add_medicine(); break; case 2: //查看所有药品信息 show_medicine(); break; case 3: //按名称删除药品信息 drug_name_del(); break; case 4: //按编号修改药品信息 drug_number_revise(); break; case 5: //按编号查找药品信息,并将药品信息输出 show_drug_number_find(); break; case 6: //按名称查找药品信息,并将药品信息输出 show_drug_name_find(); break; } } return 0; } //打印菜单 void showMenu() { printf("-----------欢迎来到药房管理系统------------\n"); printf("-------------------------------------------\n"); printf("请输入你要选择的编号:\n"); printf("1、添加药品信息\n"); printf("2、查看所有药品信息\n"); printf("3、按名称删除药品信息\n"); printf("4、按编号修改药品信息\n"); printf("5、按编号查找药品信息\n"); printf("6、按姓名查找药品信息\n"); printf("0、退出本系统\n"); printf("-------------------------------------------\n"); } //从文件中读入药品信息 void read_medicine_file() { FILE *fp = fopen(MEDICINE_FILE, "r"); if (fp == NULL) { med.size = 0; memset(&med.medicine_array, 0, sizeof(med.medicine_array)); } else { while (fscanf(fp, "%s %d %f %d", med.medicine_array[med.size].drug_name, &med.medicine_array[med.size].drug_number, &med.medicine_array[med.size].price, &med.medicine_array[med.size].num) != EOF) { med.size++; } } fclose(fp); } //添加药品信息 void add_medicine() { int flag = 0; int num; //保存编号用于去重 printf("请输入你要添加的药品的数量\n"); int n, i; while (scanf("%d", &n) != 1 || n < 0) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); } for (i = 0; i < n; ++i) { printf("第%d个药品的信息\n", i + 1); printf("--------------------\n"); printf("请输入药品姓名\n"); scanf("%s", med.medicine_array[med.size].drug_name); printf("请输入药品编号\n"); med.medicine_array[med.size].drug_number = 0; do { while (scanf("%d", &num) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } int ret = drug_number_find(num); if (ret != -1) { printf("该编号已经存在,请重新输入\n"); } else { med.medicine_array[med.size].drug_number = num; break; } } while (1); printf("请输入药品售价\n"); while (scanf("%f", &med.medicine_array[med.size].price) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } printf("请输入药品数量\n"); while (scanf("%d", &med.medicine_array[med.size].num) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } flag = 1; med.size++; } if (flag == 1) save_medicine(); //保存到文件 } //查看所有药品信息 void show_medicine() { int i; for (i = 0; i < med.size; ++i) { printf("%s\t\t\t%d\t\t\t%.1f\t\t\t%d\n", med.medicine_array[i].drug_name, med.medicine_array[i].drug_number, med.medicine_array[i].price, med.medicine_array[i].num); } } //按姓名删除药品信息 void drug_name_del() { int flag = 0; int i, j, n; char name[100]; printf("请输入你要删除的药品数量\n"); while (scanf("%d", &n) != 1 || n < 0) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); } for (i = 0; i < n; ++i) { printf("第%d个药品的姓名\n", i + 1); printf("--------------------\n"); printf("请输入要删除的药品姓名\n"); scanf("%s", name); int ret = drug_name_find(name); if (ret != -1) { flag = 1; printf("删除成功,删除的信息为\n"); printf("%s\t\t\t%d\t\t\t%.1f\t\t\t%d\n", med.medicine_array[ret].drug_name, med.medicine_array[ret].drug_number, med.medicine_array[ret].price, med.medicine_array[ret].num); for (j = ret; j < med.size - 1; j++) { med.medicine_array[j] = med.medicine_array[j + 1]; } med.size--; } else { printf("未找到该药品,删除失败\n"); } } if (flag == 1) save_medicine(); } //按编号修改药品信息 void drug_number_revise() { int flag = 0; int i, j, n, number; //保存要修改的编号 int num; //保存新编号,用于去重 printf("请输入你要修改的药品数量\n"); while (scanf("%d", &n) != 1 || n < 0) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); } for (i = 0; i < n; ++i) { printf("第%d个药品的编号\n", i + 1); printf("--------------------\n"); printf("请输入要修改的药品编号\n"); while (scanf("%d", &number) != 1) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); } int ret = drug_number_find(number); if (ret != -1) { flag = 1; printf("找到该编号的药品,该药品信息为\n"); printf("%s\t\t\t%d\t\t\t%.1f\t\t\t%d\n", med.medicine_array[ret].drug_name, med.medicine_array[ret].drug_number, med.medicine_array[ret].price, med.medicine_array[ret].num); printf("请输入新信息\n"); printf("请输入药品新姓名\n"); scanf("%s", med.medicine_array[ret].drug_name); printf("请输入药品编号\n"); med.medicine_array[ret].drug_number = -1; //将该药品编号改为-1防止新输入的编号和当前编号相同,导致无法成功输入该编号 do { while (scanf("%d", &num) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } int res = drug_number_find(num); if (res != -1) { printf("该编号已经存在,请重新输入\n"); } else { med.medicine_array[ret].drug_number = num; break; } } while (1); printf("请输入药品售价\n"); while (scanf("%f", &med.medicine_array[ret].price) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } printf("请输入药品数量\n"); while (scanf("%d", &med.medicine_array[ret].num) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } printf("修改成功!\n"); } else { printf("未找到该编号的药品\n"); } } if (flag == 1) save_medicine(); } //按编号查找药品信息,返回下标 int drug_number_find(int number) { int i; for (i = 0; i < med.size; ++i) { if (number == med.medicine_array[i].drug_number) { return i; } } return -1; } //输出查找到的药品信息 void show_drug_number_find() { int number; printf("请输入要查找的编号编号\n"); while (scanf("%d", &number) != 1) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); } int ret = drug_number_find(number); if (ret == -1) { printf("未找到\n"); } else { printf("找到了,信息为\n"); printf("%s\t\t\t%d\t\t\t%.1f\t\t\t%d\n", med.medicine_array[ret].drug_name, med.medicine_array[ret].drug_number, med.medicine_array[ret].price, med.medicine_array[ret].num); } } //按姓名查找药品信息 int drug_name_find(char *name) { int i; for (i = 0; i < med.size; ++i) { if (strcmp(name, med.medicine_array[i].drug_name) == 0) return i; } return -1; } //按姓名查找药品信息,并将药品信息输出 void show_drug_name_find() { char name[100]; printf("请输入你要查找的药品姓名\n"); scanf("%s", name); int ret = drug_name_find(name); if (ret == -1) { printf("未找到\n"); } else { printf("找到了,药品信息为\n"); printf("%s\t\t\t%d\t\t\t%.1f\t\t\t%d\n", med.medicine_array[ret].drug_name, med.medicine_array[ret].drug_number, med.medicine_array[ret].price, med.medicine_array[ret].num); } } //保存药品信息到文件 void save_medicine() { int i; FILE *fp = fopen(MEDICINE_FILE, "w"); if (fp == NULL) { return; } for (i = 0; i < med.size; ++i) { fprintf(fp, "%s %d %f %d\n", med.medicine_array[i].drug_name, med.medicine_array[i].drug_number, med.medicine_array[i].price, med.medicine_array[i].num); } fclose(fp); } 文件 999感冒灵 1 14.9 200 氯雷他定片 2 65.0 150 肠炎宁片 3 28.0 150 布洛芬胶囊 4 29.8 230 板蓝根颗粒 5 23.8 300
Hello!. 我发现system函数可以调用bash语句,但不能回收结果. 现在我的方案是中调用的bash语句里把输出重定向到某个文件,然后在C语言中去读那个文件的内容. 我感觉这样非常别扭,有没有更合适的方案?
include include include include define MEDICINE_FILE "medicine.txt" //药品文件名 typedef struct medicine { char drug_name[100]; //药品名 int drug_number; //药品编号 int price; //售价 int num; //药品剩余数量 } medicine; struct med { medicine medicine_array[500]; //存放药品的数组 int size; //数组已使用的大小 } med; //与药品操作相关函数 void showMenu(); //打印菜单 void read_medicine_file(); //从文件中读入药品信息 void add_medicine(); //添加药品信息 void show_medicine(); //查看所有药品信息 void drug_name_del(); //按名称删除药品信息 void drug_number_revise(); //按编号修改药品信息 int drug_number_find(int num); //按编号查找药品信息,返回下标 void show_drug_number_find(); //输出查找到的药品信息 int drug_name_find(char *name); //按姓名查找药品信息,返回下标 void show_drug_name_find(); //按姓名查找药品信息,并将药品信息输出 void save_medicine(); //保存药品信息到文件 int main(int argc, char *argv[]) { int select = 15; read_medicine_file(); //读取文件中药品的信息 while (1) { showMenu(); //打印菜单 while (scanf("%d", &select) != 1 || select 10) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); //将输入缓冲中所有数据丢弃 } switch (select) { case 0: //退出程序 exit(0); break; case 1: //添加药品信息 add_medicine(); break; case 2: //查看所有药品信息 show_medicine(); break; case 3: //按名称删除药品信息 drug_name_del(); break; case 4: //按编号修改药品信息 drug_number_revise(); break; case 5: //按编号查找药品信息,并将药品信息输出 show_drug_number_find(); break; case 6: //按名称查找药品信息,并将药品信息输出 show_drug_name_find(); break; } } return 0; } //打印菜单 void showMenu() { printf("-----------欢迎来到药房管理系统------------\n"); printf("-------------------------------------------\n"); printf("请输入你要选择的编号:\n"); printf("1、添加药品信息\n"); printf("2、查看所有药品信息\n"); printf("3、按名称删除药品信息\n"); printf("4、按编号修改药品信息\n"); printf("5、按编号查找药品信息\n"); printf("6、按姓名查找药品信息\n"); printf("0、退出本系统\n"); printf("-------------------------------------------\n"); } //从文件中读入药品信息 void read_medicine_file() { FILE *fp = fopen(MEDICINE_FILE, "r"); if (fp == NULL) { med.size = 0; memset(&med.medicine_array, 0, sizeof(med.medicine_array)); } else { while (fscanf(fp, "%s %d %d %d", med.medicine_array[med.size].drug_name, &med.medicine_array[med.size].drug_number, &med.medicine_array[med.size].price, &med.medicine_array[med.size].num) != EOF) { med.size++; } } fclose(fp); } //添加药品信息 void add_medicine() { int flag = 0; int num; //保存编号用于去重 printf("请输入你要添加的药品的数量\n"); int n, i; while (scanf("%d", &n) != 1 || n < 0) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); } for (i = 0; i < n; ++i) { printf("第%d个药品的信息\n", i + 1); printf("--------------------\n"); printf("请输入药品姓名\n"); scanf("%s", med.medicine_array[med.size].drug_name); printf("请输入药品编号\n"); med.medicine_array[med.size].drug_number = 0; do { while (scanf("%d", &num) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } int ret = drug_number_find(num); if (ret != -1) { printf("该编号已经存在,请重新输入\n"); } else { med.medicine_array[med.size].drug_number = num; break; } } while (1); printf("请输入药品售价\n"); while (scanf("%d", &med.medicine_array[med.size].price) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } printf("请输入药品数量\n"); while (scanf("%d", &med.medicine_array[med.size].num) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } flag = 1; med.size++; } if (flag == 1) save_medicine(); //保存到文件 } //查看所有药品信息 void show_medicine() { int i; for (i = 0; i < med.size; ++i) { printf("%s\t\t\t%d\t\t\t%d\t\t\t%d\n", med.medicine_array[i].drug_name, med.medicine_array[i].drug_number, med.medicine_array[i].price, med.medicine_array[i].num); } } //按姓名删除药品信息 void drug_name_del() { int flag = 0; int i, j, n; char name[100]; printf("请输入你要删除的药品数量\n"); while (scanf("%d", &n) != 1 || n < 0) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); } for (i = 0; i < n; ++i) { printf("第%d个药品的姓名\n", i + 1); printf("--------------------\n"); printf("请输入要删除的药品姓名\n"); scanf("%s", name); int ret = drug_name_find(name); if (ret != -1) { flag = 1; printf("删除成功,删除的信息为\n"); printf("%s\t\t\t%d\t\t\t%d\t\t\t%d\n", med.medicine_array[ret].drug_name, med.medicine_array[ret].drug_number, med.medicine_array[ret].price, med.medicine_array[ret].num); for (j = ret; j < med.size - 1; j++) { med.medicine_array[j] = med.medicine_array[j + 1]; } med.size--; } else { printf("未找到该药品,删除失败\n"); } } if (flag == 1) save_medicine(); } //按编号修改药品信息 void drug_number_revise() { int flag = 0; int i, j, n, number; //保存要修改的编号 int num; //保存新编号,用于去重 printf("请输入你要修改的药品数量\n"); while (scanf("%d", &n) != 1 || n < 0) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); } for (i = 0; i < n; ++i) { printf("第%d个药品的编号\n", i + 1); printf("--------------------\n"); printf("请输入要修改的药品编号\n"); while (scanf("%d", &number) != 1) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); } int ret = drug_number_find(number); if (ret != -1) { flag = 1; printf("找到该编号的药品,该药品信息为\n"); printf("%s\t\t\t%d\t\t\t%d\t\t\t%d\n", med.medicine_array[ret].drug_name, med.medicine_array[ret].drug_number, med.medicine_array[ret].price, med.medicine_array[ret].num); printf("请输入新信息\n"); printf("请输入药品新姓名\n"); scanf("%s", med.medicine_array[ret].drug_name); printf("请输入药品编号\n"); med.medicine_array[ret].drug_number = -1; //将该药品编号改为-1防止新输入的编号和当前编号相同,导致无法成功输入该编号 do { while (scanf("%d", &num) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } int res = drug_number_find(num); if (res != -1) { printf("该编号已经存在,请重新输入\n"); } else { med.medicine_array[ret].drug_number = num; break; } } while (1); printf("请输入药品售价\n"); while (scanf("%d", &med.medicine_array[ret].price) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } printf("请输入药品数量\n"); while (scanf("%d", &med.medicine_array[ret].num) != 1) { printf("输入有误,请重新输入!\n"); scanf("%*[^\n]%*c"); } printf("修改成功!\n"); } else { printf("未找到该编号的药品\n"); } } if (flag == 1) save_medicine(); } //按编号查找药品信息,返回下标 int drug_number_find(int number) { int i; for (i = 0; i < med.size; ++i) { if (number == med.medicine_array[i].drug_number) { return i; } } return -1; } //输出查找到的药品信息 void show_drug_number_find() { int number; printf("请输入要查找的编号编号\n"); while (scanf("%d", &number) != 1) { printf("输入有误,请重新输入\n"); scanf("%*[^\n]%*c"); } int ret = drug_number_find(number); if (ret == -1) { printf("未找到\n"); } else { printf("找到了,信息为\n"); printf("%s\t\t\t%d\t\t\t%d\t\t\t%d\n", med.medicine_array[ret].drug_name, med.medicine_array[ret].drug_number, med.medicine_array[ret].price, med.medicine_array[ret].num); } } //按姓名查找药品信息 int drug_name_find(char *name) { int i; for (i = 0; i < med.size; ++i) { if (strcmp(name, med.medicine_array[i].drug_name) == 0) return i; } return -1; } //按姓名查找药品信息,并将药品信息输出 void show_drug_name_find() { char name[100]; printf("请输入你要查找的药品姓名\n"); scanf("%s", name); int ret = drug_name_find(name); if (ret == -1) { printf("未找到\n"); } else { printf("找到了,药品信息为\n"); printf("%s\t\t\t%d\t\t\t%d\t\t\t%d\n", med.medicine_array[ret].drug_name, med.medicine_array[ret].drug_number, med.medicine_array[ret].price, med.medicine_array[ret].num); } } //保存药品信息到文件 void save_medicine() { int i; FILE *fp = fopen(MEDICINE_FILE, "w"); if (fp == NULL) { return; } for (i = 0; i < med.size; ++i) { fprintf(fp, "%s %d %d %d\n", med.medicine_array[i].drug_name, med.medicine_array[i].drug_number, med.medicine_array[i].price, med.medicine_array[i].num); } fclose(fp); } 文件格式 999感冒灵 1 14.9 200 氯雷他定片 2 65.0 150 肠炎宁片 3 28.0 150 布洛芬胶囊 4 29.8 230 板蓝根颗粒 5 23.8 300 不知道为什么输出总是有问题,文件里的内容输出了,但是多出好多0,格式也有问题,希望各位大佬帮帮忙
需求:实现将数组中所有元素调整为左右两部分,左边为奇数,右边为偶数。(c语言)
int main(){
int size;
printf("enter the size of arr:");
scanf("%d",&size);
int arr[size];
for(int i;i "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241222/ef0cdfa83c511a592582e49b76aecfef.png)
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241222/e7a57d8f9ba8d3cc427881e06589f88c.png)
一道很简单的二重积分问题,请问大佬,不按对称性的解法,按常规解法怎么算出结果的?
我算的总是不对... 还有对称性的解法, 为什么关于y = 0对称就能推出上图的表达式。 没找到对称性关于这点的知识点。
"45a554ef38e56a64d4e534dff2566cb.jpg" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241222/6895db72b2458e7b6fb6b37870ebb550.png) 代码剑客行
极坐标下二重积分问题?