struct Store {
int number;
char name[50];
double caloNumber;
};
int main(int argc, const char * argv[]) {
int totalCalo = 0;
int keyNumber;
struct Store store1 = {1,"A",390},
store2 = {2, "B",710},
store3 = {3, "C",569},
store4 = {4, "D",450},
store5 = {5, "E",630},
store6 = {6, "F",370},
store7 = {7, "G",720},
store8 = {8, "H",680},
store9 = {9, "I",570},
store10 = {10, "J",530},
store11 = {11, "K",570},
store12 = {12, "L",380},
store13 = {13, "M",670},
store14 = {14, "N",590},
store15 = {15, "O",430};
printf("Enter the number");
printf("/Breakfast : \n");
scanf("%d",keyNumber);
printf("/Lunch : \n");
printf("/Dinner : \n");
//caculate 3 calories
return 0;
}
使用用户输入的号码提取特定数据时遇到了一些麻烦。
例如:A〜O是商店的名称,应用程序将询问用户选择了哪个商店,用户将输入商店的“ keyNumber”,第三个数字是卡路里数据。
我的问题是如何从keyNumber中获取卡路里数据。没有C语言的地图和字典,所以我只是不知道该怎么做。
最佳答案
如果您确实不想强迫用户查找食物的数量并且仍然具有查找gperf
,则可以使用O(1)
(https://www.gnu.org/software/gperf/)静态生成一个完美的哈希。像这样
%ignore-case
%readonly-tables
%struct-type
struct month { const char *name; int calories; };
%%
A, 390
B, 710
C, 569
D, 450
E, 630
F, 370
G, 720
H, 680
I, 570
J, 530
K, 570
L, 380
M, 670
N, 590
O, 430
%%
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
const struct month *month(const char *str) {
return in_word_set(str, strlen(str));
}
int main(void) {
const struct month *a = month("A"), *a_lc = month("a"), *z = month("z"),
*j = month("j");
printf("A: %d.\n"
"a: %d.\n"
"z: %d.\n"
"j: %d.\n", a ? a->calories : -1, a_lc ? a_lc->calories : -1,
z ? z->calories : -1, j ? j->calories : -1);
return EXIT_SUCCESS;
}
然后,
gperf Calories.gperf > Calories.c
。从gperf 3.0.4
开始,C
编译器抱怨未使用len
参数,但这可能是因为示例中所有示例的len == 1
。它还抱怨缺少初始化器,但这是固定的。A: 390.
a: 390.
z: -1.
j: 530.
关于c - 使用keyNumber提取数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54134909/