• ベストアンサー

DOS画面をプリンタ出力

MS-DOSプロンプトの画面をプリンタに出力されるプログラムを 作ろうと思いました。 #include <iostream.h> main(){ char ppp; cout << "pの入力でプリントします"; cin >> ppp; if (ppp=='p'){ cout << "pが入力された"; ここでプリンタ出力命令 } } プリンタ出力命令はどういう命令文を書ければいいのか 教えてください。

  • A__
  • お礼率59% (194/328)

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

  • ベストアンサー
  • kokucho81
  • ベストアンサー率61% (157/255)
回答No.1

はっきり言って、ポインタの理解があやふやな今のA__さんには早いと思います。 bcc(もしかして、フリーbcc55コンパイラを使用なさっておられるのかな?)でやるということは、Win32APIを直接呼ぶプログラムを書く必要があります。 これは今のA__さんにはかなり難しいのではないでしょうか? (書けたとしても、他人が書いたも同然で、  まったく意味がわからないと思います。  単に呼び出していると言うだけの世界です。) 今のA__さんの理解できる範囲内で、やるとすれば、 DOSプロンプトの仕組の一つである、 リダイレクト機能を利用するのが簡単かもしれません。 #include <iostream.h> #include <stdlib.h> #include <string> void main(int, char *argv[]) { /* 引数があるかないかによって、「モード」を分ける * 仕組の説明: * p が入力  → 〔自分〕〔ppp〕〔> PRN〕の形式で自分自身を呼び出す * p が非入力 → そのまま終了 */ // 引数がないと、要求モードに入る if (!argv[1]) { cout << "[p] の入力でプリントします。\n$>"; char ppp; cin >> ppp; if (ppp=='p') { cout << "p が入力されました。\n"; // p が押されると、〔自分〕〔ppp〕〔> PRN〕の形式で自分自身を呼び出す string s=string(argv[0])+" "+ppp+" > PRN\0"; system(s.c_str()); } } else { // 〔自分〕〔ppp〕〔> PRN〕の形式で自分自身を呼び出されるとここにくる。 // ここでのこのプログラムの役割は、印刷すべき文字を吐き出すだけ。 cout << argv[1]; } } ここでは、強引にひとつのプログラム(はっきり言って、こんなプログラムは構造的に推奨されません)としましたが、 (1)「入力の要求用 兼 入力されたデータをファイルに残しておくプログラム」 (2)「データファイルを読みこみ、表示するプログラム」 という2つのプログラムを作成し、(1)で p が入力されたときに system("(2)の名前.exe >PRN")としてやるのが より良いプログラム設計といえると思います。

A__
質問者

お礼

C++の初級の勉強のは、まずは文字列の処理とプリントアウトぐらいを 覚えよう と思っていたけど、プリンター出力命令は思ったより 難しいものだと知りました。 でも、プリンター出力は知っておきたいからなんとか理解しようと がんばります。 初心者のための簡単なソースを教えてもらえたのがうれしかったです。 コンパイラはbcc5.5です。 ありがとうございます。

その他の回答 (1)

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.2

DOSならSTDPRNに対応するストリームを開けばできますね。 "prn:"をストリームで開いて書きこめばプリンタに出力されます。 「DOS画面を」ということに固執するとVxDを書かないといけません。 “画面”の出力はドライバの範疇です。

A__
質問者

お礼

言葉が難しくて分からなかったけど、プリンタ出力をする時の キーワードになると思いました。 ありがとうございます。

