コンパイル時にa.outと入力するとエラーが出る理由とは?

このQ&Aのポイント
  • C言語のプログラムでa.outと入力するとエラーが出る理由について説明します。また、プログラム内で変数を出力し、データとして出力する方法についても解説します。
  • C言語のプログラムでa.outと入力するとエラーが発生する理由について解説します。さらに、プログラム内で変数を指定してデータを出力する方法についても説明します。
  • コンパイル時にa.outと入力するとエラーが出る理由と、データを出力する方法について解説します。C言語のプログラムで変数を出力する方法にも触れます。
回答を見る
  • ベストアンサー

コンパイル時に a.out と入力するとエラーが出てしまいます。

コンパイル時に a.out と入力するとエラーが出てしまいます。 テキストファイルを複数 (最大で255個) 書き込むC言語のプログラム「f.c」を作成しまして それらのファイルは全て cygwin/home という場所に保存されます。 ただ、ファイルの中身は多くの文字が並ぶので(最大 500列 × 70000行 程度) 全てのファイルを書き込むには時間がかかりすぎてしまいます。 a.out を使って プログラム内にある scanf("a=", &a); scanf("b=", &b); これらの変数 a,b を出力し 実行結果で書き込まれるファイルを データとして出力する方法が知りたいのですが (この方法をバッチ処理というのでしょうか?) $ cc f.c (← 実行結果の際のコンパイル) その次に a.out と入力するとエラーが起きます。 a.out の使い方や意味を調べてもいまいち理解し難く困っております。 さきほど言った scanf で値を決める a,b を プログラム内で決めるのではなく a.out a b と入力してデータを出力させるには どのようにすればよいのでしょうか? なぜエラーしてしまうのかも教えて頂けないでしょうか? 長々と質問してしまいすみません。 どうか ご回答 よろしくお願いします。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「ファイルの中身は多くの文字が並ぶので(最大 500列 × 70000行 程度)全てのファイルを書き込むには時間がかかりすぎてしまいます。」 といったところで, 内容を全部書かないわけにはいかないよね? だとしたら, 何をどう高速化したところでそのための時間は絶対に必要. 最低限「現状どのようにしているのか」が分からなければ答えようもありません. 「a.out を使って プログラム内にある scanf("a=", &a); scanf("b=", &b); これらの変数 a,b を出力し 実行結果で書き込まれるファイルを データとして出力する方法が知りたい」 が何を言っているのかよくわからんし, そもそもこの scanf は間違ってる.

その他の回答 (2)

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

ちょっと誤解があるような。 コマンドライン引数 (a.out a b みたいな使い方)にも、バッチ処理(シェルを使ったものはシェルスクリプトと呼びます)にも、処理を高速にするような機能はありません。 あらかじめ実行したいコマンドを全て書いて、自動で実行させることで、実行終了を待って次のコマンドを入力して...とやる手間が無くなって、その時間別のことをしていてもよい、という意味で、時間を有効に使うことはできますが。

s3104s
質問者

お礼

コマンドライン引数とバッチ処理を誤解していました。 a.out という単語こだわっていましたが 高速で書き込みできる方法さえあれば、どのような方法でも良いので その処理法を調べてみたいと思います。 ご回答、ありがとうございます。

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

> a.out と入力するとエラーが起きます。 まず、次の点をはっきりしてください このような質問をする時の基本です。 ・あなたがその作業をしたのは、どんな環境ですか? OSはなんですか?なにかのソフトを動かしてますか? ・その「エラーが起き」たときに、画面にどんなエラーメッセージが表示されますか? どんなエラーでも、まずはエラーメッセージを読むことが解決への第一歩です。 そのメッセージによっては、まったく逆の対処法が必要な場合もあるのです。 質問から推測すると.... cygwin/home というディレクトリから、Windows上でCygwin環境で作業しているのだと思われます。 ・CygwinのCコンパイラ(gcc, ccはgccの別名として登録されている)が出力する実行形式のファイルは、通常は、拡張子がexeになります。オプション無しで実行したなら、a.exeになります。 a.outではありません。 ・エラーメッセージは「command not found」ではないでしょうか? このメッセージは読んだ通りの「コマンドが見付からない」エラーです。 ファイルa.outが無いのですから、あたりまえです。 このメッセージを読んだら、まずは ls でファイルがあるかどうかを確認するのが、普通でしょう。 そうすれば、a.outなど無くて、a.exeがあることに気付いたはずです。 ・a.exeにしても、やはりエラーになることが予想されます。 Cygwin環境での動作はUnix環境に準じます。 Unix系OSでは、『明記しない限り、カレントディレクリにある実行ファイルを実行しません』 Windowsのコマンドプロンプトだと、実行ファイルと同じディレクトリにCDすれば、実行ファイル名だけで実行できます。 しかし、Unix系の環境では、 ./a.exe のように、「カレントディレクトリの実行ファイル」であることを明示する必要があります。 以上のことは、推測して書きました。 しかし、コンパイラや実行環境やエラーメッセージが違えば、まったく役に立たない情報です。 >a.out a b >と入力してデータを出力させるには >どのようにすればよいのでしょうか? コマンドライン引数 argv argc main関数 と言ったキーワードで検索してください。

