我有一個源代碼中C.C代碼 - 不能通過putchar插入新行。
#include <stdio.h>
#define IN_W 1
#define OUT_W 0
#define SPACE 32
#define TAB 9
int main() {
int c, state, temp;
state = OUT_W;
while ((c = getchar()) != EOF) {
if ((c != SPACE || c != TAB) && (state == OUT_W)) {
state = IN_W;
temp = c;
c = 13;
putchar(c);
c = 10;
putchar(c);
putchar(temp);
} else if (c != SPACE || c != TAB)
putchar(c);
else
state = OUT_W;
}
return 0;
}
我想要實現的是,我將鍵入一些字符/字和通過的getchar趕上那些輸入。當getchar接收到空格或製表符以外的任何字符時,它將打印一個新行,然後打印這些字符,直到找到空格或製表符(放棄它們)。例如,當我鍵入
123 eat 4bananas in themorning
程序將打印
123
eat
4bananas
in
themorning
我試圖將其與CR或LF整合,但它仍然打印「123 themorning吃4bananas」。我想問的是: 1.我錯過了什麼? 2.在過去的 '其他',其中之一是對正在運行的程序更有效:
else
state = OUT_W;
或
else if ((c == SPACE || c == TAB) && state == IN_W)
state = OUT_W;
else
continue; // or can I use single ';' since we do nothing in here?
這就是全部。感謝您的幫助。
注意:我試着玩'\ n'和'\ t'。
問候, 馬里奧
不要使用像10和13這樣的「幻數」作爲字符常量。只需使用''''作爲空格,使用''t''作爲標籤,使用'\ n''作爲換行符。如果你需要返回字符,你可以使用''\ r'' - 但你沒有;將''\ n''寫入標準輸出會自動爲您的系統生成正確的行尾序列,無論是「LF」還是「CR LF」。 –
除非你在一個UNIX機器上與需要DOS EOL特性的設備通話:-) – paxdiablo