我正在通過K & R讀取,問題是:編寫一個程序將其輸入複製到其輸出,用一個空白替換一個或多個空白的每個字符串。在我看來,我想我知道我需要做什麼,設置一個布爾值來知道我什麼時候在一個空間裏。我嘗試過它並沒有成功。我發現這個代碼,它的工作原理,我正在努力弄清楚是什麼阻止了寫入的空間。我想我可能擁有它,但我需要澄清。限制空間只有一個在文本中 - c
#include <stdio.h>
int main(void)
{
int c;
int inspace;
inspace = 0;
while((c = getchar()) != EOF)
{
if(c == ' ')
{
if(inspace == 0)
{
inspace = 1;
putchar(c);
}
}
/* We haven't met 'else' yet, so we have to be a little clumsy */
if(c != ' ')
{
inspace = 0;
putchar(c);
}
}
return 0;
}
我創建了一個文本文件上下工夫,文曰:
so this is where you have been
上「這」狀態更改爲1的「s」之後,因爲我們是在一個空間。空間被寫入並讀取下一個空間。所以現在我們輸入:
while((c = getchar()) != EOF)
{
if(c == ' ')
{
if(inspace == 0)
{
inspace = 1;
putchar(c);
}
但是inspace不是0,它是1.那麼會發生什麼?代碼是否跳過返回0 ;,不寫任何東西,只是繼續while循環?返回0;是在循環之外,但這是我可以看到一個值沒有被返回的唯一方法。
它跳到''如果它跳過太多,繼續循環(C ='「!)。你可以看到'putchar(c)'(回顯輸入)只在沒有空格(第二個if)或空格(第一個if)和inspace = 0時完成。其中'inspace'的意思是「在讀取空格之前」 。 – 2012-07-22 16:47:38
說「我們還沒遇到別的東西」是荒謬的;該死的很好介紹'else'在這一點上,以防止這種荒謬的迂迴。 – 2012-07-22 16:47:45