プロが教えるわが家の防犯対策術!

猫でもわかるC言語を勉強しています

Microsoft Visual C++2008 Express Edition のバージョンのコンパイラで

第5章のscanf関数のところで困っていることになっていますsos
本の通りに

/*scan01.c*/

#include <stdio.h>

int main()
{
int seisu;

printf("整数値を入力してください----125");
scanf("%d",&seisu);
printf("あなたの入力した数値は%dですね",seisu);

return 0;
}
と書いてビルドをしても警告1になります、あと

/*scan01.c*/

#include <stdio.h>
#define _CRT_SECURE_NO_DEPRECATE

int main()
{
int seisu;

printf("整数値を入力してください----125");
scanf_s("%d",&seisu);
printf("あなたの入力した数値は%dですね",seisu);

return 0;
}

と書いてもエラーや警告は0になるけどデバッグ→デバッグなしで開始でいつもどうりに画面に(コマンド プロンプト?っぽいやつに)出力をすると本の通りに

整数値を入力してください----125
あなたの入力した数値は125ですね

とならず

整数値を入力してください----125

だけが出力されます(コマンド プロンプトに)・・・
みなさんはどうやって突破したの!?いや、されたのッ!!!それともいらってはいないんですけどコンパイラの設定が悪いんでしょうか?;_;

何をどこをヘルプしたらいいやら分かりません教えてください先輩僕は一体どうしたらいいの!!!!
これ以降いっぱいscanfのこといっぱい出るのにぃ~~OTL←やっぱ僕これになるんでしょうかね・・。

A 回答 (6件)

これより前のサンプルでは、実行したら最後まで進むものだったのでは?


このプログラムは、実行したら全部一気に表示されるものではないんです。
このプログラムは、途中でユーザーからの入力を待ちます。

繰り返しになりますけど。

> printf("整数値を入力してください----125");
で"整数値を入力してください----125"と表示されて

> scanf_s("%d",&seisu);
で入力待ちで止まっているのが今の状態です。
入力があるまで、いつまでもいつまでもここで止まっています

ここで、「数値を入力してEnter」と入力があると、
そこではじめてscanf_sを抜けて、次の
> printf("あなたの入力した数値は%dですね",seisu);
へ進みます。

#1
> 整数値(例えば125)を入力したらどうなる?
#5
> 「125」をちゃんと自分で入力して、Enterキーを押してますか?
とすでに指摘があるのですが、それはやったのですか?
勝手に数値が入ったりしません。


あと、「猫でもわかるC言語 scan01.c」で検索したら、次のサイトが見付かりました。
http://www.mogumagu.com/bamboo_lath_by_mogumagu/ …
あなたのプログラムと違うのですが、こちらの方がサンプル通りに動作するように思います。
本のプログラムはどちらなのでしょう?
    • good
    • 0
この回答へのお礼

あ!そうなのですか!!全部結果が表示されるものではなくって
途中(コマンド プロンプト)で数値を入力してEnterを押すのですね!!!
やってみたところ、出来ました\(^△^)本ッ当に!先生ありがとうございましたm(__)m(陳謝)

すごく困ってました^^;こんな解釈が悪いやつに教えれるなんてみんな先生レベルだよ~ww

