├── IntRollingBuffer.c └── structParking.c /IntRollingBuffer.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | void dumpInts(int *array, int count, int hex); 5 | 6 | void dumpInts(int *array, int count, int hex) 7 | { 8 | int i; 9 | for (i = 0; i < count; i++) { 10 | // 0xdeadbeef 0x00000001 0x00000003 0x00000003 0x00000004 0xc0d4f00d 11 | if (i > 0) 12 | printf(" "); 13 | if (hex == 0) { 14 | printf("%11d", array[i]); 15 | } else { 16 | printf(" 0x%08x", array[i]); 17 | } 18 | } 19 | printf("\n"); 20 | } 21 | 22 | void insertInt(int *array, int count, int n) 23 | { 24 | int i; 25 | if (count < 2) return; 26 | array[1] = n; 27 | for (i = 1; i < count-2; i++) { 28 | if (n > array[i + 1]) { 29 | array[i] = array[i+1]; 30 | array[i+1] = n; 31 | } else { 32 | break; 33 | } 34 | } 35 | printf("\n"); 36 | dumpInts(array, count, 0); 37 | dumpInts(array, count, 1); 38 | } 39 | 40 | int main() { 41 | int *array = NULL; 42 | int n = 0; 43 | int ret; 44 | int i; 45 | int c; 46 | int last = 0; 47 | int v; 48 | ret = scanf("%d", &n); 49 | if (ret == 0) { 50 | fprintf(stderr, "ERROR: Cannot read the buffer length.\n"); 51 | return 1; 52 | } 53 | if (n < 1) { 54 | fprintf(stderr, "ERROR: len is less than 1.\n"); 55 | return 1; 56 | } 57 | array = (int *)malloc(sizeof(int) * (n + 2)); 58 | if (array == NULL) { 59 | fprintf(stderr, "ERROR: malloc error.\n"); 60 | return 1; 61 | } 62 | array[0] = 0xdeadbeef; 63 | array[n+1] = 0xc0d4f00d; 64 | for (i = 1; i <= n; i++) { 65 | array[i] = i; 66 | } 67 | dumpInts(array, n + 2, 0); 68 | dumpInts(array, n + 2, 1); 69 | while (1) { 70 | c = getchar(); 71 | if (c == EOF) break; 72 | // get input integer 73 | if (c >= '0' && c <= '9') { 74 | if (last) { 75 | if (v < 0) { 76 | v = v * 10 - (c - '0'); 77 | } else { 78 | v = v * 10 + c - '0'; 79 | } 80 | } else { 81 | v = c - '0'; 82 | last = 1; 83 | } 84 | } else if (c == '+') { 85 | // processing + 86 | if (last) { 87 | insertInt(array, n + 2, v); 88 | last = 0; 89 | } 90 | c = getchar(); 91 | if (c >= '0' && c <= '9') { 92 | v = c - '0'; 93 | last = 1; 94 | } else { 95 | fprintf(stderr, "\nOOPS: Non-integer input! 0x%x='%c'\n", '+', '+'); 96 | } 97 | } else if (c == '-') { 98 | // processing - 99 | if (last) { 100 | insertInt(array, n + 2, v); 101 | last = 0; 102 | } 103 | c = getchar(); 104 | if (c >= '0' && c <= '9') { 105 | v = c - '0'; 106 | v *= -1; 107 | last = 1; 108 | } else { 109 | fprintf(stderr, "\nOOPS: Non-integer input! 0x%x='%c'\n", '+', '+'); 110 | } 111 | } else if (c == '\n' || c == ' ') { 112 | // end processing one integer 113 | if (last) { 114 | insertInt(array, n + 2, v); 115 | last = 0; 116 | } 117 | } 118 | else { 119 | if (last) { 120 | insertInt(array, n + 2, v); 121 | last = 0; 122 | } 123 | fprintf(stderr, "\nOOPS: Non-integer input! 0x%x='%c'\n", c, c); 124 | } 125 | } 126 | return 0; 127 | } 128 | -------------------------------------------------------------------------------- /structParking.c: -------------------------------------------------------------------------------- 1 | #include "proj04.h" 2 | #include 3 | 4 | int value; 5 | 6 | int fillOneFoo(Foo* p) 7 | { 8 | int ret; 9 | ret = scanf("%d%d%d%c%c", &p->arr[0], &p->arr[1], &p->arr[2], &p->c1, &p->c2); 10 | return ret; 11 | } 12 | 13 | void printInts(int *p, int count) 14 | { 15 | for (int i = 0; i < count; ++i) { 16 | printf("0x%08x", *(unsigned int*)(p+i)); 17 | if (i == count - 1) { 18 | printf("\n"); 19 | } else { 20 | printf(" "); 21 | } 22 | } 23 | } 24 | 25 | void printOneBar(Bar* p) 26 | { 27 | //Bar: x: 0x00000001=1 y: 0x00000002=2 z: 0x00000003=3 c1: 0x78 c2: 0x79 28 | printf("Bar: x: 0x%08x=%d y: 0x%08x=%d z: 0x%08x=%d c1: 0x%02x c2: 0x%02x\n", 29 | p->x, p->x, p->y, p->y, p->z, p->z, p->c1, p->c2); 30 | } 31 | 32 | void printOneBaz(Baz* p) 33 | { 34 | //Baz: x: 0x00000001=1 c1: 0x02 y: 0x00000003=3 c2: 0x78 z: 0x0000000a=10 35 | printf("Baz: x: 0x%08x=%d c1: 0x%02x y: 0x%08x=%d c2: 0x%02x z: 0x%08x=%d\n", 36 | p->x, p->x, p->c1, p->y, p->y, p->c2, p->z, p->z); 37 | } 38 | 39 | int main(void) 40 | { 41 | struct Foo array[4]; 42 | int i; 43 | int j; 44 | int n; 45 | unsigned char *p; 46 | int ret; 47 | scanf("%d", &n); 48 | for (i = 0; i < 4; i++) { 49 | p = (unsigned char*)(&array[i]); 50 | for (j = 0; j < (int)sizeof(Foo); j++) { 51 | *(p+j) = n; 52 | } 53 | } 54 | for (i = 0; i < 4; i++) { 55 | ret = fillOneFoo(&array[i]); 56 | if (ret != 5) { 57 | fprintf(stderr, "ERROR: fillOneFoo(): Could not read the required input; rc=0\n"); 58 | return 1; 59 | } 60 | } 61 | 62 | // Printing Sizes 63 | printf("sizeof(Foo)=%ld\n", sizeof(Foo)); 64 | printf("sizeof(Bar)=%ld\n", sizeof(Bar)); 65 | printf("sizeof(Baz)=%ld\n", sizeof(Baz)); 66 | 67 | printf("\n"); 68 | 69 | // Printing Raw Data 70 | printInts((int*)array, (int)(sizeof(array) / sizeof(int))); 71 | 72 | printf("\n"); 73 | 74 | // Printing Bar,Baz 75 | p = (unsigned char*)array; 76 | for(i = 0; i < 2; i++) { 77 | printOneBar((Bar*)(p+sizeof(Bar)*i)); 78 | } 79 | printf("\n"); 80 | 81 | for(i = 0; i < 2; i++) { 82 | printOneBaz((Baz*)(p+sizeof(Baz)*i)); 83 | } 84 | // printf("\n"); 85 | 86 | return 0; 87 | } 88 | --------------------------------------------------------------------------------