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で「空白」といったら「ホワイトスペース文字全般」じゃないの?
まあ、いずれにせよ本質的な問題じゃないね。
はい。じゃこれで決定版ということで。
while((ch = getchar()) != EOF){
putchar(ch);
if (ch == ' ') {
while ((ch = getchar()) == ' ')
;
ungetc(ch, stdin);
}
}
>>956 空白の次に改行があったら、その改行はスキップされるがよろしいか?
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も戻せるんだっけ?
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;
}
戻せないらしい
>>965 ん?
>>958はだから正しく動くよ。
・ungetcが失敗してstdinはEOF状態のまま。
・次のgetcharでもう一度EOFが返る。
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型だから。
>>973 「本当ですか?」と聞く前にやってみやよ。
>>972 isspace() が何なのか調べてみようとは思わないのか?
>>973 とりあえず、「数字」 と 「数値」 を区別してくれ。
978 :
デフォルトの名無しさん:02/11/27 22:06
>>977 知らないなら知らないっていいなよ、お・ば・か・さ・ん
次スレのテンプレ、自助努力というキーワードを盛り込んでくれ。
>>975 どんな処理系だ?そりゃ? gccでやってみたら、
> warning: assignment makes pointer from integer without a cast
って出た。
>>977 違う。
isspace() は C 標準の関数だから、普通に C を勉強していれば知っているはずだ
と言った。
誰か次スレ〜!!
漏れ立てらんね
984 :
デフォルトの名無しさん:02/11/27 22:12
次スレのタイトルは以下でお願いします
char (*c)[44] = "C言語のことは漏れに聞け!";
986 :
デフォルトの名無しさん:02/11/27 22:14
>>984 いいけど、それ文法違反やんか。型が違うぞ。
1000!
990
>>986 文法違反ではありません。数字は45でお願いします。
>>974 わかりました、ありがとうございます。
具体的にint *型の値というのはどのようなものなんでしょうか?
つまり具体的なアドレスならば代入可能なんですか?
>>794のような6618624とかでもダメですか?
994 :
デフォルトの名無しさん:02/11/27 22:17
995 :
デフォルトの名無しさん:02/11/27 22:18
1000
_ハ、 _ハ、
(- ・ ヾ (- ・ ヾ
 ̄\ ヾ  ̄\ ヾ
(  ̄ ̄ ̄ヽヾ、 (  ̄ ̄ ̄ヽヾ、
| 〈 ゞ | 〈 ゞ
/ /| | ̄ ̄/ / | | / /| | ̄ ̄/ / | |
// ヽニニ// ヽニニl. // ヽニニ// ヽニニl
// //. // //
` ` .` `
998 :
デフォルトの名無しさん:02/11/27 22:19
1000
>>974 重箱の隅だが、void* 型や int[] 型も代入できるぞ。
1000 :
デフォルトの名無しさん:02/11/27 22:19
このままスレが立たずに1000までいったら終了としましょう。
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。