scanf %cが入力できない問題

Cでハマってしまったのでメモ(こぴぺ)

 

入力が文字(char)の場合、主にキーボードで入力の際に押されるリターンキーが無視できないという問題点がある。例えば

char a, b, c;
scanf("%c", &a);
scanf("%c", &b);
scanf("%c", &c);

とした場合、通常なら3回入力待ちが行われることが期待されていると思われるが、実際には2回しか行われない(予期しない入力はここでは考慮しない)。これは最初の a の入力には入力された文字が代入されるが、このときストリーム上に改行コードが残されてしまい、次の bには aを入力する際に押下されたリターンキーの改行コードが代入されるためである。通常の %d や %s の場合改行コードは無視して入力を読み込むので問題にはならないが、 %c の場合は無条件にストリーム上の次のバイトを返すためこのような現象が発生する。これを防ぐには、

scanf("%c", &a);
scanf(" %c", &b);
scanf(" %c", &c);

のように最初に空白を入れることで回避される。これは入力前に空白(改行コードも含む)を読み飛ばすことを意味している。ただしこの場合 a, b, cに半角スペースを代入することはできない。そのような場合としては

scanf("%c%*c", &a);
scanf("%c%*c", &b);
scanf("%c%*c", &c);

という方法がとられる。これは入力した際の改行文字を%*cで除去することを意味する。

scanf - Wikipedia

  

PHP実行環境を構築してみた&時報botをつくってみた

PHP でも勉強してみるかと思い立ってここ2,3日ドットインストールでお勉強していた。どうやらPHPってのは、サーバー上で動かさないといけないらしい。

 

Macのweb共有

「Mac PHP 実行」で調べたら、macにはphpがプリインストールされているからapacheを有効化すれば簡単に実行できるんだそうで。

 

 

MAMP

というわけで当初はMacの「ウェブ共有」機能を使っていたが、Twitterbotなんか動かすのにCONSUMER KEY やらなんやらを全世界に公開してしまうのはよろしくないであろうということに気がついたのでMAMPを使うことにした。これならローカルで動いてるってことになるのかな?

MAMP: Mac, Apache, MySQL, PHP

 

/Applications/MAMP/bin/php/php5.4.10/conf/にあるphp.iniをいじってタイムゾーンを"Asia/Tokyo"に。(/Applications/MAMP/conf/php5.4.10/のphp.iniをいじっても反映されないので注意!!!!!ここで一時間くらいハマった...)

 

botの作成

ツイッターボットを作る (全10回) - プログラミングならドットインストール

を参考に作ってみました!

30分ごとに現在時刻をつぶやく時報bot  (@hd_bot_)

crontab で30分おきにlocalhost上のbot.phpをopenすることでツイートしてます。

 

crontab

crontabの操作はterminalを開いて、

crontab -l 今あるスクリプトの確認

crontab -e 編集

crontab -r 全部消す

今回は30分おきに命令を実行して欲しいので

*/30 * * * * open ろーかるほすと/bot.php

という感じで。