VC++でC言語入門:scanf()で数字を読み込み計算 [C言語入門]
スポンサードリンク
こんにちは菊月です。
前回はint型の変数を使って計算しました。
今回はそのint型の変数に入れる値を
scanf()を使いキーボードから入力しましょう
ちょっとプログラムらしさが出てきますね(?)
scanf()のfは、printf()のfと同じで
書式付きで文字を入力します。
使い方は
int a;
scanf("%d", &a);
という感じに使います。
"%d" 10進数で読み込み
&a 変数の前に&を付けるので注意
間にはコロン「 , 」が付くので注意です。
ではいってみよー
図1
今回ちょっと文字の表示で
printf()だけでなく
puts()を使ってみました。
これは¥nを書いていなくても表示で
改行を勝手に付けてくれます。
ただし
puts("%d",a);
という書き方はできないので注意。
あくまでも文字の表示だけです。
テキスト版(図1)
//--------------------------------------------
#include <stdio.h> void main(){ int a, b; puts("整数を2つ入力してください"); scanf("%d", &a); scanf("%d", &b); //バッファに残った改行文字(\n)の対処 getchar(); printf("%d+%d = %d\n", a, b, a+b); printf("%d-%d = %d\n", a, b, a-b); //終わるのを防ぐ getchar(); }
//--------------------------------------------
実行すると図2のような画面になるので
「10」と入力してエンターキーを押します
次に図3のような画面になるので
「22」と入力してエンターキーを押します
ちなみに数字は何でもいいです。
図2
図3
で、これ実行した時、たぶん一瞬で終わります。
原因はちゃんとあって
数字入力→エンター
とすると、内部では次の図のようなことが起こります。
図4
数字が入力が終わると、「¥n」が内部に残ってしまって、
最後のgetcahr()の時に、
内部にある「¥n」が入力されたことになります。
じゃあ対策は?ということで、
もう一個getchar()を加えるだけです。
テキスト版改良版
//--------------------------------------------
#include <stdio.h> void main(){ int a, b; puts("整数を2つ入力してください"); scanf("%d", &a); scanf("%d", &b); //バッファに残った改行文字(\n)の対処 getchar(); printf("%d+%d = %d\n", a, b, a+b); printf("%d-%d = %d\n", a, b, a-b); //終わるのを防ぐ getchar(); }
//--------------------------------------------
これで今度こそ次のような実行画面が現れます。
図5
という感じです。
これをもう少し解り易くして見ましょう。
プログラムのテキスト版
//---------------------------------------
#include <stdio.h> void main(){ int a, b; puts("整数を2つ入力してください"); printf("整数1:"); scanf("%d", &a); printf("整数2:"); scanf("%d", &b); //バッファ対策 getchar(); printf("%d+%d = %d\n", a, b, a+b); printf("%d-%d = %d\n", a, b, a-b); //終わるのを防ぐ getchar(); }
//---------------------------------------
これで、誰が実行しても
ちょっと親切になります。
プログラムは
実行して見て、わかり易いというのも重要です。
仕事や研究、課題などは
完成を第一、完成したらわかり易くする
というのを目指してください
ではではまた次の記事で会いましょう。
スポンサードリンク
私は、この種のスペースで高品質の記事やブログ記事を少し探してきました。
Yahooでの調査私はついにこのサイトを見つけました。
この情報を勉強していますので、私はそれを伝えてうれしいです
私はまさに私が見つけた
必要です。私は確かにこのサイトを覚えておくことを確実にし、
それは定期的に一見。
by Renaldo (2018-03-01 23:18)