OS/Win98でVC++を使ってC言語を学習している初心者です.

C言語のプログラムでMS-DOSプロンプト上のコマンド入力において
プリンタに出力する方法を知りたいです.

たとえばMS-DOSプロンプト上で

C:>[プログラム名][ファイル名(XXX.txt)]

と入力すればプリンターにおいて、入力した[ファイル名(XXX.txt)]が
出力されるようなプログラムを作成したいです.
主にプログラムの流れをどのようにすれば良いか知りたいです.

宜しくお願いします.

このQ&Aに関連する最新のQ&A

A 回答 (4件)

補足読みました...


 そうなると、プリンタドライバを使っての印刷になりますので、簡単には出来ません。

 全部書いてしまうと、プログラムを載せる事になってしまうので、主な流れとその時に調べるキーワードを列挙します。
----ここから
1.VC++のプロジェクトの新規作成を選択して、プロジェクトを作成する
 ヒント:沢山あるが、今回の様なプログラムでは、『Win32 Console Application』がお薦め、その後のチェックでは『MFCを使用する』が必須(楽をしたいなら)です。

2.コマンドラインパラメータを取得する
 ヒント:TCHAR* argv[], TCHAR* envp[]あたりを調べる

3.コマンドラインから取得したファイルを調べる
 ヒント:そのファイルが存在するかどうかが重要

4.プリンタのハンドルを作成する
 ヒント:CreateDC この時に、プリンタ名を使用するので、そのプリンタ名の取得がちょっとやっかい

5.コマンドラインからのファイルを開く
6.一行読込む
7.プリンタハンドルに一行書込む
 ヒント:TextOut
8.6-7を繰り返す(改頁等の処理が入るとちょっと面倒)
 ヒント:StartPage/EndPage
9.ファイルを閉じる
10.印刷を終わる
 ヒント:EndDoc
11.ハンドルを解放する
 ヒント:DeleteDC
12.プログラムを終了させる
----ここまで

 ヒントで、関数名になっている物は、その関数名で、ヘルプを検索すれば使用方法が出て来ます。
 ちょっと高いのですが、Windows95 APIバイブル1(9600円)を購入すれば、印刷の仕方が書かれています。参考になると思います。
    • good
    • 0
この回答へのお礼

有難うございました.参考にさせて頂きます.

お礼日時:2001/01/30 09:17

 プリンタは固定でよろしいのですか?



 もしプリンタが汎用プリンタドライバを使用するとなるとちょっと厄介です。

 プリンタによっては、プリンタコードが異なりますので、一度試しに
 コマンドラインから、
『type ファイル名 > prn』でプリンタ出力してみて下さい。それが、無事印刷出来れば、何事もなく印刷出来ます。

この回答への補足

>プリンタは固定でよろしいのですか?
>もしプリンタが汎用プリン…ちょっと厄介です。

固定であるか汎用であるかの概念が勉強不足で分かりませんでした.
私の環境はパソコンからLUNでパソコン(プリンタ用サーバー)へ情報を送り
そこにプリンタが接続されている状態です.汎用になるのでしょうか?

MS-DOSプロンプトで

pass>type ファイル名 > prn  と入力しましたが
ファイルを作れませんでした.  と出力されました.

補足日時:2001/01/29 15:59
    • good
    • 0

ちょっと追加



0 main関数の引数からコマンドライン文字列を取得

やさしすぎるかな?
    • good
    • 0

1ファイルをオープン


2プリンタポートをオープン
3ファイルを1行読込
4プリンタに1行書込み
5ファイルのEOFまで3~4繰り返し
6プリンタポートクローズ
7ファイルクローズ

必要に応じて、5・6の間で改ページ(排紙コマンド)をプリンタポートに出力

この回答への補足

上記の1,7は分かったのですが2から6をどのように行えばいいのか
分かりませんでした.

出力ストリームをプリンタへするということでしょうか?

2の「プリンタポートをオープン」とはC言語の域内で出来ることでしょうか?
C++/VC++はまだ勉強しておりませんので分かりません.

