如何控制標籤位置以正確縮進作爲輸入提供的一段代碼?控制標籤位置以便在輸出中正確縮進
我使用括號中的計數器來設置適當的縮進量(例如,如果第一個{
位於位置1,則下一個應位於位置9)。
這裏是我的代碼:
#include <stdio.h>
#include <stdlib.h>
main() {
int ch;
ch = getchar();
int lbcounter = 0; // Left curly bracket counter
int rbcounter = 0; // Right curly bracket counter
while (ch != EOF) {
if (ch != ';' && ch != '{' && ch!= '}') {
putchar(ch);
}
if (ch == ';') {
putchar(ch);
putchar('\n');
}
if (ch == '{') {
putchar('\n');
if(lbcounter == 0) {
putchar('\n');
lbcounter++;
putchar(ch);
putchar('\n');
} else {
putchar('\t');
lbcounter++;
putchar(ch);
putchar('\n');
}
}
if (ch == '}') {
putchar('\n');
if(rbcounter == 0) {
putchar('\t');
rbcounter++;
putchar(ch);
putchar('\n');
} else {
putchar('\n');
rbcounter++;
putchar(ch);
putchar('\n');
}
}
ch = getchar();
}
}
例如,對於下面的輸入:
int main(void){{{{{{{;;(void)((((0))));;return 0;}}}}}}}
我們期待以下的輸出:
int main(void)
{
{
{
{
{
{
{
;
;
(void)((((0))));
;
return 0;
}
}
}
}
}
}
}
但實際產量爲:
int main(void)
{
{
{
{
{
{
{
;
;
(void)((((0))));
;
return 0;
}
}
}
}
}
}
}
總結:每次從輸入中讀取左花括號時,我想將縮進量增加一個\t
- 除非它是第一個,在這種情況下,我只想插入一個換行符。
當讀取第一個右括號括號時,我想讓它匹配最後一個左括號的位置。每次讀取新的右括號時,縮進應該減少一個\t
。
這裏的相關排序,特別是給出了我評論過的其他答案之一;你會考慮提出一些解釋嗎?我得到你要去的地方,但對OP和未來讀者進行解釋可能會有幫助。 – 2014-12-02 15:20:08
我認爲這很簡單直接的實現。我認爲這不是特別困難的地方。雖然我認爲不適合實際使用。 – BLUEPIXY 2014-12-02 15:24:53
@BLUEPIXY你能向我解釋一下topOfLine變量的用法嗎? – CharisAlex 2014-12-03 11:49:55