これで進めます、URLも参考(家宝)にして頑張りますありがとうございました(#^.^#)/。

お礼日時:2012/05/12 19:07

「125」をちゃんと自分で入力して、Enterキーを押してますか?



あんま関係ないですが、勉強ならscanfはscanfのままで学習した方が良いと思います。
_CRT_SECURE_NO_DEPRECATEを定義しとけば、とりあえず警告は表示されなくなると思います。

というのも、scanfの引数をそのままにしてscanf_sにすると動作が変わる状況があるからです。
    • good
    • 0
この回答へのお礼

ちゃんと125を入力してEnterキー押したんですけどダメでした
本の通りに  整数値を入力してください----125
         あなたの入力した数値は125ですね
が出力されない~とくにコレ↑

>scanfの引数をそのままにしてscanf_sにすると動作が変わる状況があるからです。
動作が変わるのですか!?。覚えておきます。

お礼日時:2012/04/29 22:44

>猫でもわかるC言語の本で勉強された方教えてー;_;


「猫でもわかるC言語」はゴミ本です、今すぐ捨てて書いてあったことは全て忘れ別の本で勉強しなおしましょう。

本を選ぶときは、以下のような記述をしている本は絶対に避けてください。
(1)if(式)文;else文;
(2)do 文;while(式);
(3)do 文;while(式)
(4)「goto文はラベルへ飛ぶ」と書き、ラベルの定義を「ラベル名:」とする
(5)exit文、書式は「exit 式;」、使うにはstdlib.hが必要
(6)a<b<cがコンパイルエラーになる
(7)double intと宣言
(8)scanf文、printf文などの記述
(9)熟練者は「*p++=toupper(*p);」と書くと記述
(10)do 文 文 文 while(式);などと「do」と「while」の間に複数の文を書ける
(11)do{文}while(式);などと「{}」が必要
(12)(10)と(11)を同一人物が別の本で書く
(13)a<bの結果が0、1以外の値が返る
(14)文字列の最後は文末コード
(15)if(!expr)goto label;... /* 処理 */label;
(16)「~」文字がC言語では未使用
(17)「^=」演算子は右辺を反転したものを左辺に代入する
(18)for(文 式;式)文
(19)','で区切られた式は右から評価する
(20)#define文、#include文などの記述
(21)printfにはdouble専用の書式は無いと記述

(A)printf("%lf",double型の式);
(B)floatの出力には%f、doubleの出力には%lf、と書きながら浮動小数の出力は%e、%gだと書いてある。

(a)0<n<16という式を使う
(b)int func(int n){int d;d=1/n;return d;}というサンプルを作る
(c)関数形式マクロの説明で「パラメータに括弧をつける」と「全体に括弧をつける」の片方だけの記述

(1)~(21)は文法の基本を知らないバカが書く記述です。
(A)~(B)関数への引数渡しの基本を知らない人間の記述です。
(a)~(c)は単なるどじでしょう。
    • good
    • 0
この回答へのお礼

!?,あ。ありがとうございましたご丁寧にm(_ _)mビタンッ

お礼日時:2012/04/29 22:47

その本は持ってないのですが



>整数値を入力してください----
が出力されたところで
>125
を入力すると
>あなたの入力した数値は125ですね
と出力される。
違う数値を入力すると125ではなくその入力した数値が出力される。

というのが、そのプログラムの期待される動作じゃないですか?
数値を入力する方法を学ぶのが目的で

printf("整数値を入力してください----125");
じゃなくて
printf("整数値を入力してください----");
で。
    • good
    • 0
この回答へのお礼

いや、整数値を入力してください----125は出力(表示)されるのに
あなたの入力した数値は125ですね←が表示されないのです本の通りに・・

ごめんなチャイまだ色々知識が(用語とか)半端で解釈や説明うまくできなくて。
(やっぱ独学じゃむりがあるかな~^-^;)

お礼日時:2012/04/29 23:05

確認してないけどストリームバッファで止まってるからだと思う。



× printf("あなたの入力した数値は%dですね",seisu);
○ printf("あなたの入力した数値は%dですね\n",seisu);

で出んじゃないかな。
    • good
    • 0
この回答へのお礼

ストリームバッファ・・・?

こ、コホン・・

○ printf("あなたの入力した数値は%dですね\n",seisu);

で出力しましたがダメでした;それと僕の質問文章に表記もれがありました
すみません<(_ _)>

printf("あなたの入力した数値は%dですね",seisu);とは書いてなくってちゃんとテキスト通りにprintf("あなたの入力した数値は%dですね\n",seisu);と書いて、ビルド→デバッグなしで開始、と本通りにやっているんですけど表示されないのですよ↓も~。

お礼日時:2012/04/29 23:21

> と書いてビルドをしても警告1になります、あと



警告だから気にしないことです。

> 整数値を入力してください----125
> だけが出力されます(コマンド プロンプトに)・・・

整数値(例えば125)を入力したらどうなる?
入力するまでは,出力されるものはそれだけであるのが正しい動作です。

> これ以降いっぱいscanfのこといっぱい出るのにぃ~~

scanfのことなど忘れてしまうのが一番です。このような例題でしか使わないような関数ですし...
    • good
    • 0
この回答へのお礼

え!?、 整数値を入力してください----125 ←のだけの出力(表示)だけで
正解なのですか!?本には  整数値を入力してください----125  ←らが
                   あなたの入力した数値は125ですね
コマンド プロンプトに表示されると書いてあったんですけど本の方が間違え?
すみません知識が半端なもので・・;

あと、警告だからって気にしなくてもOKなのですか?。あと後支障とかきたさない?(う~んこのまま続けて見ようかな・・?お勉強・・)。

お礼日時:2012/04/29 23:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!