MSDNライブラリで関数がいろいろありましたがよく分かりませんでした.
何か関数でこの関数を指しているぞ!!というのがありましたら教えて頂
きたいです.Cの域を越えていることでもかまいません.

勉強不足で申し訳ございません.どうぞ宜しくお願い致します.

補足日時:2001/01/29 14:20
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aと関連する良く見られている質問

QMS-DOSについて

コンピュターの知識取得に乗り遅れた年金受給者です。
MS-DOS(DOS/V)にはFAT16と、それ以外のOSがあります。WINDOWS95以後のMS-DOSは、それ以前のMS-DOSとは違うとされていますが、どう違うのでしょうか。
特に、WINDOWS3.1までのMS-DOSは基本MS-DOSとされFAT16ですし、対応している使用領域は2GBまでですが、WINDOWS95で使用されているMS-DOSもFAT16ながら使用領域は4GBですね。
どう違うのでしょうか。 
皆さんの英知を誰か授けてください。宜しくお願いします。

Aベストアンサー

えっと、OSとファイルシステムとフォーマットコマンドを区別しましょう。
MS-DOSは95以前ではOSであり、以後はOSの一部をなすものです。
95以前のMS-DOSではファイルシステムとしてFAT12とFAT16が使えます。
FATはたくさんのクラスタという小さな領域にファイルを分割して保存し、FATという表にどのファイルの何番目の塊が、どのクラスタにあるかを記録して管理していました。
12とか16とかいう数字は、クラスタの続き番号を指定する際に使われる変数の大きさで、12だと12ビット(番号は0-4095)、16なら16ビット(番号は0-65536)ということになります。
Windows95でもこの状況は変わっていませんが、95ではファイル名の命名規則が8.3形式でなくてもよいということにしました。
このファイルシステムをVFATといいます。
VFATにしてもクラスタを管理している変数は16ビットなので番号は0-65535で65536個のクラスタしか管理できません。
ここで、クラスタの最大の容量は当時32kbyteでしたから32K*65536個ということで2GBの容量が最大ということになるわけです。

FAT16で4GBの容量を扱えたのは95ではなくNT3.51です。
NT3.51は最大64KBのクラスタを扱えたので、64K*65536個ということで4GBの容量が最大ということになるわけです。
ただ、このFAT16のファイルシステムはクラスタの最大値を32KとしているMS-DOSやWindows95では読めません。
また、この場合たとえ1kbのファイルにも64kbのクラスタを割り当てることになりますから、無駄が大きくなることになります。
よってその後はクラスタを管理する変数を32bitとしたFAT32にすることにより、容量の拡大と無駄の排除の両方を実現しています。

さて、
>(1)MS-DOS VER6.2のFORMAT後にWIN95をインストールしたHDD
>(2)WIN95に付属されているMS-DOSでFORMATしてWIN95をインストールしたHDD(普通の標準のOSのインストール仕方) の二点のHDDがあり、
>それに同じプログラム(WIN95対応)をインストールして起動させた場合に(1)の場合には1.2MBのフアイルの読み書きが出来ますが、(2)の場合は不可能です
とのことですが、容量からいってHDDはHardDiskDriveではなく、フロッピーディスクドライブのHigh Density Double tracksのお話でしょうか。
1.2MBのフロッピーディスクの読み書きは基本的にMS-DOSでもWindows95でもオリジナルではサポートしていません。
しかしながら日本では80年代から国産PCの主力がNEC社の98シリーズでこのシリーズの3.5インチフロッピーディスクはIBM社PCあるいはその互換機のPCのフロッピーが720kb/1.44mbの容量で使われていたのに対して、640kb/1.25mbの容量で利用されていました。
このため、当初はMS-DOS(DOSV)にも、WINDOWS95にも640kb/1.25mbの容量のフロッピーを読み書きできる特別なドライバーが用意されていたのです。
もっとも95ではそのようなドライバはメーカ製のPCでなければ普通にインスツールした際には導入されないため、結果として使用できないように見えるかもしれません。
そのご、日本のPCもNEC製の98シリーズはなくなり、全てIBMPC互換機となりました。このため現在では640kb/1.25mbのフロッピーをハード的に読めないフロッピードライブも多いのですが、まだ3mode Floppyということでお調べになればハードも使い方もお分かりになるかと思います。

