scanf(“%s”,&str)的注意点:
如果你希望从字符串数组的某一位置处开始写入字符串,那么需要取该位置的地址,后面的元素都将被输入数据和结尾的’/0’覆盖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #include <stdio.h> #include <string.h> int main() { char map[12][12]; for (int i=0;i<=11;i++) map[i][0]='*',map[i][11]='*'; for (int i=0;i<=11;i++) map[0][i]='*',map[11][i]='*'; char *F; char *C; int keyf = 1, keyc = 1; for (int i=1; i<11; i++) { scanf("%s",&map[i][1]); if (keyf) F = strchr(map[i], 'F'); if (keyc) C = strchr(map[i], 'C'); if (F) { *F = '.'; keyf = 0; } if (C) { *C = '.'; keyc = 0; } } int time = 0, derF = 8, derC = 8; while (F != C) { time++; switch (derF) { case 8: if (*(F-12) != '*') F -= 12; else derF = 6; break; case 6: if (*(F+1) == '*' || *(F+1) == '\0') derF = 2; else F += 1; break; case 2: if (*(F+12) != '*') F += 12; else derF = 4; break; case 4: if (*(F-1) != '*') F -= 1; else derF = 8; break; } switch (derC) { case 8: if (*(C-12) != '*') C -= 12; else derC = 6; break; case 6: if (*(C+1) == '*'|| *(C+1) == '\0') derC = 2; else C += 1; break; case 2: if (*(C+12) != '*') C += 12; else derC = 4; break; case 4: if (*(C-1) != '*') C -= 1; else derC = 8; break; } if (time > 10000) { time = 0; break; } } printf("%d",time); return 0; }
|