2012-08-24 182 views
0

我正在通過k & r工作,我正在處理問題1-18。編寫程序以刪除每行輸入中的TRAILING空白和製表符,並刪除完全空白的行。我的想法是讀每行,並計算空格的數量。如果它是使用putchar的第一個空白打印。如果有第二張空白不打印並將空格重置爲0.然後繼續閱讀並移除空格。刪除尾部空白

目前我只是打印其他任何東西,因爲我試圖做一點點。一旦我運行這個程序,我會在終端中獲得其中兩個。我認爲我錯誤地嵌套了if語句或else語句時遇到了問題,之前我有一些錯誤。我是否正確地去除空白的邏輯?如果有人能指出我正確的方向來修復代碼,我將不勝感激。

#include <stdio.h> 

main() 
{ 
    int c, i, spaces;    /*c for input, i for counting*/ 

    i = 0; 
    c = 0; 
    spaces = 0; 
    while ((c = getchar())!=EOF) 
      if(spaces = 0 && c == ' ') 
        ++spaces; 
        putchar(c); 
        if(spaces >= 1) 
          spaces = 0; 
      else { 
        putchar(c); 
      } 


} 
+0

我沒有檢查其餘的邏輯,但是這個'if(spaces = 0 && c =='')'應該可以是'if(spaces == 0 && c =='')' 。 '='vs.'==' – Henrik

+0

謝謝,愚蠢的錯誤。將終端中的奇怪問號減少到一個 – bigl

+0

你應該使用getchar()來解決這個問題(而不是讀整行)? – Scooter

回答

2

嘗試用:

if(spaces == 0 && c == ' ') 
{ 
    ++spaces; 
    putchar(c); 
    if(spaces >= 1) 
     spaces = 0; 
} 
else 
{ 
    putchar(c); 
} 

您的壓痕表明你想要的else分支去的第一個if,但因爲它是現在,它與內if對應。

另外,spaces = 0是一項任務,spaces == 0是一個比較。

+0

atleast現在運行的程序謝謝你,但它不會做它應該做的事情。也許我做錯了方式 – bigl

+0

@bigl你有調試嗎? –

+0

它基本上將所有字符正確地返回並運行正常。雖然 – bigl

0
  • 讀取字符串。
  • 使用strlen()或類似的方法查找字符串的結尾。
  • for(i=string_length-i; i>=0; i--)或使用指針,如果你喜歡。
  • 在找到第一個非空格時斷開循環。
  • 在第一個非空格+ 1處插入空終止符。