[英]The C Programming Language K&R exercise 1- 9
我是這里的新手,一般來說對編程邏輯比較陌生。 為了提高我的技能,我開始閱讀這篇精美的文學作品。 我真的覺得我很好地掌握了這些概念,但這個練習似乎讓我措手不及。 我可以制作程序,但我看到的一些示例似乎介紹了本書尚未涵蓋的一些概念,例如此處的示例。 inspace
似乎提供的功能不僅僅是程序員創建的變量。
#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;
}
在下一個示例中, pc
似乎在計算空間方面做了一些事情,但我不確定是什么。
我設法創建了一個完成此任務的程序,但它僅使用了我創建的變量 c,因此我了解它的用途。
這段代碼的目的是復制文本,如果有多個空格' '
連續只打印一個空格。
變量inspace
用於跟蹤上次打印的字符是 scape 還是非空格。
如果inspace
為零意味着打印的字符不是空格。 和
如果inspace
是 one 表示最后一次打印空間。
因此,如果下一次inspace
為零,則可以在讀取 scape 時打印 scape,如果inspace
為 1,則找到下一個連續的 scape,因此不打印空間。
請參閱C
是當前讀取的字符。 (閱讀評論)
if(c == ' ') // currently space read
{
if(inspace == 0) // last time non-space printed, So space can be print
{
inspace = 1; // printing space so switch inspace 1
putchar(c); // print space
}
}
下一個if
if(c != ' ') // A char not space read, its to to print unconditionally
{
inspace = 0; // remember that non-scape print
putchar(c);
}
花了我一段時間,但這是我認為的答案。
#include <stdio.h>
main()
{
int c, blank;
blank = 0;
while ((c=getchar()) != EOF){
if (c == ' '){
if (blank == 0){
printf("%c", c);
blank = 1;
}
}
if (c != ' '){
if (blank == 1){
blank = 0;
}
printf("%c", c);
}
}
}
inspace
本質上是一個變量,用於指示您是否處於“剛剛看到一個空間”狀態。 看到空格就進入這個狀態,看到非空格就退出這個狀態。 僅當您不處於inspace
狀態時才打印您的輸入,因此您不會打印多個相鄰的空格。
我設法創建了一個完成此任務的程序,但它僅使用了我創建的變量 c,因此我了解它的用途。 在您的程序中,如果輸入是“hello world”,那是它的確切輸出嗎? 您發布的程序將輸出“hello world”(將單詞之間的多個空格壓縮為一個)。
我也遇到了同樣的問題,但最終得到了一個有效的程序。
#include<stdio.h>
/* copy input to its output, replacing each
string of one or more blanks by a single blank */
int main()
{
int c, nspace=0;
while((c=getchar()) != EOF){
if(c==' ') ++nspace;
else{
if(nspace >= 1){
printf(" ");
putchar(c);
nspace=0;
}
else
putchar(c);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.