docs/Writerside/topics/map.h.md

changeset 1298
0597f1f20ea9
parent 1274
03e9360e98f5
equal deleted inserted replaced
1297:0811fb9a8dba 1298:0597f1f20ea9
65 // Iterate through the contact list 65 // Iterate through the contact list
66 CxMapIterator iter = cxMapIterator(contacts); 66 CxMapIterator iter = cxMapIterator(contacts);
67 cx_foreach(CxMapEntry *, entry, iter) { 67 cx_foreach(CxMapEntry *, entry, iter) {
68 cxstring name = cx_strn(entry->key->data, entry->key->len); 68 cxstring name = cx_strn(entry->key->data, entry->key->len);
69 const char *phone = entry->value; 69 const char *phone = entry->value;
70 printf("%.*s: %s\n", (int) name.length, name.ptr, phone); 70 printf("%" CX_PRIstr ": %s\n", CX_SFMT(name), phone);
71 } 71 }
72 72
73 cxMapFree(contacts); 73 cxMapFree(contacts);
74 74
75 return 0; 75 return 0;
80 80
81 In the first part we add several entries to the map. 81 In the first part we add several entries to the map.
82 Then the example shows retrieval, updating, and removal of information. 82 Then the example shows retrieval, updating, and removal of information.
83 The last part shows how to iterate over the pairs of the map and how to recover the string from the key. 83 The last part shows how to iterate over the pairs of the map and how to recover the string from the key.
84 84
85 In real world situations, however, it is quite unlikely that you will use a map to store string literals. 85 In real-world situations, however, it is quite unlikely that you will use a map to store string literals.
86 The next example shows a more realistic program, where it is necessary to store strings based on user input. 86 The next example shows a more realistic program, where it is necessary to store strings based on user input.
87 87
88 ```C 88 ```C
89 #include <stdio.h> 89 #include <stdio.h>
90 #include <string.h> 90 #include <string.h>
140 input[strcspn(input, "\n")] = '\0'; 140 input[strcspn(input, "\n")] = '\0';
141 cxmutstr *phone = cxMapGet(contacts, input); 141 cxmutstr *phone = cxMapGet(contacts, input);
142 if (phone == NULL) { 142 if (phone == NULL) {
143 puts("No record."); 143 puts("No record.");
144 } else { 144 } else {
145 printf("Result: %.*s\n", 145 printf("Result: %" CX_PRIstr "\n",
146 (int) phone->length, phone->ptr); 146 CX_SFMT(*phone));
147 } 147 }
148 } 148 }
149 } else if (input[0] == '3') { 149 } else if (input[0] == '3') {
150 fputs("Name > ", stdout); 150 fputs("Name > ", stdout);
151 if (fgets(input, buffer_size, stdin)) { 151 if (fgets(input, buffer_size, stdin)) {
165 cx_foreach(CxMapEntry *, entry, iter) { 165 cx_foreach(CxMapEntry *, entry, iter) {
166 cxstring name = cx_strn(entry->key->data, 166 cxstring name = cx_strn(entry->key->data,
167 entry->key->len); 167 entry->key->len);
168 // ... except that here we get cxmutstr* 168 // ... except that here we get cxmutstr*
169 cxmutstr *phone = entry->value; 169 cxmutstr *phone = entry->value;
170 printf("%.*s: %.*s\n", 170 printf("%" CX_PRIstr ": %" CX_PRIstr "\n",
171 (int) name.length, name.ptr, 171 CX_SFMT(name), CX_SFMT(*phone));
172 (int) phone->length, phone->ptr);
173 } 172 }
174 } else if (input[0] == '0') { 173 } else if (input[0] == '0') {
175 running = false; 174 running = false;
176 } else { 175 } else {
177 puts("Please select a menu item.\n"); 176 puts("Please select a menu item.\n");

mercurial