# 12094 - Coding in terminal ## 題解: 在處裡input跟output方面, 跟11269 - Text Editor那題是相同的, \s [x, y]可以用sscanf來讀取x跟y Print答案時要注意每行最多只能有x個字元, 有x個字元了或是遇到換行字元就換行 **Reference:** http://tw.gitbook.net/c_standard_library/c_function_sscanf.html ## Code: ```c=1 #include <stdio.h> #include <string.h> #include <ctype.h> #define MAXN 100005 int x = 80, y = 24, cursor = 0; char input[MAXN], output[MAXN], temp[MAXN]; void newChar(char ch){ strcpy(temp, &output[cursor]); strcpy(&output[cursor + 1], temp); output[cursor++] = ch; } void backspace(){ if(cursor > 0){ strcpy(temp, &output[cursor]); strcpy(&output[--cursor], temp); } } void left(){ if(cursor > 0) cursor--; } void right(){ if(output[cursor] != 0) cursor++; } int main(){ fgets(input, MAXN, stdin); for (int i = 0; i < MAXN; i++){ if(input[i] == '\n' || input[i] == 0) break; if(input[i] == '\\'){ if(input[i+1] == 'n'){ newChar('\n'); i++; } else if(input[i+1] == 'b'){ backspace(); i++; } else if(input[i+1] == 'l'){ left(); i++; } else if (input[i+1] == 'r') { right(); i++; } else if (input[i+1] == 's'){ sscanf(input + i + 3, "[%d %d]", &x, &y); while (input[i] != ']') i++; } } else if(isalpha(input[i]) || input[i] == ' ') newChar(input[i]); } for (int i = 0, count = 0; i < strlen(output); i++){ printf("%c", output[i]); count++; if(output[i] == '\n') count = 0; if(count >= x){ if(output[i + 1] != '\n'){ printf("\n"); count = 0; } } } return 0; } ``` 如果不用sscanf的話, s的部分改成如下 ```c x = 0; i += 4; while (input[i] != ' '){ x = (x * 10) + (input[i] - '0'); i++; } y = 0; i++; while(input[i] != ']'){ y = (y * 10) + (input[i] - '0'); i++; } ``` ###### tags: `NTHUOJ`