• ベストアンサー
  • 困ってます

printf scanf が、反応しません。

#include <stdio.h> /*構造体struct carの宣言*/ struct Car{ int num; double gas; }; int main(void) { struct Car car1; printf("ナンバーを入力してください。\n"); scanf("%d", &car1.num ); printf("ガソリン量を入力してください。\n" ); scanf("%lf, &car1.gas"); printf("車のナンバーは%d:ガソリン量は%fです。\n", car1.num,car1.gas); return 0; } C:\WORK>gcc test18.c C:\WORK>gcc -o test18 test18.c いつも教えて頂き、誠にありがとうございます。 上記の件。 println scanfが反応しません。 どうすればいいでしょうか? ご回答のほど、宜しくお願い申し上げます。

共感・応援の気持ちを伝えよう!

  • 回答数11
  • 閲覧数432
  • ありがとう数18

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

  • ベストアンサー
  • 回答No.11
  • bunjii
  • ベストアンサー率43% (3541/8146)

回答No.4のお礼に次の記述があることについて解説します。 ----------ここから---------- C:\WORK>gcc test18.c C:\WORK>./test18 '.' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 ----------ここまで---------- gccコマンドでオプションの-oを指定しないときはa.exeと言うファイル名で実行形式のファイルが生成されます。(Windows OSの実行形式ファイルの拡張子は.exeです) あなたはtest18.exeが生成されると勘違いしているようです。 また、コマンドプロンプトで実行形式のファイルを実行するときカレントディレクトリに存在すればファイルが所在するディレクトリを指定しなくても実行できます。 敢て、カレントディレクトリを明示するときは.\を付けてください。 "."はカレントディレクトリを意味し、"\"はディレクトリの階層を区切る記号であり、あなたが記載している"./test18"はディレクトリの階層区切りがありません。 UNIX系のOSでは階層区切りに"/"が使われていますので"./test18"で良いでしょう。 また、コンパイル時に生成するファイル名を指定していませんのでtest18.exeがありません。 ----------ここから---------- C:\WORK>gcc test18.c C:\WORK>gcc -o test18 test18.c C:\WORK>./test18 '.' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 ----------ここまで---------- こちらの手順ではコンパイルを2回実行していてa.exeとtest18.exeが生成されていますが前述の"/"が邪魔をして実行形式のファイルを見つけられまかったことが原因です。 質問の表題で「printf scanfが、反応しません。」と言っていますが「実行形式のファイルが起動できません。」のように表示しないと原因究明が遠回りになります。 今回の質問ではコンパイル時のエラーの原因もありますので状況説明が極度に不足していました。 また、C言語とJava言語を並行して学習すると混乱が起こりますので何方か一方にすることをお薦めします。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

いつも教えてくださり、大変お世話になっております。 それにしても、よくご存じですね。 今後とも宜しくお願い致します。

関連するQ&A

  • printf scanf が、反応しません。

    printf scanf が、反応しません。 #include <stdio.h> int main(void) { int num = 0; int sum = 0; printf("テストの点数を入力してください。(0で終了)\n"); do{ scanf("%d", &num); sum += num; }while(num); printf("テストの合計点は%d点です。\n", sum); return 0; } C:\WORK>gcc test1.c C:\WORK>gcc -o test1 test1.c おかしいです。 打開策を教えてください。 ご多忙中恐れ入ります。 ご回答のほど、宜しくお願い申し上げます。

  • コンパイルエラー (超初心者です)

    現在C言語の勉強をしているのですがテキスト通りに打ったのですが、どうしてもエラーが出てしまいます。 #include <stdio.h> struct Car{ //構造体型struct Carの宣言 int num; double gas; }; int main() { struct Car car1; //構造体型の変数(構造体)を宣言する car1.num = 1234; //メンバに値を代入する car1.gas = 25.5; printf("車のナンバーは%d :ガソリン量は%fです。\n", car1.num, car1.gas); return 0; } エラーメッセージは 15: warninng: unknown escape sequence: '\' followed by char code 0x83 といった感じです。 ちなみにコンパイラはMingw gccというのを使っています。どなたかご回答のほうをよろしくお願いします。

  • getsの部分がとばされてしまう

    #include<stdio.h> typedef struct Car{ char name[20]; int num; double gas; }Car; int main(void) { Car car[3]; int i; for(i=0;i<3;i++){ printf("ナンバーを入力してください。\n"); scanf("%d",&car[i].num); printf("車の名前を入力してください。\n"); gets(car[i].name); printf("ガソリン量を入力してください。\n"); scanf("%lf",&car[i].gas); } printf("name\tnumber\tfuel\n"); for(i=0;i<3;i++){ printf("%s\t%d\t%f\n",car[i].name,car[i].num,car[i].gas); } return 0; } …上記のようなプログラムを書いたのですが、実行すると、gets(car[i].name);の部分の処理が飛ばされてしまい、入力することができません。 どのようにしたらよいか、教えていただけませんでしょうか。 よろしくお願いいたします。

