2015-01-20 66 views
0

所以這是我的代碼,我試圖用單個空格替換多個空格和製表符。輸入是多行,包含多個製表符和空格(包括混合製表符和空格句)。我多寫這之後卡住:用一個空格替換一個或多個空格和/或製表符的每個字符串

#include <stdio.h> 
#define NONBLANK 'a' 
main(){ 
int c, lastc; 

lastc = NONBLANK; 

while ((c = getchar()) !=EOF) { 
    if (c != ' ' || lastc !=' '){ 
     if (c != '\t' || lastc !='\t'){ 

       putchar(c); 
      lastc = c;} 

      } 
     } 
    } 
} 
+2

你的想法是保存最後一個字符是好的,但你應該修改你的邏輯。空間或標籤?當最後一個字符不是空格或製表符時打印一個空格。還要別的嗎?無論最後一個字符如何打印。 – 2015-01-20 20:05:39

+0

一目瞭然(除非我錯過了一個錯誤),這似乎應該用一個空格替換空格的運行,並用單個選項卡運行一個標籤。這是你的意圖,還是應該將空格和製表符混合替換爲一個字符?你也可能對'isspace'函數感興趣,儘管它也捕獲換行符。 http://www.mkssoftware.com/docs/man3/isspace.3.asp – Katie 2015-01-20 20:06:29

回答

0

的問題是,getchar()呼應的輸入,因爲它是類型化,通過回你想冷凝空間和標籤迷惑你。嘗試使用非回聲getch()。我沒有使用EOF來結束,但是返回,如你所願地嘗試這個。

#include <stdio.h> 
#include <conio.h> 

int main(void) 
{ 
    int c, lastc = -1; 
    while ((c = getch()) != '\r') { 
     if (c != ' ' && c != '\t'){ 
      if (lastc == ' ' || lastc == '\t') 
       putchar(' '); 
      putchar(c); 
      } 
     lastc = c; 
    } 
    return 0; 
} 

請注意您的錯誤聲明main()

相關問題