えっと、OSとファイルシステムとフォーマットコマンドを区別しましょう。
MS-DOSは95以前ではOSであり、以後はOSの一部をなすものです。
95以前のMS-DOSではファイルシステムとしてFAT12とFAT16が使えます。
FATはたくさんのクラスタという小さな領域にファイルを分割して保存し、FATという表にどのファイルの何番目の塊が、どのクラスタにあるかを記録して管理していました。
12とか16とかいう数字は、クラスタの続き番号を指定する際に使われる変数の大きさで、12だと12ビット(番号は0-4095)、16なら16ビッ...続きを読む

Qchar *name1[4] とchar name2[][4] の違いについて

C言語のことで質問があります。

char *name1[4]は
char *name1[4] = {"abcdefghi","jkl","l","mn"};
と宣言でき,ポインタを4つ確保した形となりました。

char name2[][4]は
char name2[][4] = {"abc","def","ghi","jkl","mno","pqr","stu","vwx"};
と4文字以内の文字列を初期化した数だけ確保した形となりました。

この結果からchar *name1[4]の意味は,char name2[][4]ではなくchar name2[4][]に近いと思いました。
しかし,char name2[4][]ではポインタを4つ確保した事にはならないみたいでコンパイルが通りません。
*name1[4]では4つのポインタを確保できるのに~と思ってしまいます。

ポインタと配列は別物と考えるべきなのでしょうか?
訳の分からない質問かもしれませんが,
何卒ご指導いただくようよろしくお願いします。

Aベストアンサー

ポインタと配列の違いというのは、変数と定数の違いのようなものです。

話を簡単にするために、一次元配列から考えましょう。

char *p1; と定義した時のp1は、いうまでもなくポインタで、
これは変数です。p1は任意の文字列を指すことができます。
char a1[4]; と配列の形で定義した場合のa1については、
a1[0]やa1[1]等を、通常のchar型の変数と全く同じように扱うことが
できます。しかし、a1自体は、例えば a1 = p1; のように値を代入する
ことができません。(逆の p1 = a1; は可能。)つまり、この場合のa1は、
変数ではなく、定数のようなものなのです。

複合的なケースについて見てみましょう。
char **q1; ポインタへのポインタ
 q1,*q1,**q1,q1[0],*q1[0],q1[0][0] のいずれも変数として
 扱うことができます。(値を代入することが文法的に許されます。
 ただし、実行時にはアクセス違反になる場合もあります。)
char q2[4][4]; 二次元配列
 q2,q2[0]は変数として扱うことができません。q2[0][0]のように
 して、初めて変数として扱えるようになります。
char *q3[4]; ポインタの配列
 q3は変数として扱うことができませんが、q3[0],*q3[0],q3[0][0]
 はいずれも変数として扱うことができます。
 なお、この定義は char *(q3[4]); とした場合と全く同じ意味です。
char (*q4)[4]; 配列へのポインタ
 q4,(*q4)[0],q4[0][0]はいずれも変数として扱うことができます。
 しかし、*q4,q4[0]は変数として扱うことができません。

