【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.21160

ファイル内容を出力するときのコマンド名
投稿者---みつお(2005/05/25 11:08:24)


コマンドプロンプトを使ってファイル内容を出力するプログラミングを作っているのですがコマンドプロンプトからコマンド行引数とファイル名を入力するときのコマンド名がわかりません。ちなみにOSはwindowsです。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ファイル内容を出力するときのコマンド名 21162 まきじ 2005/05/25 11:20:28
<子記事> Re:ファイル内容を出力するときのコマンド名 21165 REE 2005/05/25 11:28:27


No.21162

Re:ファイル内容を出力するときのコマンド名
投稿者---まきじ(2005/05/25 11:20:28)


>コマンドプロンプトからコマンド行引数とファイル名を入力するときのコマンド名がわかりません。ちなみにOSはwindowsです。

コマンド行引数とは?

C:\>hoge hoge.txt

な感じにすれば、hoge.txt が引数で実行できます?


この投稿にコメントする

削除パスワード

No.21165

Re:ファイル内容を出力するときのコマンド名
投稿者---REE(2005/05/25 11:28:27)


>コマンドプロンプトを使ってファイル内容を出力するプログラミングを作っているのですがコマンドプロンプトからコマンド行引数とファイル名を入力するときのコマンド名がわかりません。ちなみにOSはwindowsです。

要はコマンドプロンプトで与えられる引数を取得したいということでしょうか?
そうであれば、それらはmain関数の引数として渡されます。

詳しくはこのサイト(掲示板上部にあるホームページ)の11章の4をご参照下さい。



この投稿にコメントする

削除パスワード

No.21167

Re:ファイル内容を出力するときのコマンド名
投稿者---みつお(2005/05/25 21:59:53)


早速の返答有難う御座います。>まきじさん、REEさん
#include <stdio.h>
#include <stdlib.h>

void type_one_file(FILE *fp)
{
    int ch;
    while((ch=getc(fp))!=EOF){
        putchar(ch);
    }
}

int main (int argc,char **argv)
{
    if(argc==1){
        type_one_file(stdin);
    }else{
        int i;
        FILE *fp;
        
        for(i=0; i<argc; i++){
            fp=fopen(argv[i],"r");
            if(fp==NULL){
                fprintf(stderr,"%s:%s can not open.\n",argv[0],argv[i] );
                exit(1);
            }
            type_one_file(fp);
            fclose(fp);
        }
    }
    return 0;
}

上記のソースをコンパイルしてコマンドプロンプトから
コマンド行引数(コマンドライン引数)と引数(ファイル名)
を入力してファイル内容を出力するのですが入力しても
その入力した文字がコピーされて出力されてしまい行き
詰っています。ちなみにtype hw.datと入力しました。
hw.datは出力したいファイル名です。どう入力すれば
いいんでしょうか?長文ですみません。 
 


この投稿にコメントする

削除パスワード

No.21169

Re:ファイル内容を出力するときのコマンド名
投稿者---まきじ(2005/05/25 23:21:44)


> while((ch=getc(fp))!=EOF){

ファイルから一文字ずつ読み込む時は、fgetc を使います。


この投稿にコメントする

削除パスワード

No.21177

Re:ファイル内容を出力するときのコマンド名
投稿者---円零(2005/05/26 16:28:44)


>> while((ch=getc(fp))!=EOF){
>
>ファイルから一文字ずつ読み込む時は、fgetc を使います。

getcとfgetcの違いはマクロ定義でインプリメントされているか否か
だけではなかったでしょうか。



この投稿にコメントする

削除パスワード

No.21179

Re:ファイル内容を出力するときのコマンド名
投稿者---まきじ(2005/05/26 17:48:25)


>getcとfgetcの違いはマクロ定義でインプリメントされているか否か
>だけではなかったでしょうか。

はい、その通りでした(^^;


この投稿にコメントする

削除パスワード

No.21170

Re:ファイル内容を出力するときのコマンド名
投稿者---まきじ(2005/05/25 23:29:19)


>その入力した文字がコピーされて出力されてしまい行き
>詰っています。

argc argv それぞれ何が、どの様に格納されているかご存知ですか?


この投稿にコメントする

削除パスワード

No.21178

Re:ファイル内容を出力するときのコマンド名
投稿者---円零(2005/05/26 16:31:42)


用語の使い方が不正確で何を言わんとしているのかがわかりにくかったのですが、
要するにコマンドライン引数でファイル名を渡して、
そのファイルの中身を表示するプログラムを作りたいと言うことでしたか。

>コマンドプロンプトからコマンド行引数とファイル名を入力するときのコマンド名がわかりません。
これが意味不明です。コマンドというのはコンピュータに何かをさせる時の、その作業の名称ですが、
「コマンド行引数とファイル名を入力する」のはあなたがすることであって
コンピュータがすることではありません。
この場合、あなたのプログラムが完成した暁にはそのプログラム名が
「コマンド名」に該当するものになるでしょう。

いろいろ考えてみて「書式」がわからないと言うことかと推測しましたが…

>コマンドプロンプトからコマンド行引数(コマンドライン引数)と引数(ファイル名)を入力
想像するにプログラム名とコマンドライン引数一つを入力したと言うことでしょうか。

>ちなみにtype hw.datと入力しました。hw.datは出力したいファイル名です。
と言うことは"type"はプログラム名ですか?
もっとも、その場合DOSコマンドでtypeと言うものがあるので、
プログラムができていないにもかかわらず意図した動作をしてしまうはずですが…
とりあえずはっきりさせてください。
それと、「出力したいファイル名」というのは
「(mode"r"でfopenして読み込んだものを画面に)出力したいファイル(の)名」ということでしょうか。

>入力してもその入力した文字がコピーされて出力されてしまい
もしかしてコマンドライン引数の使い方を間違えているのではないでしょうか。
プログラム名(コマンド)を打ち、スペースを空けて、引数を打ち込んで、その後始めてenterキーを押すんです。
プログラム名のあとにすぐenterを押してしまった場合そこでプログラムが始まってしまうので、
そうなったらプログラムが終了するまでコマンドライン引数を入力するチャンスは二度とありません。
コマンドライン引数とはプログラムの起動と同時に渡す引数のことです。

>for(i=0; i<argc; i++)
コマンドラインで指定したファイル名はargv[1]以降に入っているのに
ループをi = 0 で始めてしまって最初にfopenにargv[0]を渡しているのは恐らく意図に反してるはずです。


この投稿にコメントする

削除パスワード

No.21181

Re:ファイル内容を出力するときのコマンド名
投稿者---まきじ(2005/05/26 17:56:34)


ちなみに、argv[0] には、実行ファイル名(type.exe)が格納されています。
argc は、引数の数 + 1(実行ファイル)です。

以下のソースで確認してみてください。
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv){

    int i;
    
    printf("%d\n",argc);
    
    for(i = 0; i < argc; i++) printf("%s\n",*(argv+i));

    return EXIT_SUCCESS;
}



この投稿にコメントする

削除パスワード

No.21182

Re:ファイル内容を出力するときのコマンド名
投稿者---みつお(2005/05/26 18:10:55)


このサイトの11章の4を見て解決しました。意味不明な質問にもかかわらず答えてくださった方有難う御座いました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