その他の回答 (10)

  • 回答No.10
  • wormhole
  • ベストアンサー率28% (1444/5081)

>ボクはこれ(URL)を見て解らないということは、 >何から勉強すればいいですか? 日本語 使用しているOSの基本的な操作方法や用語

共感・感謝の気持ちを伝えよう!

  • 回答No.9
  • wormhole
  • ベストアンサー率28% (1444/5081)

>申し訳ありませんが、 >Windows10でのコンパイル、実行を単純に >アルファベットで書いてもらえませんか? 意図して書いてないのですから、ご自分でお考えください(そんな回答だと、それをタイプするだけで自分の頭では考えないでしょ)。 ヒントは出してますし。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ボクはこれ(URL)を見て解らないということは、 何から勉強すればいいですか?

  • 回答No.8
  • bunjii
  • ベストアンサー率43% (3541/8146)

回答No.7の追加です。 当方で検証した画像を貼付します。 あなたの実行結果と何処が違っているかを確認してください。

共感・感謝の気持ちを伝えよう!

  • 回答No.7
  • bunjii
  • ベストアンサー率43% (3541/8146)

>今の質問は、scanf printlnが何故、反応しないかを質問しています。 分かってますよ。 コンパイルが正しくできていなければ正常に動作しませんので先ずはコンパイルでエラーが起こっていない状態にする必要があります。 あなたが質問で提示したソースを1行だけ修正して検証したとき当方では正常にprintlnやscanfが動作しました。 但し、当方ではテキストエディターをメモ帳とし、保存時に文字コードをANSIに変更しています。その後、コマンドプロンプトでオプション付きのgccコマンドでエラー無くコンパイルできて、生成されたtest18.exeをコマンドプロンプトで実行すると正常に車番とガソリンの量を入力出来て結果も正しく表示されています。 あなたのPCを私が操作できないので何処に誤りがあるかを点検できません。 回答内容を理解できないことが原因かも知れません。

共感・感謝の気持ちを伝えよう!

  • 回答No.6
  • wormhole
  • ベストアンサー率28% (1444/5081)

>他にも検索して試してみましたが、上手く行きません。 そりゃでたらめに色々試してみたところで、そうそう上手くいくわけがありません。 http://www.gi.ce.t.kyoto-u.ac.jp/user/susaki/c/kihon_compile.html のurlに書かれているのはOSがunix系やLinuxでの話です。 Windows系で参考にするにはいくつか読み替える必要がある所があります。 ・unix系OSやLinuxではパスの区切り文字は / 、Windows系は \ ・gcc等のCコンパイラは-oオプションにより作成するファイル名を指定できます。-oオプションを指定せずにコンパイルして実行ファイルを作るときにはunix系OSやLinuxは、a.outが実行ファイル名になりますがWindowsの場合にはa.exeです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答誠にありがとうございます。 a.exeだと、ファイル名を指定していません。 申し訳ありませんが、 Windows10でのコンパイル、実行を単純に アルファベットで書いてもらえませんか? お手数おかけします。 何卒、宜しくお願い申し上げます。

  • 回答No.5
  • bunjii
  • ベストアンサー率43% (3541/8146)

