通常テキストを一文字ずつ読み込む時って
cin.get(c)とか、やりますよね?
でも、二文字ずつ読み込む時ってどうやるんですか?
そもそもできるんでしょうか?
もしできないとしたら、それに相当する書き方とかあるんでしょうか?

A 回答 (2件)

iostream(ていうかC++)はよく解らないのですが...



"stdio.h"に定義されているfgets()関数を使えばいいのではないでしょうか。
fgets(
char* 読込先の文字配列,
int 読む文字数+1,
FILE* 読み込むファイルポインタ);
です。

以下は使用例です。

#include <stdio.h>
int main(){
 char buf[5];
 FILE* fp;

 if((fp=fopen("C:\\aaaa.txt","ra"))==NULL){
  printf("ファイルのオープンに失敗.\n");
  return 0;
 }

 fgets(buf, 3, fp);
 printf("%s\n", buf);

 fclose(fp);
 return 0;
}

fopen関数でファイルのファイルポインタを作って
fgets()で二文字読み、表示してから
fclose関数でファイルポインタを無効にします。

配列を知らないって場合はちょっときついかもしれませんが...
ま、その際は補足要求をどうぞ。
    • good
    • 0

こんにちは。

itohhといいます。

iostreamの場合、
cin.read(pch, 2);
とすれば、良いのでは。
    • good
    • 0

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

このQ&Aを見た人が検索しているワード

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

Q手書きでデザインした文字やロゴをデジタル化するソフト

手書きでデザインした文字や簡単な絵というか、
ロゴマークみたいなのをスキャナに取り込んで、
デジタル化したいのですが、
Illustratorは高くて買えません。
ベクトル画像でレイヤーが使えて使い方が簡単な
ソフトがあれば教えてください。
そんな都合のいいものはないのでしょうか?
無ければ、無いと教えていただきたいのですが・・・
PhotoshopElementsは使っているのですが、
限界を感じています。

Aベストアンサー

PaintShopPro7・Paintgraphic両方とも低価格でパスを扱えます。PaintShopProは最新版は9ですがパスや印刷プレビューの使い勝手が改悪された上動作が重くなっているので安く軽い7を推奨します。

PaintShopPro7・Paintgraphic両方ともElementsにないチャンネル・パス・トーンカーブ・マスクがありますしレイヤーも当然使えます。PaintShopPro7はイラストレーターのようにフォントをアウトライン化してベクターオブジェクトとしていじることができます。

>>手書きでデザインした文字や簡単な絵というか、
ロゴマークみたいなのをスキャナに取り込んで、
デジタル化したいのですが、
>>ベクトル画像でレイヤーが使えて使い方が簡単

はもちろんPaintShopPro7・Paintgraphicのどちらでも可能です。ただしPaintgraphicは価格は安いですが中上級者向きのソフトです。レタッチソフト初心者でなくてもマニュアルつきを購入したほうが無難です。PaintShopPro7はPDFとフラッシュによる動画マニュアルおよび絵入りのヘルプ画付属するので解説書は特に必要ないです。
PSP ver.7と6解説
http://www.seiai.ed.jp/t2000/psp7t2/index.html
http://www.seiai.ed.jp/t2000/psp/index.html