関連するQ&A

  • 文字列の処理

    #include <iostream.h> main(){ char x[1]; //ここで あいうえお という5文字を入力 cin >>x; ? } ↑いうえ という文字を cout << で表示するにはどうしたらいいんですか?

  • 無限ループで出力ストリームが表示されないのはなぜですか?

    次のソースコードをVC++で実行したところ、入力の表示ができませんでした。 でも、無限ループを削除すると、正常に表示されます。 非常に基本的な質問かもしれませんが、理由がわかりません。 ご存知でしたら教えてください。よろしくお願い致します。 #include <iostream.h> int main() { char ss[80]; cout << "何か入力してください:"; cin >> ss; cout << "入力したのは[" << ss << "]です\n"; for(;;) { } }

  • cout関数を使っているのですが,画面に出力されません。

    いつもお世話になっております。今回はC++言語について質問があります。 次のプログラムは画面から入力された文字の数とリターンの数を数えるプ ログラムです。 /* 入力の文字数を数えるプログラム */ #include <iostream.h> int main(int argc, char **argv){ char c; int RETcount = 0; //改行数 int CHARcount = 0; //文字数 while(cin.get(c)){ if(c == '\n'){ ++RETcount; } else{ ++CHARcount; } } cout << "RET:" << RETcount << '\n'; //(1) ここの部分が表示されません。 cout << "CHAR:" << CHARcount << '\n';//(2) ここの部分は表示されます。 return 0; } 何故か(1)の部分が表示されません(^^; いきなり(2)の部分が表示されます。 そこで(1)(2)の部分を下記の(3)(4)(5)に書換え cout << "RET:" << RETcount << '\n'; //(3) cout << "RET:" << RETcount << '\n'; //(4) cout << "CHAR:" << CHARcount << '\n'; //(5) 実行した所(4)と(5)の部分は表示されるのですが, (3)の部分が表示されません。 つまりwhile{・・・・・}の直後のcoutが表示されません。 while(cin.get(c))で何かが起こっているのでしょうか????(^^; 使用環境は,Windowsで入力の終了は[Ctrl + Z]で行っています。 ご存知の方どうかご指導よろしくお願いします。

  • getlineについて

    現在getlineを用いてプログラムを作成しようとしているのですが、例えば #include <iostream> using std::cin; using std::cout; using std::endl; int main(){ char buffer[81]; while(!cin.eof()){ cin.getline(buffer,sizeof(buffer)); cout << buffer << endl; while((!cin.eof())&&cin.fail()){ cin.clear(); cin.ignore(80,'\n'); } } return 0; } というプログラムを作った場合、標準入力から各行を80文字だけ読み込み出力をするわけなんですが、 この80文字という文字制限をなくしたい場合どういった工夫をすればいいのでしょうか?

  • char *の書き換え

    #include <iostream.h> int main(){  char *p = "abcdef";  p[3] = 'g';  cout << p[3];  return 0; } C++です。 p[3] = 'g'; は、やってはいけないことですか?

  • プログラムの動作の仕方

    この下のプログラムは、WRITE <ファイル名>をコマンド行で入力すると、動作するプログラムなのですが、この通りにWRITE <test>としてもできません。 やり方を教えてください. #include <iostream> #include <fstream> using namespace std; int main(int argc,char *argv[]) { if(argc!=2){ cout << "使い方:WRITE<ファイル名>" << endl; return 1; } ofstream out(argv[1]); //出力ファイル if(!out){ cout << "出力ファイルが開けません" << endl; return 1; } char str[80]; cout << "文字列をディスクに書き込み、$で停止します" << endl; do{ cout << ": "; cin >> str; out << str << endl; }while(*str!='$'); out.close(); return 0; } お願いします。

  • 実行

    こんにちは。私は昨日からC++を始めたのですがなかなかうまくいかないためこちらに質問させていただくことにしました。 #include <iostream.h> int main(void) { int x; int y; cout<<"xを入力: 10"; cin>>x; cout<<"yを入力: 2"; cin>>y; cout<<"x+yは"<<x+y<<"です。\n"; return(0); } このようなプログラムを作成したのですが実行してみたところ、 xを入力: 10 これ以降下までいきません。どうすればうまくいくのでしょうか?宜しくお願いします。

  • javaプログラミング

    以下のプログラムがコンバイルできません なぜでしょうか? #include<iostream> #include<cmath> using namespace std; int main() { double a, b; cout << "実数 a の値を入力してください " << endl; cin >> a; cout << "実数 b の値を入力してください " << endl; cin >> b; cout << a << " の " << b << " 乗は " << pow(a, b) << "です" << endl; return 0; }

    • ベストアンサー
    • Java
  • 改行文字について

    #include<iostream> using namespace std; int main(void) { char c; while (cin.get(c)) if (c == '\n') cout << "[RET]\n"; else cout << c; return(0); } これのif (c == '\n')の改行文字と等しいとは何のことを指すのでしょうか? よろしくお願いします。

  • C++

    C++で書いた下記のプログラムが、文字の入力が1023個までなら実行されますが、1024個を超えると実行されません。なぜだか分かる方、教えてください。 #include <iostream> #include <string> using namespace std; int main(void) { string Str; cin >> Str; cout << "here"; }