char *name1[4]; と char name2[4][]; は確かに似ています。しかし
違うところもあります。それは、name1[0] が変数として扱えるのに
対し、name2[0] には値を代入できないという点です。(データの
具体的な構造については、inthefloiさんが書いておられる通りです。
> char name2[4][]ではポインタを4つ確保した事にはならないみたい
というのも、全くその通りで、配列の定義では、ポインタ変数の領域
を確保する余地はないのです。

ポインタと配列の違いというのは、変数と定数の違いのようなものです。

話を簡単にするために、一次元配列から考えましょう。

char *p1; と定義した時のp1は、いうまでもなくポインタで、
これは変数です。p1は任意の文字列を指すことができます。
char a1[4]; と配列の形で定義した場合のa1については、
a1[0]やa1[1]等を、通常のchar型の変数と全く同じように扱うことが
できます。しかし、a1自体は、例えば a1 = p1; のように値を代入する
ことができません。(逆の p1 = a1; は可能。)つまり...続きを読む

QMS-DOS(プロンプト?)の起動について

製造機械でのデータ送信をMS-DOSで行ってます。

いつもはwindows95を起動させてから、すべてのプログラム~MS-DOSって感じで立ち上げてました。

しかし、後輩がMS-DOSプロンプト画面の設定を少しイジってしまったようで・・・
同じようにMS-DOSを起動させたら、小さい画面が出てきて「このプログラムはMS-DOSモードで実行するように設定されており、ほかのプログラムの動作中には実行できません。続行すると、ほかのプログラムをすべて終了します」と出てきます。

続行するとMS-DOS モードで再起動したような真っ黒な全画面になります。
US/を入力して、コマンドを入力して以前のようにプログラムは起動できます。

設定を元に戻したいのですが、前のようなMS-DOSプロンプト画面になってくれないので設定変更できないのです。

どうすれば、元のMS-DOSプロンプト画面に戻せますか?教えてください。

Aベストアンサー

95使っていたのは昔のことだから忘れていたようです。

C:\Windows\スタートメニュー\ (「スタートメニュー」は半角) から探し出して右クリックしてください。

Q[Windows][C] ゲームプログラムが実行途中に止まってしまいます

いつもお世話になっております。

今アクションゲームの基盤となる簡単な動きをさせるプログラムを作成したのですが、なぜだか時間が経つと止まるという不思議な現象に陥っています。

プログラムの内容はジャンプや移動をするだけの単純なもので、描画やキャラの移動はスレッドで個別に行っています。
キャラが止まったとき、FPSは動いていたので、描画の方のスレッドにたぶん問題はないと思っています。

キャラが止まると同時にゲーム自体もおかしくなってしまうのですが、それはキャラ動作のスレッドが異常によって止まってしまったからなのでしょうか?
解決法のわかる方、すみませんがご指導お願いいたします。

以下に問題のあると思われるスレッドを貼ります。
描画やプロシージャに問題があると思われる方がいましたら補足で追加いたします。


/*************** キャラクターを動かす ****************/

DWORD WINAPI CharacterMove(LPVOID vdParam) {
 HDC hdc;
 RECT rect;
 ThreadParam * param;
 HRGN hit = CreateRectRgn(0, 0, 0, 0);

 int JUMP = 0;
 int DBJUMP = 0;
 int position = 0;
 int flag = 0;

 param = (ThreadParam *)vdParam;
 GetClientRect(param->owner, &rect);


 while(TRUE){

  /* 左移動 */
  if(character.x > rect.left + 5){
   if(GetAsyncKeyState(37)){
    if(CombineRgn(
          hit,
          CreateEllipticRgn(character.x - 12, character.y, character.x - 12 + 25, character.y + 25),
          S_RGN, RGN_AND) == NULLREGION){

     character.x -= 12;
    }
   }
  }

  /* 右移動 */
  if(character.x + 25 < rect.right - 5){
   if(GetAsyncKeyState(39)){
    if(CombineRgn(
          hit,
          CreateEllipticRgn(character.x + 12, character.y, character.x + 12 + 25, character.y + 25),
          S_RGN, RGN_AND) == NULLREGION){

     character.x += 12;
    }
   }
  }

  /*** ジャンプ ***/
  if(CombineRgn(
        hit,
        CreateEllipticRgn(character.x, character.y + 1, character.x + 25, character.y + 1 + 25),
        S_RGN, RGN_AND) != NULLREGION){

   if(GetAsyncKeyState(38)){
    JUMP = 32;
   }
  }

  /***** ジャンプ時・落下時 *****/
  if(CombineRgn(
        hit,
        CreateEllipticRgn(character.x, character.y + 1, character.x + 25, character.y + 1 + 25),
        S_RGN, RGN_AND) == NULLREGION || JUMP == 32){


   /*** 一度キーを離さないと2段ジャンプは成立しない ***/
   if(!GetAsyncKeyState(38)){
    flag = 1;
   }

   /*** 2段ジャンプ ***/
   if(GetAsyncKeyState(38) && flag == 1 && DBJUMP < 1){
    JUMP = 26;
    DBJUMP++;
   }

   /*** 慣性 ***/
   if(CombineRgn(
         hit,
         CreateEllipticRgn(character.x, character.y - JUMP, character.x + 25, character.y - JUMP + 25),
         S_RGN, RGN_AND) != NULLREGION){

    flag = 0;
    DBJUMP = 0;

    if(JUMP < 0){
     while(CombineRgn(
            hit,
            CreateEllipticRgn(character.x, character.y + 1, character.x + 25, character.y + 1 + 25),
            S_RGN, RGN_AND) == NULLREGION){

      character.y++;
     }
    }else{
     while(CombineRgn(
            hit,
            CreateEllipticRgn(character.x, character.y -1, character.x + 25, character.y + 1 + 25),
            S_RGN, RGN_AND) == NULLREGION){

      character.y--;
     }
    }

    JUMP = 0;

   }else{
    character.y -= JUMP;
   }

   /* 最大落下速度 */
   if(JUMP > -20){
    JUMP -= 3;
   }
  }

  Sleep(16);

 }

 DeleteObject(hit);
 ReleaseDC(param->owner, hdc);

 return TRUE;
}

いつもお世話になっております。

今アクションゲームの基盤となる簡単な動きをさせるプログラムを作成したのですが、なぜだか時間が経つと止まるという不思議な現象に陥っています。

プログラムの内容はジャンプや移動をするだけの単純なもので、描画やキャラの移動はスレッドで個別に行っています。
キャラが止まったとき、FPSは動いていたので、描画の方のスレッドにたぶん問題はないと思っています。

キャラが止まると同時にゲーム自体もおかしくなってしまうのですが、それはキャラ動作のスレッドが...続きを読む

Aベストアンサー

 こんにちは。

 リソースリークしているからではないでしょうか・・・。
 一箇所だけではなく、沢山有ります。

if(CombineRgn(hit,
       CreateEllipticRgn(character.x - 12, character.y, character.x - 12 + 25, character.y + 25),//ココ
       S_RGN, RGN_AND) == NULLREGION)
{
character.x -= 12;
}

↓---------------------------------------------------------------------------------------------------------

//後始末しないといけません。
HRGN hRgn = CreateEllipticRgn(character.x - 12, character.y, character.x - 12 + 25, character.y + 25);
if(CombineRgn(hit, hRgn,S_RGN, RGN_AND) == NULLREGION)
{
character.x -= 12;
}

::DeleteObject(hRgn);

 こんにちは。

 リソースリークしているからではないでしょうか・・・。
 一箇所だけではなく、沢山有ります。

if(CombineRgn(hit,
       CreateEllipticRgn(character.x - 12, character.y, character.x - 12 + 25, character.y + 25),//ココ
       S_RGN, RGN_AND) == NULLREGION)
{
character.x -= 12;
}

↓---------------------------------------------------------------------------------------------------------

//後始末しないといけません。
HRGN hRgn = Crea...続きを読む

QDOSV用 MS-DOSのOS

昔PC-9800シリーズMS-DOS6.2のOSがありましたが、DOSV用のMS-DOS3.3以上のOSを探しているのですが、見つかりません。

DOSV用のMS-DOS3.3以上のOSはないのでしょうか

Aベストアンサー

何に使うかにもよるけど、DR-DOSが無償で使えます。

5位まではMS-DOS、PC-DOS,DR-DOSどれもほぼ似たようなものでした。それ以降は結構差があります。

ちなみに、DR-DOSはデジタルリサーチが開発したものである種、MS-DOSよりもオリジナルといえないこともないです。

PC-DOSはIBM社のDOSです。MS-DOSとほぼ同じです。

ちなみに、FreeDOSなど無償のDOSは幾つか存在します。

Q[VC++][MFC][SDI]ダイアログコントロールもしくわツールバー!!詰まってます!!

現在VC++6.0でMFCを使いSDIのプログラムを作っているのですが、フォームにダイアログバーを張っています。

これをツールバーのように自由に動かしたり、左右上下にドッキングさせたり。
これって実現可能でしょうか?

色々ためしてみたんですが無理でした。
やっぱ不可能ですかね?

これが無理なんであればデフォルトで作成されるツールバー([新規作成][開く][保存]等が入ってる)にコントロール(ボタンやリストボックス)を追加して使用、と考えているのですがこれも難しい!!!


まだまだ未熟者なのですがどうかご存知の方おられましたらご教授ください!!
よろしくお願いします!!

Aベストアンサー

Dannerです。
参考URL(英語)を載せておきます。

参考URL:http://www.codeguru.com/Cpp/controls/toolbar/placingcontrolsintoolbars/article.php/c2505/

QMS-DOS形式のファイルをWindowsで。

毎度ご迷惑おかけしております・・・(2回目です)

ネット上からMS-DOSで動作するフリーソフトをダウンロードしたのですが、
そのフロッピをそのままPC(MS-DOS3.30?古いです)に差し込んで探しても、ファイルが見つかりませんでした。
考えてみれば、WindowsとMS-DOSではフォーマット形式が違うので、
Windows上で落としたファイルの内容は、MS-DOSでは見れないのですね。

PCのハードの中に入っているファイルを(→フロッピに保存して)、Windowsで展開したり、その逆で、Windowsで保存したファイルをMS-DOSで開いたり・・・ということは出来るのでしょうか?

(ところで、調べるうちに「Windows上のMS-DOS」という言葉を耳にしたのですが、
 「OSの上にOS?」ということに・・・?
 ファイル形式とかはどうなっているのでしょう?)

Aベストアンサー

EPSON=PC98互換機です。
うちでも使っていました・・・

で、まずどうしてもEPSONで見たい場合、EPSONで9セクタフォーマットしてからWINDOWSマシンからコピーします。

アプリがPC98専用アプリなら動作しますが、断りを入れていないなら多分PC/AT用でしょう、動作しません。

Q副プログラム内(void mystery(char s1[],char s2[]))の動作確認文 

お忙しい中失礼します。
下記のプログラム内の動作について質問があります。宜しければご回答願います。

void mystery(char s1[],char s2[])
{
int i=0;
while(s2[i]!='\0'){ //s2[i]内に文字が入力され、エンターキーが入力されるまで{s1[i] = s2[i]; ++i;}内の動作を行う。
s1[i] = s2[i];    //s1[i] を基準にs2[i]の文字数を++iを使い、カウントする。
++i;         //++iはただs1[i] とs2[i]の文字が合致してるか確認を行う。s1[]=”Good”なら s2[]=”Good”の各文字が合致してるかどうか。
}

s1[i] = '\0';    //s1[i]にエンターキーが入力されて、void mystery(char s1[],char s2[])内のループを抜ける。
return;       //s1[i] = '\0'で'\0'が定義されているのでreturn 0;でない?
}

↑上記動作質問://より右側の文章は文章的に正しいでしょうか?
void mystery(char s1[],char s2[])内でどんな動作をしてるのかが、イマイチよく分からないのです。




↓下記のプログラム
#include <stdio.h>
#include <stdlib.h>
void mystery(char [], char[]);

int main()
{
char m1[81],m2[81];
int i;
printf("Message?");
gets(m1);
mystery(m2,m1);
puts(m2);

system("PAUSE");
return 0;
}

void mystery(char s1[],char s2[])
{
int i=0;
while(s2[i]!='\0'){
s1[i] = s2[i];
++i;
}

s1[i] = '\0';
return;
}

お忙しい中失礼します。
下記のプログラム内の動作について質問があります。宜しければご回答願います。

void mystery(char s1[],char s2[])
{
int i=0;
while(s2[i]!='\0'){ //s2[i]内に文字が入力され、エンターキーが入力されるまで{s1[i] = s2[i]; ++i;}内の動作を行う。
s1[i] = s2[i];    //s1[i] を基準にs2[i]の文字数を++iを使い、カウントする。
++i;         //++iはただs1[i] とs2[i]の文字が合致してるか確認を行う。s1[]=”Good”なら s2[]=”Good”の...続きを読む

Aベストアンサー

うーん。。。
動作の説明としては全て間違いです。

>while(s2[i]!='\0'){
s2のi番目の要素が終端文字で無い間繰り返し処理します。
#エンターキー云々は関係ありません。

>s1[i] = s2[i];
s1のi番目の要素にs2のi番目の要素をコピーしています。
#比較ではなく代入です。

>++i;
ここでのiは文字列の要素を表す要素番号に過ぎません。
#次の文字へ進むだけで、カウントなどしていません。

>s1[i] = '\0';
s2が文字列の終わりを検出したので、
ループを抜けてs1にも文字の終端を書き込んでいます。
#ここでは既にループを抜けた後です。

>return; 
関数の戻り値はvoidつまり「無し」なので
returnで評価される式も在りません。
#疑問系でコメントを書くなら書かない方が良いです。
#混乱のもとですから。。。

短くすると・・・:-p
void mystery(char *s1, const char *s2){
  while (*s1++ = *s2++);
}

うーん。。。
動作の説明としては全て間違いです。

>while(s2[i]!='\0'){
s2のi番目の要素が終端文字で無い間繰り返し処理します。
#エンターキー云々は関係ありません。

>s1[i] = s2[i];
s1のi番目の要素にs2のi番目の要素をコピーしています。
#比較ではなく代入です。

>++i;
ここでのiは文字列の要素を表す要素番号に過ぎません。
#次の文字へ進むだけで、カウントなどしていません。

>s1[i] = '\0';
s2が文字列の終わりを検出したので、
ループを抜けてs1にも文字の終端を書き込んでいま...続きを読む

QMS-DOS画面のハードコピーのとり方について

AT機のMS-DOS(ver.6.2)の操作用としてMS-DOS画面の手順書を作ろうと思っております。
MS-DOS画面を画像データとしてWinXP_Proでとろうとしますがどうにもとれません。
Virtual PCで表示させてとろうとしましたが、これでもうまく行きません。
現在のWindowsの表示ではなく、MS-DOS画面と同じような画面をとる方法はありますでしょうか?
デジカメ等で撮影する方法しかないのでしょうか?
昔のMS-DOS機(AT互換機)はあります。
ご存知方いらっしゃればお手数ですが教えて下さい。
よろしくお願いします。

Aベストアンサー

>MS-DOS画面

ウィンドウズの場合「スタート」「アクセサリ」「コマンドプロンプト」でDOS様画面がでますが、その場合はAlt+PrintScreen 画像ソフト起動Ctrl+Vでハードコピーが取れます。
MS-DOSでのコマンド画面というのが昔のことで忘れましたがPrintScreenキーは使えないのですか?

Qfoo1.txt、foo2.txt、foo3.txt…とファイル名をつけたいとき

プログラムの一部でファイルを作成しておりまして、
foo1.txt、foo2.txt、foo3.txt…のように
foo+変数.txtとなっており、変数を変える(増やす)ことで複数のファイルを作っていきたいのですが、

このように作成したいファイル名の途中に変数を含んでいる場合、どのようにすればよいのかをご教授願います。

現在、ファイルを作成する関数(関数の中身はおそらく関係してこないと思うので割愛させていただきます)を作成し、
make("foo.txt")のように記述しておりますが詰まってしましました。
どうぞ宜しくお願いします。

Aベストアンサー

つまり
char str[16];
int count;
for(count = 0; count < 10; count++)
{
sprintf(str,"foo%d.txt",count + 1);
}
とすると
strにファイル名が入っている。


人気Q&Aランキング

おすすめ情報