Paintgraphic
http://www.sourcenext.com/products/paint/
http://piro.sakura.ne.jp/latest/flakes/035kid.html
PaintgraphicとPhotoshopLEの比較
http://ojakan2.hp.infoseek.co.jp/cgtips_pg.html
PaintShopPro7
(http://www.amazon.co.jp/exec/obidos/ASIN/B0006IX6Z2/qid%3D1123834561/sr%3D1-1/ref%3Dsr%5F1%5F10%5F1/249-6805767-8787515)

PaintShopPro7・Paintgraphic両方とも低価格でパスを扱えます。PaintShopProは最新版は9ですがパスや印刷プレビューの使い勝手が改悪された上動作が重くなっているので安く軽い7を推奨します。

PaintShopPro7・Paintgraphic両方ともElementsにないチャンネル・パス・トーンカーブ・マスクがありますしレイヤーも当然使えます。PaintShopPro7はイラストレーターのようにフォントをアウトライン化してベクターオブジェクトとしていじることができます。

>>手書きでデザインした文字や簡単な絵というか、
...続きを読む

Qcin.get(c)について

テキストを一文字読み込むときは、cin.get(c)
と、やりますが、二文字ずつ読み込む方法が分かりません。
cin.read(pch,2)とやればいいという事らしいんですが、これもよく分かりません。
どなたか教えてください。

Aベストアンサー

こんにちは。itohhといいます。

標準入力から2バイトずつ読みとりたいとのことですね?

サンプルを載せておきます。

#include <memory.h>
#include <string.h>
#include <stdio.h>
#include<iostream.h>

int main()
{
  char pch[3];
  
  memset(pch, 0x00, sizeof(pch) );
  
  cout<<"Input!\n";
  
  do
  {
    // NULLクリアしてから2バイト読み込む
    memset(pch, 0x00, sizeof(pch) );
    cin.getline(pch,3);
  
    cout<<pch<<'\n';
  }
  while(strlen(pch) == 2);

  return 0;
}

サンプルの説明をします。
各行の先頭には全角スペースを入れてインデントしていますのでコピペするときは
気をつけてください。
標準入力関数(cin)から帰ってくるタイミングはEnterキーを押下した場合です。
この前回答したcin.read関数よりcin.getline関数のほうが便利でした。すみません!
pchは、毎回、先頭から設定されますから配列数は3でOKです。

do whileループは、ループの最後に条件を判定します。

while(strlen(pch) == 2);
は、「読み込んだ文字列が2バイトの間、ループしなさい」という条件です。
なぜこの条件で良いのかというと漢字を入力していく場合、2バイトで1文字となりますが
半角の英数字を入力した場合で奇数バイトの入力を行ったとき、最後にpchに設定される文字
は1バイトとなります。(以下の例では[7]だけとなる)
ただし、2バイト文字(漢字)と1バイト文字(英数字)を混在して入力した場合は、2バイ
ト文字がばらばらになる可能性がありますので気をつけてください。


例えば、以下のように実行した場合。
>test
Input!
1234567   <---7の次にEnterキーを押下。
12
34
56
7


>
という結果になります。

最後に。
>標準入力から読み込むときとファイル指定する場合とではどのように違うんですか?
標準入力では、オープンすることはプログラムを実行した段階で自動的に行ってくれます。
しかし、ファイルから入力する場合は、プログラム内で明示的にファイルを指定してオープン
しなければ行けません。また、クローズも同様です。

こんにちは。itohhといいます。

標準入力から2バイトずつ読みとりたいとのことですね?

サンプルを載せておきます。

#include <memory.h>
#include <string.h>
#include <stdio.h>
#include<iostream.h>

int main()
{
  char pch[3];
  
  memset(pch, 0x00, sizeof(pch) );
  
  cout<<"Input!\n";
  
  do
  {
    // NULLクリアしてから2バイト読み込む
    memset(pch, 0x00, sizeof(pch) );
    cin.getline(pch,3);
  
    cout<<pch<<'\...続きを読む

Q手書き文字&イラストをデザインに取り込みたい

手書き、もしくはスタンプでの文字(やイラスト)を
イラストレーターやフォトショップに取り込んで、

その後、ソフトでまた加工、レイアウトしたりして

(文字の書いてある紙の色や質感などは残さずに、
文字(結構細かい)だけをとりこんで、
ファイルにレイアウトしたいのです。)

印刷物にしたいのですが、取り込み方の方法が
いまいちわかりません。。

どなたか知っている方、
いらっしゃいましたらよろしくお願い致します。


ちなみにIllustrator9.0、photoshop5.5を使用しています。

Aベストアンサー

流れとしては
1.手書き等の文字をスキャナで大きめに取り込む(フォトショップ)
2.取り込んだ画像を文字の部分とその他の部分がはっきり分かれるようコントラストを強くして保存。必要に応じて消去したり白黒2階調にしたり、抽出したり技術を要します。(フォトショップ)
3.さきほど保存しておいたデータをイラストレータの書類に配置。
オートトレースツールで輪郭をトレース。大きい画像のほうがトレースしたときのあらがでにくいです。うまくいかない場合環境設定のオートトレースのところを調節してください。このツール、非常にアバウトで、うまくいくかどうか疑問ですが・・・^^:
(イラストレーター)
4.貼り付けた画像を削除
こうすれば文字の部分が図形になるはずなので拡大縮小、変形など自由にできます。
なお、3の部分ですが、アドビのストリームラインというソフトをお持ちでしたらそちらで簡単に精密に輪郭をトレースできます。

Qプログラミングの問題で、キーボードからアルファベットの大文字を一文字読み込んで、その文字がAから数え

プログラミングの問題で、キーボードからアルファベットの大文字を一文字読み込んで、その文字がAから数えて何番目の文字であるかを表示するプログラムを作成の問題です
しかし、キーボードからは必ずアルファベットの大文字が入力されるものと仮定し、それ以外の文字が入力された場合や、2文字以上の文字が入力された場合の事は考えなくていいです
ヒントは、ASCIIコードでは、アルファベットの文字コードはアルファベット順に並んでます
作成できる方お願いします
c言語です

Aベストアンサー

いかのようにしてください。
#include <stdio.h>
int main()
{
int data;
int junban;
printf("アルファベットの大文字を一文字入力:");
data = getchar();
junban = data-'A'+1;
printf("入力された文字はAから%d番目です\n",junban);
return 0;
}

Qパソコン上で手書き文字などを保存したいのですが。

パソコン上での手書きについてお聞きします。

マウスで、簡単な文字なり絵を描いて、それを保存したいのです。
できるのでしょうか?

手書き認識ではありません。すなわち、今、IME、ATOK,を
使用しています。このソフトは、マウスで描いた手書き文字を
漢字等に変換してくれます。しかし、この「変換」まではいらないのです。
マウスで描いた手書き文字等をそのまま保存したいのです。

Vista(Home)を使用しています。
標準搭載の「Tablet PC 入力パネル」でできるでしょうか?

何か、いい方法はありますか?

どうかよろしくお願いいたします。

Aベストアンサー

文字や絵を何かの文章で文字同様に利用するわけでなければ画像として残しておくことはできます。No.1の方のお返事通りペイントでもいいですし、売っているソフトでもいいですし、VistaならWindows Journalというソフトが標準で搭載されていると思います。これを用いれば通常のノートと同じように保存しておくことができますよ。

Q改行までの一文字ずつのファイル読み込み

こんにちは。
C言語で現在ある入力ファイルを読み込んで計算し、
ファイルを出力するというプログラムを作成中なのですが、
ファイルを読み込む場合に、
改行までの値を一文字ずつ読み込むという作業をさせたいと思っています。
データは、
abc

defgh

ijk

.....

といった感じで入力されており、

while((c = fgetc(fp)) != '\n'){
fscanf(fp, "%c", &q[i]);
}

と書いたのですが、セグメント例外が出て強制終了してしまいます。
初歩的なことで申し訳ないのですが、教えていただきたいと思います。よろしくおねがいします。

Aベストアンサー

(1)fgetc() の時点でもう既に1文字データを読んでいるので、
fscanf() で'再度取得'することはできません。
q[i] には c の値をそのまま代入してください。

(2)i はインクリメントしなくてよいのでしょうか?

(3)行の終端 '\n' を検出して while を抜けた後、
printf 文などでそのまま表示させていませんか?
文字列 q[] の終端にヌル文字を入れる必要があります。
(q[]が予めゼロクリアされているのなら入れる必要はありません)

(4)それと、feof() でファイル終端をチェックしながらやった方がいいです。

オーバーフローを起こさない為に q[] には大きめの配列を確保してください。

char q[1024];
int i = 0, c;

while( !feof( fp ) )
{
  if( ( c = fgetc( fp ) ) == '\n' )
    break;
  q[i++] = c;
}
q[i++] = '0';

みたいな感じ。

(1)fgetc() の時点でもう既に1文字データを読んでいるので、
fscanf() で'再度取得'することはできません。
q[i] には c の値をそのまま代入してください。

(2)i はインクリメントしなくてよいのでしょうか?

(3)行の終端 '\n' を検出して while を抜けた後、
printf 文などでそのまま表示させていませんか?
文字列 q[] の終端にヌル文字を入れる必要があります。
(q[]が予めゼロクリアされているのなら入れる必要はありません)

(4)それと、feof() でファイル終端をチェックしながらやった方が...続きを読む

Q手書き文字入りの画像の作り方???

今日和<(_ _*)>

手書きの文字が入った待受画像を集めている
んですが、あれって どうやって作ってるんですか??

PictBear等、画像加工ソフトを使っていて、
手書き文字のフォントならDLしてあるし、
手書き風の文字で文字入れ出来る携帯サイトの文字
とも違うんですよね。。。

マウスで頑張ってみても上手く書けなくて、
細かい文字なんてムリ… ~(-゛-;)~

PCですか?
携帯だけで出来るのでしょうか??
スキャナで読み込んでるのでしょうか??
それとも、ペンタブが無くちゃ出来ませんか??

職人さんの中には作成方法までは答えない、って
人が多くて聞けずに ずっと気になってるんですが
職人さん達は どうやって手書きしているのか
教えて下さい(>_<)
お願いします☆

Aベストアンサー

やろうと思えば携帯で出来ます。

私はDoCoMo FOMA F900iTユーザーなのですが、此れにはタッチパネル機能があって、手書きできるんです。
絶対にやりたいなら買ってもいいと思いますが、発売からもう一年経っていて、しかも未だに高い。\20000overです。

QC++で、テキストファイルを一行ずつ読み込んで配列に入れたいのですが、

C++で、テキストファイルを一行ずつ読み込んで配列に入れたいのですが、うまくできません!

テキストには -3.0
       1.0
       2.0

・・・などのように一行に一つの数値が入って縦に並んでいます。
それをひとつずつ読み込み、新しい配列(たとえばa[])に順番にいれたいのです。

a[1]=-3.0,a[2]=1.0、・・・と
なるように。

どうか、この初心者にご指導お願いいたします。

Aベストアンサー

fgetsは文字列として読み込みます。これを数値に変換すれば、とりあえずあなたが望んでいることができます。変換はatofを使います。また、atofを使用するときは#include <stdlib.h>が必要です。
例えば
#include <stdlib.h>
  :
double d;
  :
d=atof("-3.0");
とすると、文字列の-3.0が数値の-3.0に変換されdに入ります。

fscanf関数で読み込んでもできますが、書式とデータがあっていないと上手くいかないので注意してください。

Q手書きの文字入力はどうするの?

ペイント文字の入力方法はわかりました。
手書きの文字を入力したい場合ははどうするんでしょ?

Aベストアンサー

> 手書きの文字を入力したい場合ははどうするんでしょ?

下記URLのページのような「手書き(風)文字」フォントを使って入力します。

「漢字も使える手書き風の日本語フォントのまとめ」
http://coliss.com/articles/freebies/freebies-handwriting-japanese-font.html

「フリーで使えるいい感じの手書き風フォント特集(日本語も)」
http://e0166.blog89.fc2.com/blog-entry-526.html

「手書き和文フリーフォント」
http://pet.24-7smile.com/font/cursive.html

QAVIファイルを読み込む方法

C++でプログラミング中の者です。
使っているコンポーネントはanimate、MediaPlayer、Edit、Botton、OpenDialogです。
OpenDialogで選択したファイル名をEditに表示させ、Mediaplayerを使ってAnimateに表示させるプログラミングをしたいと思っています。
なかなかうまくいかないので、アドバイスお願いいたします。

次のは現在のプログラムです。


#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//OpenDialog1->DefaultExt = "AVI";
//OpenDialog1->FileName = "*.avi";

if(OpenDialog1->Execute()==true){ // ファイル名が選択されたときに実行する処理 
Edit1->Text=OpenDialog1->FileName; //Edit1に選択したファイル名を表示

//Animate1->Active=LoadFromFile(OpenDialog1->FileName);
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1Change(TObject *Sender)
{
MediaPlayer1->Open();
MediaPlayer1->Play();
}
//----------------------------------

よろしくお願いします。

C++でプログラミング中の者です。
使っているコンポーネントはanimate、MediaPlayer、Edit、Botton、OpenDialogです。
OpenDialogで選択したファイル名をEditに表示させ、Mediaplayerを使ってAnimateに表示させるプログラミングをしたいと思っています。
なかなかうまくいかないので、アドバイスお願いいたします。

次のは現在のプログラムです。


#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource...続きを読む

Aベストアンサー

C++Builer5 しか手元にないので、違うかもしれません。

TAnimate を使う必用はないと思います。
TMediaPlayer の Display プロパティに入れるものは、なんらかのウィンドウなので、TPanel あたりを貼り付けて使用したらいいんじゃないでしょうか。

Edit1 は、ファイル名を表示させるだけにして、

if(OpenDialog1->Execute()==true){
Edit1->Text=OpenDialog1->FileName;
MediaPlayer1->FileName = OpenDialog1->FileName;
MediaPlayer1->Open();
}

として再生ボタンを押せば、一応再生されると思います。
ちょっと試した感じでは、指定したサイズで再生することができませんでしたが、何か方法があるか、もしくは無いのかわかりません。

少し話がかわりますが、C++Builder5 だと、DirectShow のオーバーレイ表示に対応していないので、負荷が高くなって再生時にコマ落ち、音飛びなどが発生していました。C++Builder6 で対応されているならばいいのですが・・・

C++Builer5 しか手元にないので、違うかもしれません。

TAnimate を使う必用はないと思います。
TMediaPlayer の Display プロパティに入れるものは、なんらかのウィンドウなので、TPanel あたりを貼り付けて使用したらいいんじゃないでしょうか。

Edit1 は、ファイル名を表示させるだけにして、

if(OpenDialog1->Execute()==true){
Edit1->Text=OpenDialog1->FileName;
MediaPlayer1->FileName = OpenDialog1->FileName;
MediaPlayer1->Open();
}

として再生ボタンを押せば、一応再生されると...続きを読む


人気Q&Aランキング

おすすめ情報