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

このQ&Aのポイント
  • 猫でもわかるC言語を勉強しています。Microsoft Visual C++2008 Express Edition のバージョンのコンパイラで第5章のscanf関数のところで困っています。
  • scanf関数を使って整数値を入力し、その値を表示するプログラムを書いていますが、ビルドすると警告が出ます。また、別のバージョンのコンパイラを使えば警告は出ないのですが、プログラムを実行すると期待した結果が得られません。
  • どうすれば正しくscanf関数を使うことができるのか、アドバイスをお願いします。コンパイラの設定に問題があるのでしょうか?
回答を見る
  • ベストアンサー

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

猫でもわかる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←やっぱ僕これになるんでしょうかね・・。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.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/2010/03/c1.html あなたのプログラムと違うのですが、こちらの方がサンプル通りに動作するように思います。 本のプログラムはどちらなのでしょう?

tyannbara
質問者

お礼

あ!そうなのですか!!全部結果が表示されるものではなくって 途中(コマンド プロンプト)で数値を入力してEnterを押すのですね!!! やってみたところ、出来ました\(^△^)本ッ当に!先生ありがとうございましたm(__)m(陳謝) すごく困ってました^^;こんな解釈が悪いやつに教えれるなんてみんな先生レベルだよ~ww これで進めます、URLも参考(家宝)にして頑張りますありがとうございました(#^.^#)/。

その他の回答 (5)

回答No.5

「125」をちゃんと自分で入力して、Enterキーを押してますか? あんま関係ないですが、勉強ならscanfはscanfのままで学習した方が良いと思います。 _CRT_SECURE_NO_DEPRECATEを定義しとけば、とりあえず警告は表示されなくなると思います。 というのも、scanfの引数をそのままにしてscanf_sにすると動作が変わる状況があるからです。

tyannbara
質問者

お礼

ちゃんと125を入力してEnterキー押したんですけどダメでした 本の通りに  整数値を入力してください----125          あなたの入力した数値は125ですね が出力されない~とくにコレ↑ >scanfの引数をそのままにしてscanf_sにすると動作が変わる状況があるからです。 動作が変わるのですか!?。覚えておきます。

  • TT414
  • ベストアンサー率18% (72/384)
回答No.4

>猫でもわかる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)は単なるどじでしょう。

tyannbara
質問者

お礼

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

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

その本は持ってないのですが >整数値を入力してください---- が出力されたところで >125 を入力すると >あなたの入力した数値は125ですね と出力される。 違う数値を入力すると125ではなくその入力した数値が出力される。 というのが、そのプログラムの期待される動作じゃないですか? 数値を入力する方法を学ぶのが目的で printf("整数値を入力してください----125"); じゃなくて printf("整数値を入力してください----"); で。

tyannbara
質問者

お礼

いや、整数値を入力してください----125は出力(表示)されるのに あなたの入力した数値は125ですね←が表示されないのです本の通りに・・ ごめんなチャイまだ色々知識が(用語とか)半端で解釈や説明うまくできなくて。 (やっぱ独学じゃむりがあるかな~^-^;)

  • BuriBuri4
  • ベストアンサー率28% (150/525)
回答No.2

確認してないけどストリームバッファで止まってるからだと思う。 × printf("あなたの入力した数値は%dですね",seisu); ○ printf("あなたの入力した数値は%dですね\n",seisu); で出んじゃないかな。

tyannbara
質問者

お礼

ストリームバッファ・・・? こ、コホン・・ ○ printf("あなたの入力した数値は%dですね\n",seisu); で出力しましたがダメでした;それと僕の質問文章に表記もれがありました すみません<(_ _)> printf("あなたの入力した数値は%dですね",seisu);とは書いてなくってちゃんとテキスト通りにprintf("あなたの入力した数値は%dですね\n",seisu);と書いて、ビルド→デバッグなしで開始、と本通りにやっているんですけど表示されないのですよ↓も~。

  • f272
  • ベストアンサー率46% (8024/17150)
回答No.1

> と書いてビルドをしても警告1になります、あと 警告だから気にしないことです。 > 整数値を入力してください----125 > だけが出力されます(コマンド プロンプトに)・・・ 整数値(例えば125)を入力したらどうなる? 入力するまでは,出力されるものはそれだけであるのが正しい動作です。 > これ以降いっぱいscanfのこといっぱい出るのにぃ~~ scanfのことなど忘れてしまうのが一番です。このような例題でしか使わないような関数ですし...

tyannbara
質問者

お礼

え!?、 整数値を入力してください----125 ←のだけの出力(表示)だけで 正解なのですか!?本には  整数値を入力してください----125  ←らが                    あなたの入力した数値は125ですね コマンド プロンプトに表示されると書いてあったんですけど本の方が間違え? すみません知識が半端なもので・・; あと、警告だからって気にしなくてもOKなのですか?。あと後支障とかきたさない?(う~んこのまま続けて見ようかな・・?お勉強・・)。