>どこが間違っているのでしょうか? 何時ものことですがあなたの質問や補足/お礼のコメントには状況説明が不足していて何処に不備が有るか分かりません。 「cc1.exe: error: failure to convert cp932 to UTF-8」からの推測ですがテキストエディターでソースを編集して保存するときに文字コードをUTF-8にしているように思われます。 Windows OSのコンソール(コマンドプロンプトまたはPower Shell)はUTF-8に対応していませんのでANSIで保存しないと文字化けするはずです。 当方で提示のコンパイルオプションをつけて検証すると正常にコンパイルされ実行結果も正常です。但し、テキストエディターはメモ帳で保存時に文字コードをANSIに変更しています。 追伸、scanf("%lf, &car1.gas");はscanf("%lf", &car1.gas);に修正しました。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答誠にありがとうございます。 今は、文字化けしません。 今の質問は、scanf printlnが何故、反応しないかを 質問しています。

  • 回答No.4
  • wormhole
  • ベストアンサー率28% (1444/5081)

>http://www.gi.ce.t.kyoto-u.ac.jp/user/susaki/c/kihon_compile.html >を見てコンパイル、実行の仕方を参考にしました。 そのurlを参考にして、なぜ質問に書いてあるような手順になるんですか・・・ そこに書いてある文章ちゃんと読んでいますか? とても読んでるようには思えないので、私が文章で説明しても無駄かと。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答誠にありがとうございます。 C:\WORK>gcc test18.c C:\WORK>./test18 '.' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 C:\WORK>gcc -o test18 test18.c C:\WORK>./test18 '.' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 C:\WORK>gcc test18.c C:\WORK>gcc -o test18 test18.c C:\WORK>./test18 '.' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 他にも検索して試してみましたが、上手く行きません。 教えてください。 宜しくお願い申し上げます。

  • 回答No.3
  • wormhole
  • ベストアンサー率28% (1444/5081)

>C:\WORK>gcc test18.c >C:\WORK>gcc -o test18 test18.c 質問に書かれた手順を見る限りコンパイルして実行ファイルを作っただけで、実行はされてませんけど?(実行していないんだからprintfやscanfが動作するわけない) コンパイルを2度やっている意味も分かりませんし。 自分がやってることが何なのか理解していますか?(もういい加減いい飽きた) また#1の方が書かれているようにソースコードにも間違いがあります。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

http://www.gi.ce.t.kyoto-u.ac.jp/user/susaki/c/kihon_compile.html を見てコンパイル、実行の仕方を参考にしました。 どうすればいいのですか? ご回答のほど宜しくお願い申し上げます。

  • 回答No.2
  • bunjii
  • ベストアンサー率43% (3541/8146)

MinGWでコンパイルするとエスケープシーケンスを含む文字列のためエラーが出ます。 コンパイルコマンドのオプションスイッチで対応してください。 gcc test18.c -finput-charset=cp932 -fexec-charset=cp932 -o test18

共感・感謝の気持ちを伝えよう!

質問者からのお礼

いつも大変お世話になっております。 cc1.exe: error: failure to convert cp932 to UTF-8 と出ました。 どこが間違っているのでしょうか? ご回答のほど宜しくお願い申し上げます。

  • 回答No.1

scanf パラメータが違います scanf("%lf, &car1.gas"); ↓ scanf("%lf", &car1.gas ); int main(void) { struct Car car1; printf("ナンバーを入力してください。\n"); scanf("%d", &car1.num ); printf("ガソリン量を入力してください。\n" ); scanf("%lf", &car1.gas ); printf("車のナンバーは%d:ガソリン量は%fです。\n", car1.num ,car1.gas ); return 0; }

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございました。 おっしゃる通りに直しましたが scanf printfが反応しません。 どこが間違っているのでしょうか? 度々すいません。 ご回答のほど宜しくお願い申し上げます。

