void func(int x)
{
 puts(&&&&&(x));
}


こんな風にして、func という関数の引数に1が与えられたら、
putsを実行できるように1を文字列(つまり"1")に
変換してくれる&&&&&(x)という関数あるいは
マクロが作成できないでしょうか?


この質問をした目的は、変数の値によって、たくさんある
ファイルのどれを開くか決定したいという所からきました。
fopen の引数が char *abc なんですもの。

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

A 回答 (2件)

何を答えて良いか良く分からんのですが、適当に想像して


幾つか答えます。

・変数の値によって、どのファイルを開くかを決めたい

が最終的な目標なのですよね?
であれば、

  FILE* f;
  char* filename;
  switch (x) {
  case 1: filename = "filename1"; break;
  case 2: filename = "filename2"; break;
   ...
  }
  f = fopen(filename, "r");

んな感じで良いのですよね。


・理由はどうあれ、数字を文字列にしたい

なら sprintf() を使います。

  int x;
  char buf[256];
  sprintf(buf, "%d", x);

です。
    • good
    • 0
この回答へのお礼

ひぇぇ、そんな便利な関数(sprintf)があった
なんて全く知りませんでした。

おかげ様で私のプログラミング方法が大きく
改良されそうです。本当にありがとうございました。

お礼日時:2001/04/11 14:19

こんにちわ。


質問中の&&&&(x)というのは関数の名前でよろしいのすね。(Cですと、&は対象とする変数のアドレスを表しているはずだったと思ったものですから。)
変数が1桁の場合でしたら、以下の方法で文字にすることが出来ます。
#define ITOA(a) ('0' + a)
また、一般的にはsprintfを利用することによって、実現できると思います。

ただ、標準出力に出力するだけでしたら、printf文だけでいいのではないでしょうか?
printf("%d",x);
    • good
    • 0
この回答へのお礼

Cの話で安易に&を使ってはいけませんでしたね。(反省)
ご指摘のとおりsprint文で解決できました。
たいへんありがとうございました。

お礼日時:2001/04/11 14:20

お探しの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はイラストレーターのようにフォントをアウトライン化してベクターオブジェクトとしていじることができます。

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

Qint main()、void main()、void main(void)、int main(void)

今日、大学でC言語の講義の時間、先生が、

#include <stdio.h>

void main(void){

}

と宣言してプログラムを書くと教えていました。
main関数には、
main()
void main()
void main( void )
int main()
int main( void )

と、人によりいくつかの描き方があったりします。
どれが本当は正しいのでしょうか?
void mainはすべきではないとなんかの本で読んだのですが・・。

Aベストアンサー

通称C89という以前の言語規格(現行コンパイラの多くが準拠)では、下記のいずれかが正しい。
int main(int argc, char *argv[])
int main(void)

但し、最新のC言語規格(通称C99)では、
<ISO/IEC9899:1999>
or in some other implementation-defined manner.
</ISO/IEC9899:1999>
となっているので、処理系が戻り値のvoidを認めていればvoidも可。
# 組込み系などで戻り値を使わない環境もあるためでしょうか。

なので、コンパイラのマニュアルで戻り値のvoidにしていい/しろと書いてない限り、
voidは言語仕様的には正しくない。(でも動くものもある)

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

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

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

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

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

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


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

Aベストアンサー

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

Qvoid (*signal(int signum, void (*handler)(int)))(int);

の解釈を教えてください
最後の「(int)」については詳しくお願いします

Aベストアンサー

signalが

(1)1つ目の引数の型:int
(2)2つ目の引数の型:引数がintで戻り値がvoidである関数へのポインタ
(3)戻り値の型:引数がintで戻り値がvoidである関数へのポインタ(2と同じ)

を満たす関数である事を宣言しています。最後の(int)はsignalの戻り値の
関数ポインタがint型の引数を持つ事を示しています。

「引数がintで戻り値がvoidである関数へのポインタ」の型をHANDLERと表すと

HANDLER signal(int signum, HANDLER handler);

となります。

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

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

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

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

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

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

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

Aベストアンサー

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

Qchar型+char型ってint型? if(char型==int型)?

C言語の「汎整数拡張(インテグラルプロモーション)」というものに関するものだと思います。

