char *c[44] = {"C言語のことは漏れに聞け!"};

このエントリーをはてなブックマークに追加
>>950
ブランク文字の後にEOFになったらどうすんの?
K&Rはungetc大好きだからな。
ungetc使ったやつがおそらく著者の想定した答だろう。
>>950
だ〜か〜ら〜。
Tab 文字とか来たら仕様通り動かないでしょうが次スレよろしく。
while ((c= getchar()) != EOF){
    if (isspace(c)){
        while (c != EOF && isspace(c= getchar()))
            ;
        putchar(' ');
        if (c == EOF)
            goto OUT;
    }
    putchar(c);
}
OUT:
K&Rで「空白」といったら「ホワイトスペース文字全般」じゃないの?
まあ、いずれにせよ本質的な問題じゃないね。
>>955
940の方が…
はい。じゃこれで決定版ということで。

while((ch = getchar()) != EOF){
 putchar(ch);
 if (ch == ' ') {
  while ((ch = getchar()) == ' ')
   ;
  ungetc(ch, stdin);
 }
}
>>956
空白の次に改行があったら、その改行はスキップされるがよろしいか?
>>958
それでよし。
961西門 ◆J1DLkSnXwI :02/11/27 21:30
int ch, last_char_was_space = 0;
while ((ch = getchar()) != EOF) {
 if (! last_char_was_space || ch != ' ')
  putchar(ch);
 last_char_was_space = (ch == ' ');
}
962デフォルトの名無しさん:02/11/27 21:32
>>958
ungetcってEOFも戻せるんだっけ?
963西門 ◆J1DLkSnXwI :02/11/27 21:33
ungetc(c, fp)で、cがEOFだと失敗して、fpは影響を受けない。
#include <stdio.h>
int getchoo(void) {
static int last = EOF;
int ch;
if ( last != EOF ) { ch = last; last = EOF; return ch; }
ch = getchar();
if ( ch != ' ' ) return ch;
while ( (last = getchar()) == ' ' );
return ch;
}
int main(void) {
int ch;
while ( (ch = getchoo()) != EOF ) putchar(ch);
return 0;
}
戻せないらしい
966西門 ◆J1DLkSnXwI :02/11/27 21:36
>>965
ん? >>958はだから正しく動くよ。

・ungetcが失敗してstdinはEOF状態のまま。
・次のgetcharでもう一度EOFが返る。
>>961

感動しますた。
968デフォルトの名無しさん:02/11/27 21:39
誰か次スレよろ。
質問します。

int *a,b;
ここで宣言した*aは「ポインタとして使うためにaというスペースを作る」という意味ですか?
このaに普通に数字を代入すると、その数字もアドレスとして認識されるのですか?
ですよね?
だまれ
971デフォルトの名無しさん:02/11/27 21:51
>>969
「普通に数字」って?
整数型の値なら、そのまま代入はできないよ。
972デフォルトの名無しさん:02/11/27 22:00
if(c == ' ')

if(isspace(c))
ってなにかちがうのですか?
>>971
本当ですか?
int *a;
a=1000;
ではエラーがでるのですか?
974デフォルトの名無しさん:02/11/27 22:02
>>969
int *a; ってのは、int *型の変数aを宣言する、と読む。
で、変数aに代入できるのはint *型の値だけ。だから
a = 10 とかは出来ないよ。10はint *型じゃなくてint型だから。
975971:02/11/27 22:03
>>973
「本当ですか?」と聞く前にやってみやよ。
976973:02/11/27 22:04
>>975
自然にコンパイルとおりましたが?
>>972
isspace() が何なのか調べてみようとは思わないのか?

>>973
とりあえず、「数字」 と 「数値」 を区別してくれ。
978デフォルトの名無しさん:02/11/27 22:06
>>977
知らないなら知らないっていいなよ、お・ば・か・さ・ん
次スレのテンプレ、自助努力というキーワードを盛り込んでくれ。
980971:02/11/27 22:08
>>975
どんな処理系だ?そりゃ? gccでやってみたら、
> warning: assignment makes pointer from integer without a cast
って出た。
>>977
違う。
isspace() は C 標準の関数だから、普通に C を勉強していれば知っているはずだ
と言った。
982971:02/11/27 22:09
>>980
まちがえた、
>>976 だった。
誰か次スレ〜!!

漏れ立てらんね
984デフォルトの名無しさん:02/11/27 22:12
次スレのタイトルは以下でお願いします

char (*c)[44] = "C言語のことは漏れに聞け!";
985977:02/11/27 22:13
>>981
いつ言ったんだよ?
986デフォルトの名無しさん:02/11/27 22:14
>>984
いいけど、それ文法違反やんか。型が違うぞ。
>>984
44 かよ
>>984
俺に任せろ!
1000!
990
991984:02/11/27 22:16
>>986
文法違反ではありません。数字は45でお願いします。
>>974
わかりました、ありがとうございます。
具体的にint *型の値というのはどのようなものなんでしょうか?
つまり具体的なアドレスならば代入可能なんですか?>>794のような6618624とかでもダメですか?
>>985
7 年くらい前
994デフォルトの名無しさん:02/11/27 22:17
>>991
コンパイルしてみな。
995デフォルトの名無しさん:02/11/27 22:18
1000
>>982
976は私ではありません。
  _ハ、            _ハ、
 (- ・  ヾ          (- ・  ヾ
   ̄\  ヾ          ̄\  ヾ   
    (     ̄ ̄ ̄ヽヾ、    (     ̄ ̄ ̄ヽヾ、
     |        〈  ゞ   |        〈  ゞ
    / /| | ̄ ̄/ / | |     / /| | ̄ ̄/ / | |
    // ヽニニ// ヽニニl.  // ヽニニ// ヽニニl
   //     //.        //     //
   `       `        .`       `
998デフォルトの名無しさん:02/11/27 22:19
1000
>>974
重箱の隅だが、void* 型や int[] 型も代入できるぞ。
1000デフォルトの名無しさん:02/11/27 22:19
このままスレが立たずに1000までいったら終了としましょう。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。