関連するQ&A

  • 初心者なので教えてほしいです。

    下記のコードなんですが、どこか間違っていますか? テキスト通りに入力したはずなんですが、 『メソッド本体がないか、abstractとして宣言されています』 というエラーが出てしまいます。 どういう意味なのか分らなくて・・・ **************************************************** //車クラス class Car{ int num; double gas; } //車クラスのオブジェクトを作成する class Sample1{ public static void main(String[] args); { Car car1; car1 = new Car(); car1.num = 1234; car1.gas =20.5; System.out.println("車のナンバーは" +car1.num+ "です。"); System.out.println("ガソリンの量は" +car1.gas+ "です。"); } } *************************************************************

    • ベストアンサー
    • Java
  • "add"とは?f

    class Car { int num; double gas; void setNum(int n) { num = n; System.out.println("ナンバーを" + num + "にしました。"); } void setGas(double g) { gas = g; System.out.println("ガソリン量を" + gas + "にしました。"); System.out.println("この車は満タンで40リットル入ります。"); } void show() { System.out.println("車のナンバーは"+num+"です。"); System.out.println("ガソリン量は"+gas+"です。"); } } class Prog11_1 { public static void main(String args[]) { Car car1 = new Car(); Car car2 = new Car(); car1.setNum(1234); car1.setGas(20.5); car2.setNum(5678); car2.setGas(30.8); car1.addGas(10.0); car2.addGas(10.0); car1.show(); car2.show(); } } 上記のプログラムの足りないところを補い、完成させるというものなんですが、"add"というのは一体どのような役割を持っているものなんでしょうか? 分かる方いらっしゃいましたら、よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaの戻り値のコード

    Java初心者です。returnの例文で分からない所があります。 (1)考え方として car1.setNumGas(1234, 20.5); の時点で void setNumGas(int n, double g) はvoid setNumGas(1234, 20.5)になり 次にgetNum( ) そのものを引っ張ってきているので、 ナンバーを調べました という文字まで一緒に引っ張らないのでしょうか? なぜ 次の行のretun文だけを拾うのですか? (2)returnのイメージがまだ出来ていません。 int number = car1.getNum(); とした時点で int getNum()  にジャンプし、 その中の returnを見つけ、 そしてreturnが numを使っている所をコードを下に降りて順に探しに行く というイメージで合ってますか? -------------------------------------------------------------------- return num; →よーし探しに行こう! まずdouble getGas()の中 → うーんない 次にvoid setNumGas(int n, double g) の中 { num = n;    →   お、あった! nは今1234だな、だから表示結果は1234 --------------------------------------------------------------------------- こんな認識で合ってますでしょうか? class Car { int num; double gas; int getNum() { System.out.println("ナンバーを調べました。"); return num; } double getGas() { System.out.println("ガソリン量を調べました。"); return gas; } void setNumGas(int n, double g) { num = n; gas = g; System.out.println("車のナンバーを" + num + "にガソリン量を" + gas + "にしました。"); } void show() { System.out.println("車のナンバーは" + num + "です。"); System.out.println("ガソリン量は" + gas + "です。"); } } class Sample6 { public static void main(String[] args) { Car car1 = new Car(); car1.setNumGas(1234, 20.5); int number = car1.getNum(); double gasoline = car1.getGas(); System.out.println("サンプルから車を調べたところ"); System.out.println("ナンバーは"+ number + "ガソリン量は" + gasoline + "でした。"); } }

    • ベストアンサー
    • Java
  • 「インターフェイス」って何の為に必要なんですか?

    “値を変更できるフィールドがもてない”・“抽象クラスしかもてない”のに何の為に記述するんだろう?と思って、インターフェイスを入力せずに実行してみたのですが、入力してもしなくても同じ結果が出ました。 同じ結果が出るならなぜ必要なんですか? ************* コード **************************************** //のりものインターフェイス interface iVehicle{ void vShow(); } //材料インターフェイス interface iMaterial{ void mShow(); } //車クラス class Car implements iVehicle,iMaterial{ private int num; private double gas; public Car(int n, double g){ num = n; gas = g; System.out.println("ナンバー"+ num + "ガソリン量" +gas + "の車を作成しました。"); } public void vShow(){ System.out.println("車のナンバーは" + num +"です。"); System.out.println("ガソリン量は" + gas + "です。"); } public void mShow(){ System.out.println("車の材質は鉄です。"); } } class Sample1{ public static void main(String[] args){ Car car1 = new Car(1234, 20.5); car1.vShow(); car1.mShow(); } } ************************************************************** <実行結果> 「ナンバー1234ガソリン量20.5の車を作成しました。  車のナンバーは1234です。  ガソリン量は20.5です。  車の材質は鉄です。              」 インターフェイスを記述してもしなくても、同じく上記の結果が 出ました。 ※ちなみに抽象クラスもいったい何なのかよく分りません。

    • ベストアンサー
    • Java
  • printfでの計算結果がおかしくなります。

    #include <stdio.h> main() { int first_num, second_num, third_num; /* 入力される3整数 */ int answer; /* 掛け算の答え */ printf("Input Integer Number 1 > "); scanf("%d", &first_num); printf("Input Integer Number 2 > "); scanf("%d", &second_num); printf("Input Integer Number 3 > "); scanf("%d", &third_num); answer = first_num * second_num * third_num; printf("%d * %d * %d= %d\n", first_num, second_num, third_num, answer); exit(0); } というプログラムを作りコンパイルして、いざ実行して 以下の計算をさせると。 10000×10000×10000=-727379968 という計算結果になってしまいます。 なんども確認したのですが、間違っているところはないと思います。

  • 別ファイルのclassの読み込みについて

    Javaを勉強し始めたばかりのものです。 購入した参考書を見ながら勉強していますが、表題の件の項目で参考書ではうまくいくように表記されておりますが、実際にやってみると下記エラーが表示されます。 --------------------------------------------- C:\XXXXXXXXXX>javac ../../sample/Sample1.java ..\..\sample\Sample1.java:3: シンボルを見つけられません。 シンボル: クラス Car 場所 : Sample1 の クラス Car car1 = new Car(); ^ ..\..\sample\Sample1.java:3: シンボルを見つけられません。 シンボル: クラス Car 場所 : Sample1 の クラス Car car1 = new Car(); ^ エラー 2 個 ------------------------------------------------------ ちなみに下記はソースとなります。 -------------------------------------------- 【Car.java】 //Carクラス class Car { private int num; private double gas; public Car(){ num = 0; gas = 0.0; System.out.println("車を作成しました。"); } public void setCar(int n, double g){ num = n; gas = g; System.out.println("ナンバーを" + num + "ガソリン量を" + gas + "にしました。"); } public void show(){ System.out.println("車のナンバーは" + num + "です。"); System.out.println("ガソリン量は" + gas + "です。"); } } 【Sample1.java】 class Sample1 { public static void main (String args[]){ Car car1 = new Car(); car1.show(); } } --------------------------------------------------- なんとなくエラーが出るだろうとはわかりますが、上記の記載方法だとやはりうまくいかないのでしょうか? お忙しいところ申し訳ありませんが、どなたかご教示の程お願いいたします。

    • ベストアンサー
    • Java
  • プログラミングお願いします(JAVA)

    フィールドとして、「ナンバー」「ガソリン残量」「走行距離」「エンジンの排気量」の4つ、それらの値を表示するメソッド4つから構成されるCar2ラスを作成し、メインメソッドで2つのオブジェクトkcar と bcar を作成し、それぞれに、次の値を代入し、Car2ラスのメソッドを呼び出してそれぞれの値を表示するプログラムを作成しなさい オブジェクト名  ナンバー   ガソリン残量        走行距離   排気量 kcar        552        25.1            22000      2000 bcar        441        33.5           9940        2000 //↓一応自分が書いたコードなので会ってるか分かりませんが、違ってたら教えてください Car2 { int num; double gas; int m; int h; int num1; double gas1; int m1; int h1; void show() { System.out.println("kcar"+num+ +gas+m+h); System.out.println("bcar"+num1+ +gas1+m1+h1); } } class Sample1 { public static void main(String[] args) { Car2 car1; car1 =new Car2(); car1.num=552; car1.gas=25.1; car1.m=22000; car1.h=2000; car1.num1=441; car1.gas1=33.5; car1.m1=9940; car1.h1=2000; car1.show(); } }

  • プログラミングお願いします(java)

    問題 フィールドとして、「ナンバー」「ガソリン残量」「走行距離」「エンジンの排気量」の4つ、それらの値を表示するメソッド4つから構成されるCar2ラスを作成し、メインメソッドで2つのオブジェクトkcar と bcar を作成し、それぞれに、次の値を代入し、Car2ラスのメソッドを呼び出してそれぞれの値を表示するプログラムを作成しなさい オブジェクト名  ナンバー   ガソリン残量        走行距離   排気量 kcar        552        25.1            22000      2000 bcar        441        33.5           9940        2000 ↓一応自分のコードを作成しました・しかしこの問題にあってるか分かりません。違ってたら指摘してください///出来たらコード作成してくださると助かります class Car2 { int num; double gas; int m; int h; int num1; double gas1; int m1; int h1; void show() { System.out.println("kcar"+num+ +gas+m+h); System.out.println("bcar"+num1+ +gas1+m1+h1); } } class Sample1 { public static void main(String[] args) { Car2 car1; car1 =new Car2(); car1.num=552; car1.gas=25.1; car1.m=22000; car1.h=2000; car1.num1=441; car1.gas1=33.5; car1.m1=9940; car1.h1=2000; car1.show(); } }

  • C言語、エラーメッセージが紐解けません。

    いつも大変お世話になり誠にありがとうございます。 標記の件。 エラーメッセージが紐解けません。 どうかどなたかアドバイスください。 下記にコードとコンパイルエラーを書きます。        記 コード #include <stdio.h> typedef struct Car{ int num; double gas; }Car; int main(void) { printf("int型のサイズは%dバイトです。\n", sizeof(int)); printf("double型のサイズは%dバイトです。\n", sizeof(double)); printf("構造体struct Car型のサイズは%dバイトです。\n",sizeof(Car)); printf("構造体struct Car型へのポインタのサイズは%dバイトです。\n",sizeof(Car *)); return 0; } コンパイラーエラー C:\MinGW>gcc text20.c -o text20 text20.c: In function 'main': text20.c:12:11: warning: unknown escape sequence: '\221' printf("構造体struct Car型のサイズは%dバイトです。\n",sizeof(Car)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ text20.c:13:11: warning: unknown escape sequence: '\221' printf("構造体struct Car型へのポインタのサイズは%dバイトです。\n",sizeof(Car *)); 以上です。 ご多忙中恐れ入ります。 ご回答の程宜しくお願い申し上げます。

  • scanfの後のfgetsについて

    #include <stdio.h> int main(void) { char name[10]; int no; printf("ナンバーを入力してください: "); scanf("%d",&no); /* 35を入力 */ printf("文字列を入力してください: "); fgets(name,10,stdin); /*入力できない*/ return 0; } この例文だと、fgets関数が改行コードを読み取って、終了してしまい文字列入力が出来ないみたいなんですが、scanfの後にfgetsを使うような(scanfとfgetsの間にscanfの残した?改行コードを取り除く方法)処理はどのような方法があるのでしょうか? 試しにfgets文を2度書いたら思っていた動作をしてくれたのですが、はたしてfgets文を2度書くというような事をしていいものなのでしょうか?見た目もなんだか変な感じですし。。↓ #include <stdio.h> int main(void) { char name[10]; int no; printf("ナンバーを入力してください: "); scanf("%d",&no); /* 35を入力 */ printf("文字列を入力してください: "); fgets(name,10,stdin); fgets(name,10,stdin);  /*入力できる*/ return 0; }