char型とchar型を加えた結果は、char型でしょうか。それともint型でしょうか。
(下のプログラムの
printf("sizeof(a[0]+a[1])は%d\n", sizeof(a[0]+a[1])); /* char型+char型 */
という部分の結果は4なので、int型と考えるべきなのかな。)

私は、char型とint型の加算の結果はint型だと思っていましたが、
char型とchar型の加算の結果はやはりchar型だと思っていました。
(それが間違えているのでしょうか。)


if(a[0]==i) /* char型とint型の比較(?) */
の部分では、左辺はchar型、右辺はint型ですが、このように型の違う変数を比較しても文法上構わないのでしょうか。
(私は、「比較は必ず型の同じもの同士でしかできない」と思っていました。)
左辺はchar型のように見えて、じつはint型ですか。


#include <stdio.h>
int main(void)
{
char a[4];
int i=77;
printf("sizeof(int)は%d\n", sizeof(int));
printf("sizeof(char)は%d\n", sizeof(char));
printf("sizeof('M')は%d\n", sizeof('M'));
printf("sizeof(a[0])は%d\n", sizeof(a[0]));

a[0]='M';
a[1]=7+6;
a[2]=a[0]+a[1];
printf("sizeof(a[0]+a[1])は%d\n", sizeof(a[0]+a[1])); /* char型+char型 */
printf("sizeof(+a[0])=%d\n", sizeof(+a[0]));

if(a[0]==i) /* char型とint型の比較(?) */
puts("a[0]==i");
else
puts("a[0]!=i");

return(0);
}

ちなみにワーニングもエラーもなんにもでません。

C言語の「汎整数拡張(インテグラルプロモーション)」というものに関するものだと思います。

char型とchar型を加えた結果は、char型でしょうか。それともint型でしょうか。
(下のプログラムの
printf("sizeof(a[0]+a[1])は%d\n", sizeof(a[0]+a[1])); /* char型+char型 */
という部分の結果は4なので、int型と考えるべきなのかな。)

