RoboCup Junior Japan Rescue Kanto OB
2005~2013
2005~2013
改悪だろこれ。見にくい・・・(笑)
という訳で、以前お話しした耀に今回は、scanf文のもっとコアな使い方について説明したいと思います。
前回の話では、通常はscanfの文は
こんな風や、
scanf("%c",&s);
こんな風に
scanf("%d",&x);
記述することで、キーボードから値を入力することができるものであるというで辺りで終わったかと思います。
今回はこの入力をもっと複雑に行う方法について紹介します。
例えばこんな感じのプログラム。
#include <stdio.h>
int main(void)
{
char s;
printf("PIC講習は終了しましたか?(y/n)");
scanf("%[yn]",&s);
printf("貴方の答えは%cです。",s);
return 0;
}
このプログラムだと、scanfは小文字のyとnしか認識しません。
yかn以外の文字や数字が入力された場合は、強制的に読み取りを中止します。
つまりyかn以外の返答は無視されるようなプログラムが作成できます。
このように[]内で指定した文字のみを入力し、それ以外を入力しないシステムを、スキャン集合指定子といいます。
なんだかフィルタのようなものですよね。実際そんな感じです。
でも、この読み取る文字が例えば、数字以外、なんて感じにしたい場合に、これだと大変ですよね。
なので逆に今度は「読み取らない文字」を指定する方法を紹介します。
#include <stdio.h>
int main(void)
{
char s;
printf("評価を入力してください(A~Zランク)");
scanf("%[^0123456789\n]",&s);
printf("評価ランクは%cです。",s);
return 0;
}
このように読み取らない文字を指定する場合は、先程と同じように指定したい文字を[]で囲います。
そして指定する文字の前に^を付けます。これで読み取らない文字の指定をすることができます。
このプログラムで読み取らない文字は0から9の数字と\nという記号です。
これは\とnではなく、\nで一つの記号を意味しています。記号の意味はズバリ、「改行」です。
C言語においては、改行を\nという記号で示しているのです。これをそのまま改行記号といいます。
だから例えばprintfで
あ
い
う
え
お
と表示したい場合は
printf("あ
い
う
え
お
");
と記述するのではなく、
printf("あ\nい\nう\nえ\nお\n");
と記述すればいいという訳です。
また先程の0から9の指定は
scanf("%[^0-9\n]",&s);
このようにハイフンを使って簡略化することができます。
これは全てのコンパイラで対応している訳ではないんですが、
一般的に使える方法なので覚えておくとさらに便利ですね。
まだまだscanfには色々と複雑な記述方法がありますが、
scanfだけをいつまでもぐだぐだやっている訳にもいかないので、
scanfの話はこの辺で一度終了とさせていただきます。
まぁまた時間があればこの話はしていこうかな。
それで次回ですが、次回はいよいよ条件式、まずはif文について書いていこうと思います。
それではまたまた。
(^・ω・)ノRadiumProduction in RoboCup Junior
という訳で、以前お話しした耀に今回は、scanf文のもっとコアな使い方について説明したいと思います。
前回の話では、通常はscanfの文は
こんな風や、
scanf("%c",&s);
こんな風に
scanf("%d",&x);
記述することで、キーボードから値を入力することができるものであるというで辺りで終わったかと思います。
今回はこの入力をもっと複雑に行う方法について紹介します。
例えばこんな感じのプログラム。
#include <stdio.h>
int main(void)
{
char s;
printf("PIC講習は終了しましたか?(y/n)");
scanf("%[yn]",&s);
printf("貴方の答えは%cです。",s);
return 0;
}
このプログラムだと、scanfは小文字のyとnしか認識しません。
yかn以外の文字や数字が入力された場合は、強制的に読み取りを中止します。
つまりyかn以外の返答は無視されるようなプログラムが作成できます。
このように[]内で指定した文字のみを入力し、それ以外を入力しないシステムを、スキャン集合指定子といいます。
なんだかフィルタのようなものですよね。実際そんな感じです。
でも、この読み取る文字が例えば、数字以外、なんて感じにしたい場合に、これだと大変ですよね。
なので逆に今度は「読み取らない文字」を指定する方法を紹介します。
#include <stdio.h>
int main(void)
{
char s;
printf("評価を入力してください(A~Zランク)");
scanf("%[^0123456789\n]",&s);
printf("評価ランクは%cです。",s);
return 0;
}
このように読み取らない文字を指定する場合は、先程と同じように指定したい文字を[]で囲います。
そして指定する文字の前に^を付けます。これで読み取らない文字の指定をすることができます。
このプログラムで読み取らない文字は0から9の数字と\nという記号です。
これは\とnではなく、\nで一つの記号を意味しています。記号の意味はズバリ、「改行」です。
C言語においては、改行を\nという記号で示しているのです。これをそのまま改行記号といいます。
だから例えばprintfで
あ
い
う
え
お
と表示したい場合は
printf("あ
い
う
え
お
");
と記述するのではなく、
printf("あ\nい\nう\nえ\nお\n");
と記述すればいいという訳です。
また先程の0から9の指定は
scanf("%[^0-9\n]",&s);
このようにハイフンを使って簡略化することができます。
これは全てのコンパイラで対応している訳ではないんですが、
一般的に使える方法なので覚えておくとさらに便利ですね。
まだまだscanfには色々と複雑な記述方法がありますが、
scanfだけをいつまでもぐだぐだやっている訳にもいかないので、
scanfの話はこの辺で一度終了とさせていただきます。
まぁまた時間があればこの話はしていこうかな。
それで次回ですが、次回はいよいよ条件式、まずはif文について書いていこうと思います。
それではまたまた。
(^・ω・)ノRadiumProduction in RoboCup Junior
カレンダー
最新CM
カテゴリー
らじぷろ目次
らじぷろ検索機
最新記事
(01/01)
(08/27)
(04/29)
(01/01)
(11/20)
(09/06)
(09/04)
(08/09)
(08/06)
(07/27)
(05/29)
(03/15)
(01/01)
(05/07)
(01/11)
プロフィール
HN:
Luz
性別:
男性
アーカイブ