関連するQ&A

  • c言語超初心者です。教えてください

    基本的だと思いますが教えてください。 #include <stdio.h> int main(void) { int na, nb: puts("二つの整数を入力してください."); printf("整数A:”); scanf("%d",&na); printf("整数B:”); scanf("%d",&nb); printf("それらの平均は%fです。\n,(na+nb)/2.0); return(0); } これでintの形で最後のprintfが%fなのですがintは%dとなるはずなのですがこれは2。0という実数値で割るから答えは実数値になりますよ。という意味で%fとしたのでしょうか?確かにこうしないと正しい値がでてこないのです。教えてください。

  • C言語でscanf()が先に実行されるのはなぜですか?

    C言語でscanf()が先に実行されるのはなぜですか? #include <stdio.h> int main(void){ int intNum; printf("整数を入力してください:\n"); scanf("%d", &intNum); printf("入力値は:%d\n",intNum); return(0); }

  • Re: Vista c言語でのエラー

    直前の質問だったのですが、どうやらプログラムが壊れているみたいなんです。 #include <stdio.h> int main(void) { int sum,, no ; printf("整数を入力してください: "); scanf("%d", sum); printf("%d\n", sum); return (0); } と、とても簡単なプログラムに変えてみると、 整数を入力してください: 25 [Enter] 2147348480 となりました。また int sum, no; と変数を二個にすると前記のエラーが起こりました。 そのほかのプログラムを実行しても同じ結果でした。 コンパイラがおかしくなっちゃったんでしょうか?

  • c言語なのですが

    c言語なのですが #include<stdio.h> main() { int a; printf("整数を5回足し算する\n"); scanf("%d %d",&a); printf("a*5=%d\n",a*5); return(0); } でエラーが起こります どこを修正すればいいのでしょうか

  • Cのプログラミングを勉強中です。

    Cのプログラミングを勉強中です。 Aの値のBに対する割合を表示すしたいのですが、以下のように記述してもうまくいきません。 どこを直したらよいか教えていただけますか。 #include <stdio.h> int main(void) { int n1 , n2 ; printf("二つの整数を入力してください。\n"); printf("整数A:"); scanf("%d", &n1); printf("整数B:"); scanf("%d", &n2); printf("Aの値はBの%d%%です。\n" , n1 / n2 * 100 ); return(0); }

  • C言語プログラム

    2つの整数を入力させ、それらが等しい場合hitoshii、異なる場合にはhitoshikunaiと出力するプログラムを作りたいのですが、うまくいきません。間違っているところを教えてください。 #include<stdio.h> #include<conio.h> void main() { printf("整数を入力してください:"); int number1; scanf("%d",number1); printf("整数を入力してください:"); int number2; scanf("%d",number2); if(number1==number2) { printf("hitoshii"); } else { printf("hitoshikunai"); } getch(); }

  • C言語の無効な値が入力されたときの繰り返しについて

    C言語で最初に入力した整数の5倍になるまで何度も入力を促すプログラムでわからないところがあるのですが #include  "stdio.h" int main() { int a ; do { printf("input a:"); scanf("%d",&a); } while( )     ← printf( ) ←この二つの()内の文字をどうすればよいのか分かりません return 0; } 教えていただけないでしょうか

  • C言語について

    「条件演算子(a?b:c)を使って、三つの整数値を読み込んで、その最小値を求めて表示するプログラムを作成せよ」という問題を初心者なりに自分で以下のように解いてみたのですが、もっと簡単に表示できるプログラムがあれば教えてください。 #include<stdio.h> int main(void) { int na,nb,nc,min; printf("整数1:"); scanf("%d",&na); printf("整数2:"); scanf("%d",&nb); printf("整数3:"); scanf("%d",&nc); (na<nb)?min=na:min=nb; printf("最小値は%dです。\n",(nc<min)?min=nc:min); return 0; }

  • c言語超初心者です。2

    #include <stdio.h> int main(void) { int na,nb, nc; int sum; double ave; puts("三つの整数を入力してください."); printf("整数A:"); scanf("%d", &na); printf("整数B:"); scanf("%d", &nb); printf("整数C:"); scanf("%d", &nc); sum=na+nb+nc; ave=(double)sum/3; printf("それらの合計は%5dです。\n", sum); printf("それらの平均は%5.1fです。\n",ave); return(0); } とういうのを作ったんですが、最後のそれらの合計は%5dとやりその5の意味は整数を10進法で少なくても5桁で表示とありますが、例えば1,2,3と入力しても合計は6とでて5桁ででないんですけど。そういう意味ではありませんか?あとave=(double)sum/3;のところをave=sum/3.0としても問題なくできるのですが、どっちでやったほうがいいとかはありますか?もしあったらその理由も教えてください。

  • C言語の配列について

    配列を20 定義し値を入力して合計値を出したいのですがどうすればよいのでしょうか 下のソースでエラーはおこりませんでした 何がちがうのでしょうか #include <stdio.h> int main() { int a[20]={}; int i, sum; printf("整数を入力してください:"); scanf("%d",&a); printf("\n"); for (i = 0; i < 10; i++) { sum += a[i]; } printf("sum= %d\n", sum); return 0; }