私は、char型とint型の加算の結果はint型だと思っていましたが、
char型とchar型の加算の結果はやはりchar型だと思っていました。
(それが間違えているのでしょう...続きを読む

Aベストアンサー

「sizeof 単項式」について補足です。

これは sizeof 演算子が「単項演算子」であるために書かれたものだと思われます。
例えば同様に単項演算子である ++ も、「++ 単項式」です。

では単項式とは何なのかというと、これは以下のようなものを指します。(抜けがあるかもしれませんが。)
・定数
・名前(変数名や関数名など)
・( 式 )
・後置式

( 式 ) はおなじみの「式の結果を返す」ものですが、実はこれ全体で単項式です。
本来「sizeof 単項式」では ( ) を必要としないので、sizeof より優先順位の低い演算子を含む式を裸で渡すことはませんが、( ) で囲めばどんな式でも書けるわけです。

後置式は「配列構文によるアドレス参照式」や「関数呼び出し式」、「メンバ参照式」「後置型インクリメント/デクリメント式」です。
なので、
> sizeof(a[0])
> と書いたら、[ ] という演算子は2項演算子だから、a[0]は単項式になっていない
は、わざわざ ( ) で囲まず sizeof a[0] と書いても、正しい単項式なので問題ありません。
(これらの演算子は、全て sizeof より優先順位が上になっています。)

先に ++ も単項式を取る、ということを書きましたが、++ だって
  ++*(p + n)
のような記述が通るのだから、sizeof でも問題がなくて当然です。

また、例えば ++ では「オペランドは左辺値でなければならない」という原則があり、左辺値でない式に ++ を適用するとコンパイルエラーが発生します。
しかし、sizeof に「オペランドはオブジェクトでなければならない」などという原則を聞いたことがありません。
無論コンパイルエラーも起きませんし、期待通りに式の値のサイズが返ります。
「式の値のサイズ」というのはコンパイル時に判明しているものなので、取得できて当然といえば当然ですが、これがCで定められた仕様かどうかというのは残念ながら見つけることはできませんでした。
ただし、質問にあるような sizeof の文法は全て正しく、警告が出ないのは仕様通りだというのは間違いありません。

「sizeof 単項式」について補足です。

これは sizeof 演算子が「単項演算子」であるために書かれたものだと思われます。
例えば同様に単項演算子である ++ も、「++ 単項式」です。

では単項式とは何なのかというと、これは以下のようなものを指します。(抜けがあるかもしれませんが。)
・定数
・名前(変数名や関数名など)
・( 式 )
・後置式

( 式 ) はおなじみの「式の結果を返す」ものですが、実はこれ全体で単項式です。
本来「sizeof 単項式」では ( ) を必要としないので、sizeof より優...続きを読む

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

今日和<(_ _*)>

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

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

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

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

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

Aベストアンサー

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

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

Qvoid func( void )について

void func( void )について

右側のvoidは引数がないという事は分かったのですが左側の
voidの意味は「値を返さないreturn型に用いる」とあったのですが
値を返さないreturnは使う意味はあるのでしょうか?
またどういった時に使うのでしょうか??

あと return 0 と return の違いは何なのでしょうか??

ご教授よろしくお願いいたします。

Aベストアンサー

#2,4です。
C言語には必ず最初に起動されるmainという名前の特別な関数が必要です。
前回書いた関数は関数名がfuncのため、「最初に起動される関数がないよー」とのことでコンパイルエラーがでます。

というわけで、以下のように変えていただければ良いと思います。(全角スペース入れてないです)

#include <stdio.h>

void func(int n){
int i = 1;
int sum = 0;
if( n <= 0 )
{

printf( "1以上の値を指定してください\n" );
return;
}

while( i <= n )
{
sum += i;
i++;
}
printf( "結果は%dです\n", sum );
}

int main(){
func();

return 0;
}


main関数はint型の値を返すのが好ましいとされているので何らかの値を返そうということで0(エラーがないという意味かな)を返すのがほとんどです。慣例と思っていただいても良いと思います。
もちろん、他の関数は値を返す必要がなければ、
void func(void)のように定義してやればいいです。

#2,4です。
C言語には必ず最初に起動されるmainという名前の特別な関数が必要です。
前回書いた関数は関数名がfuncのため、「最初に起動される関数がないよー」とのことでコンパイルエラーがでます。

というわけで、以下のように変えていただければ良いと思います。(全角スペース入れてないです)

#include <stdio.h>

void func(int n){
int i = 1;
int sum = 0;
if( n <= 0 )
{

printf( "1以上の値を指定してください\n" );
return;
}

while( i <= n )
{
sum += i;
i++; ...続きを読む

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

Qvoid **(char や intのアドレス混在)について

printf("%d",voidd[0]);にてほしい値が表示されません。
どうすればいいですか?
よろしくお願いします。
#include<stdio.h>
int main()
{
/*
Calc.StringExpressionGet("1+((2+34)*2-111*77)*5-67*8/90");
Calc.StringExpressionResolve();
Calc.Print();
*/
int num[3];
num[0]=111;
num[1]=222;
num[2]=333;
char str[4]="ABC";
void **voidd;
voidd=new void*[6];
voidd[0]=(void *)&num[0];
voidd[1]=(void *)&str[0];
voidd[2]=(void *)&num[1];
voidd[3]=(void *)&str[1];
voidd[4]=(void *)&num[2];
voidd[5]=(void *)&str[2];
printf("%d",voidd[0]);
getchar();
return 0;
}

printf("%d",voidd[0]);にてほしい値が表示されません。
どうすればいいですか?
よろしくお願いします。
#include<stdio.h>
int main()
{
/*
Calc.StringExpressionGet("1+((2+34)*2-111*77)*5-67*8/90");
Calc.StringExpressionResolve();
Calc.Print();
*/
int num[3];
num[0]=111;
num[1]=222;
num[2]=333;
char str[4]="ABC";
void **voidd;
voidd=new void*[6];
voidd[0]=(void *)&num[0];
voidd[1]=(void *)&str[0];
voidd[2]=(void *)&num[1];
voidd[3]=(void *)&str[1];
voidd[4]=...続きを読む

Aベストアンサー

No.1です。すみません、間違えました。

*(int*)(voidd[0])

です。


人気Q&Aランキング

おすすめ情報