s3104s
質問者

お礼

環境は全て ご推測どおりです。 質問が不十分だった点については反省し、今後気をつけたいと思います。 ./a.exe で実行はできるのですが ファイルの書き込みのスピードを上げるために どういう処理をすればよいのか困っていました。 調べたところ、 a.out バッチ という単語が出てきたので どのように扱えば良いのかを更に調べたのですが分からず終いで質問しました。 コマンドライン引数 argv argc main関数 という単語を調べてみます。

関連するQ&A

  • コンパイル ./aと./a.out の違い

    ほんとにcの初心者なのですが、 今Tera Termを使って、ソースを書いて、コンパイル、実行をしているのですが、 例えばtest.cというファイルを gcc test.c とやってコンパイルして、 a.outというファイルができます。 それを./aとやれば実行できると聞いてやってみたのですができません。 ./a.outはできるのですが なぜなのでしょうか??

  • コンパイル時のエラー

    毎度c言語の質問でお世話になっております。 ついにコンパイル方法が分かり、いろいろと オブジェクトファイルを作っていますが、 また、わからないことが出てきました。 コンパイルするとエラーになります。 このようにプログラミングすると下のようなエラーが 出てきます。 なぜなのでしょうか? 回答お願いします。 #include <stdio.h> main () { int i = 1; float f = 0.2; double d = 1.25; printf("変数i:%d f:%f d:%lf", i, f, d); return 0; } エラー内容 stray \129 in program stray @ in program   

  • コンパイル後のエラー。

    こんにちは、質問があります。 下のプログラムを組みました。 コンパイルには成功しましたが、実行することができません。 import java.io.*; public class Gyouretu { public static void main(String[] args) { BufferedReader reader = new BufferedReader( new InputStreamReader(System.in), 1); try{ System.out.println("行列数を入力"); String line = reader.readLine(); int n = Integer.parseInt(line); int a[][] = new int[n][n]; int b[][] = new int[n][n]; int c[][] = new int[n][n]; int i,j,k; for ( i = 0; i < n; i++){ for ( j = 0; j < n; j++){ c[i][j]=0; for ( k = 0; k < n; k++){ c[i][j] += a[i][k] * b[k][j]; System.out.print(c); System.out.print(i); System.out.print(j); } } } }catch (IOException e){ System.out.println("end"); } } } 行列の計算をするプログラムなのですが、コンパイル後に行列数(何行何列か?)を入力するとこんなエラーが出ます。 「'2' は、内部コマンドまたは外部コマンド、  操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 なぜなのか、どうしてもわかりません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • a.outはどこへ?

    WindowsでCのプログラミングを始めたばかりです。 環境はcygwinを使っているのですが、gccでコンパイルしてもa.outファイルが出来ません。 gccのコマンドの後には特にエラーも出ませんし、一見成功しているように見えるのですが、やっぱりa.outが出来ていません。 なぜなのでしょうか?

  • cc? a.out?

    最近、大学のパソコンを使ってプログラムを作ろうと思っているのですがコンパイル、実行の仕方がいまいちわかりません。 geditを使って「Hello!」が表示されるプログラムを書き「Hello.c」と名前を付け保存したまではすんなりいけたのですが、この後どうやってコンパイル、実行したらよいのでしょうか? %cc hello.c./a.out と打ってみたのですが cc; command not found とか a.out:command not found と表示されるだけなんです。実行の仕方がいけないのでしょうか? ちなみに学校ではVineLinux2.1を使っています。

  • c言語のコンパイル後のエラ-について

    Unix,window98を使用しています。 #include<stdio.h> main() { doublea,b,x,y; a=1.0 ; b=2.0 ; x=a+1.0/b ; y=(a+1.0)/b ; printf(" a=%f\n b=%f\n x=%f\n y=%f\n",a,b,x,y); } を  gcc ファイル名.c    でコンパイルして、 % ./ファイル名      で実行すると、   ./ファイル名; コマンドがみつかりません。  と表示され、 % ./ファイル名.c     で実行すると、 ./ファイル名.c; アクセス権がありません と表示され、 % ./ファイル名.out    で実行すると、 ./ファイル名.out; コマンドが見つかりません。 となり、困っています。 お答えを頂ければ、嬉しいです。  

  • コンパイル時のクラス生成について

    コンパイルしてクラスファイルが出来上がって実行して、ちょっとプログラムを変えてまたコンパイルして、実行したのですが、元のプログラムのままで何も変わらないのです。もちろん保存もきちんとしています。 ためしに、出来上がっているクラスファイルを全て捨てて、再度コンパイルしてみたらクラスファイルが出来ていて、プログラムを変えた実行結果が出ました。 つまり、クラスファイルへの上書きがされないのです。 これっていったいなぜなのでしょう?? 簡単に、表示文字だけを変えて再度コンパイル実行としてみても、変える前の結果がでて、またファイル処分してからコンパイルして実行したら、きちんと変わりました。 このクラスファイルがあるときに、新たに上書きされない現象ってどんなところから来る問題なのでしょうか?? 今までこの様なことはぜんぜんなかったのですが・・。現状のプログラムはパッケージ分けして、メインは C→my javaに。 他のクラスは全部sub2に入ってます。クラスファイルは6つくらい。  C→my java →sub→sub2に。 一度はコンパイルして求める結果がでてるので、プログラム上のミスは無いはずです。 なぜ書き換わらないのかまったくわかりません。 現状はJDK1.5.0_06を使っています。 短いプログラムですと書き換えられない問題は起きたことありません。 コンパイルは通るけど、実行時にクラスがファイルが見つからないとエラーが出たときがあり、ファイルが作られていないという現象も起きた事もあります。 (これは新たに保存しなおすと言う事で解決しました。) これが今までの経験なのですが、今回のは経験した事をためしてみたのですが、わからなくて・・ どうか、ご存知の方がいらっしゃいましたらお教えください。質問がわかりづらければ補足させていただきます。問題が問題だけにお返事いただけないかもと不安ですが、お待ちいたしております。

    • ベストアンサー
    • Java
  • 実数型の変数に値を入力した計算結果がおかしくなる理由

    こんばんは。 以下のプログラムで値がおかしくなる理由、改善方法を教えて頂けませんでしょうか。 double a,b,c; scanf("%f",&a); scanf("%f",&b); c = a + b; printf("%f",c); これを実行すると、正しい値が出力されません。 int型で宣言し、整数表示の%dに変更すると問題なく値が出力されます。 また、予めdouble型で宣言した変数a,bに実数の初期値(8.5等)を格納しておくと正しい値が出力されます。 どなたかご回答よろしくお願い致します。

  • ftn77のコンパイルエラー

    ftn77でfortranのプログラムをコンパイルしたところ、 文字情報のみでテストしたらコンパイルに成功したのですが、 数値計算の入ったものをコンパイルしたら、 実行時に以下のようなエラーが起こりました。 ーーーーーーーーーーーーーーーーーーーーーーーー RUN-TIME ERROR 00401000 main [+00c5] [recur= 1] メッセージ WARNING the following symbols are missing: IMAG C:\fortran\(ファイル名).obj (C:\FORTRAN\(ファイル名).FOR) ーーーーーーーーーーーーーーーーーーーーーーーーー 元々別のパソコンでコンパイルが成功したものを、 まったく書き換えずにftn77でコンパイルしてみたのにもかかわず、 UNTIME EROORと表示されました。 原因が何か分からないので、どなたか教えてください。 ちなみに10行程度の単純なプログラムなら、数値計算をしてもエラーは怒りませんでした。

  • ファイル入力のエラー

    以下のファイルを配列に読み込むプログラムを作っています。 1987 1100 12 23 2.467164 0.75153 1989 1202 12 31 2.456249 0.72896 1990 1204 9 28 2.484802 0.763903 1991 1206 11 26 2.520005 0.750182 1985 1207 9 26 2.499319 0.749116 以下の通りプログラムを組んでみました。 コンパイルしたところ、出力はされませんでした。 エラーも出ていないので、入力、出力などどこが悪いのかわかりません。 ほとんど初心者です。間違いが分かる方、よろしくお願いします。 #include<stdio.h> #define SIZE 5 main() { int a, b, c, d, i; static int year[SIZE],month[SIZE],day[SIZE],code[SIZE];   double e, f; static double latitude[SIZE],longitude[SIZE]; FILE *fp; fp=fopen("c\distance.dat","r"); while((fscanf(fp,"%d%d%d%d%lf%lf",&a,&b,&c,&d,&e,&f)) !=EOF) { year[i]=a; month[i]=b; day[i]=c; code[i]=d; latitude[i]=e; longitude[i]=f; i++; printf("%13d%8d%8d%8d%9.6lf%9.6lf\n",&a,&b,&c,&d,&e,&f); } fclose(fp); return(0); }

専門家に質問してみよう