1 :
デフォルトの名無しさん :
03/01/16 00:56
2 :
デフォルトの名無しさん :03/01/16 00:57
( ゜Д゜)ポカーン・・・
__ l⊆⊇`ヽ ≡ ヤホー----イ (´D`Lノ ≡ m=○=mノ) ≡ もうスレ立ってた気がしる〜 _/_/(「_ノニコ ≡ ( (0)=(__)0) ≡(´⌒(´⌒;;
4 :
デフォルトの名無しさん :03/01/16 01:04
sss
>1=6 おまえのチェックミスを棚に上げんな
14 :
デフォルトの名無しさん :03/01/17 20:37
void func(char **); main() { char a[100][100]; func(a); return 0; } void func(char **a) { } ↑のようにやったらプログラムが暴走したんですが 対処法はいかに?
void func(char a[][100])
C言語を応用できる言語は何ですかね?
PHP
>>18 PHPやったことないんですが・・ほんとに応用できるのですか?
20 :
デフォルトの名無しさん :03/01/17 21:27
int a = 4.3; abs(3.5); とかのミスってlintで検出できますか?
C言語の感覚で書かれたC++はクソコード
C++はオブジェクト指向なのになんでCが応用できるのかと小一時間(略
逆にCに応用できる言語は何ですか?
27 :
デフォルトの名無しさん :03/01/17 21:59
awk
C++
C++言語の感覚で書かれたCはクソコード
結局、CとC++は、繰り返しや比較などが同じなだけであって 設計方法は全然違うわけだな。
32 :
デフォルトの名無しさん :03/01/17 22:17
>>22 ありがとう。でもそこに書いてあることをほとんど
やってくれなかった。
質問!! C言語ってDVDなどにあるプロテクトもC言語に一種ですか?
教えてください Cでsnprintfを自作することになりました。 参考になる資料とかありましたら教えてください。 フリーで使えるソースが何処かに落ちていると良いのですが。
>>35 レスどうもです。
VC++見てみたのですが、うーん難しい事してるんですね。
FILEポインタの中身なんて、いじった事無いです。
これprintf系で汎用的に使う為にこんな感じで実装してるのかなー?
そのまま使いたいところだけど、多分ライセンスで引っかかりそう・・・
>>36 つーか、なんで...
> Cでsnprintfを自作することになりました。
なんてことやってんの ?
40 :
デフォルトの名無しさん :03/01/18 16:00
win上でgccを使っているのですが、 *.libのファイルを*.oなんかに変換できますか?
>>40 別に *.lib のままでいいのでは?
何か不都合でもあるのん?
お答えありがとうございます。 ファイルフォーマットが認識されない、といわれたので。 単に対応していないだけなのでしょうね。 まあ、至急必要なものでもないですし。。。
>>42 あ、すまん。
*.a じゃなくて *.lib か。
なるほど。
分離ってできたっけかな...。
>>42 win 上の gcc とは何者で、その *.lib はどっから持ってきたものかを書けよ。
45 :
デフォルトの名無しさん :03/01/18 18:04
これからC言語を始めてみようという初心者です。 LSI CってのをDLしてみたんですが、使い方がよく分かりません。 参考書買ってみたんですが動かし方については詳しく載ってませんでした。 どなたか詳しく教えていただけませんか?
46 :
デフォルトの名無しさん :03/01/18 18:08
lsc ファイル名 以上
47 :
デフォルトの名無しさん :03/01/18 18:28
ごめん、うそ>46 lcc ファイル名 lcc.exeにちゃんとパスを通すこと あと、_lccも自分の環境に合わせて編集すること あとは、read.me読めば書いてるよ
48 :
デフォルトの名無しさん :03/01/18 20:04
えっと・・・ まだよくわからないんですが、 MS-DOSを開きますよね。 lcc filename しますよね。 次は何をすれば動きますか?
>>48 エラーメッセージが出なければ、もう何もしなくていい。
やりかたは分かったんですが、 コマンドまたはファイル名が正しくありません とでます。 どうすればいいですか? しつこくてすいません。。。
51 :
デフォルトの名無しさん :03/01/18 23:11
>>50 MS-DOSのコマンドラインから
SET PATH=%PATH%***
と入力して
lcc filename
としてみてください。***の部分はパス名(C:\...\LCC\BIN;)です。
ちなみにBINはBINARY(二進)の略で実行可能ファイルが入ったフォルダの
名前として常識です。わかりましたか?
52 :
デフォルトの名無しさん :03/01/18 23:15
>>50 51ですが追伸です。参考になればいいのですが、_lccファイルです。
# LSI C-86 compiler's configuration file
-DLSI_C
-XC:\LSIC330C\BIN -LC:\LSIC330C\LIB -IC:\LSIC330C\INCLUDE -T -O
-acdos.obj $LSICOPTS
Command line argument will be inserted here
-lknjlib -ldoslib -v
53 :
デフォルトの名無しさん :03/01/18 23:20
うぜぇ Cそのものとは関係ねえ事書くな
54 :
デフォルトの名無しさん :03/01/18 23:24
∧ ∧___ ダッコ♪ /(*゚ー゚) /\ /| ̄∪∪ ̄|\/ | |/  ̄ ̄ ̄ ̄
56 :
デフォルトの名無しさん :03/01/18 23:56
セグメンテーション違反ですってなんですか?
57 :
デフォルトの名無しさん :03/01/18 23:58
>>56 変なとこに書き込んだりしたときに良く出る。
どこが間違ってるのかさっぱりわからんです...
変なとこをかいたりしたときに良く出る。
>>58 セグメンテーション違反は一番良く見るバグだと思うので、
頑張って間違った箇所を探しませう。
・配列の添え字が変な位置を指しているかどうか
・ポインタの扱いが間違っているかどうか
の2箇所を重点的に調べましょう。
>>60 ありがとうございます。
がんばって探してみます。
卒論間に合うか不安。。。
>>63 !?そ..それはいったい....?
emacsとかについてるやつですか?
>>65 emacs見てみたらgdbなるものを発見いたしました!
しかし英語表記のため使いかたがいまいちわからぬ。
調べてみます。。。
67 :
デフォルトの名無しさん :03/01/19 00:33
memsetでdouble型の配列の値を全てdouble x; にすることはできますか?
69 :
デフォルトの名無しさん :03/01/19 00:41
了解!!
デバッガという言葉も知らない奴が卒論までにgdbを使えるわけがない。
デバッガgdbの簡単な使い方。 まずプログラム作成 hoge.c #include <stdio.h> main(){ int *a = NULL; *a = 0; } コンパイル時に -g オプションをつける gcc -g -o hoge hoge.c 実行プログラムをgdbの引数に指定 gdb hoge gdbのプロンプトが出たらrunを実行 (gdb) run フォールトエラーなどが出たら、理由と場所を教えてくれる。 Program received signal SIGSEGV, Segmentation fault. 0x8048468 in main () at hoge.c:5 5 *a = 0; 終了するときはquit (gdb) quit
72 :
デフォルトの名無しさん :03/01/19 14:36
初歩的な質問で申し訳ない。 ファイルからコンソール画面に一行一行読み込んで表示するという、 超基本的なプログラムを書いてみました。 そこで質問なのですが、今のままでは、改行は何も表示されない空白で表されますよね。 この改行部分に「----ここは改行です-----」といったメッセージを表示したいのですが、 どうすればいんでしょう?とりあえず自分が書いたものを↓に。 #include <stdio.h> void main(){ FILE *fp; char a[20]; fp = fopen("text.txt" ,"r"); do{ if (fgets(a ,20 ,fp) == NULL){ printf("//////終わりです//////\n" ); break; }else{ if (a == ""){ ★★★問題の箇所です printf("-----ここは改行です-----"); printf("%s\n" ,a); }else printf("%s\n" ,a); } }while(1); fclose(fp); return; }
>>72 if(a=="") を if(*a=='\0') に変更すればいいのでは?
>>72 まず、fgets() って読み込んだ改行をそのまま a[] に入れちゃうから、
printf("%s\n", a) なんてやると、一行毎に空行が入るけどいいの ?
あと、要件として行が改行のみなら、"----ここは改行です-----" と表示すると言うのなら、
>>73 でいいけど、「何も表示されない空白」の代わりに"----ここは改行です-----" と表示すると言うなら、ちょっと難しいぞ。
>>72 if (strlen(a))
a[strlen(a) - 1] = '\0';
ってのを付け加えた方がいいかも。
76 :
デフォルトの名無しさん :03/01/19 15:56
if (strcmp(a, "\n") == 0) にすればええんでない? まぁ簡単に if (a[0] == '\n') でもいいか。 あとは ・改行の場合はわざわざ a を表示しようとする必要は無い ・do-while じゃなくて、while 内で fgets を使ったので構わない。 ・fp が NULL かどうかのチェックは入れる癖をつけておくが吉。 ・最後の行にのみ改行が無い場合があることを考慮するべし。 ってとこでしょうか。
77 :
デフォルトの名無しさん :03/01/19 15:58
>>72 #include <stdio.h>
int main()
{
FILE *fp = fopen("text.txt", "r");
char a[20];
while (fgets(a, 20, fp) != NULL) {
if (a[0]=='\n')
printf("-----ここは改行です-----\n");
else
printf(a);
}
printf("//////終わりです//////\n" );
fclose(fp);
return 0;
}
>>77 printf(a); と printf("%s", a); は違う。
>>78 ごめんうっかりしてた。
printf(a)はprintf("%s", a)に読み替えて。
>>72 あなたのコードを見て思ったことを書きます。
だいたい
>>76 さんが言ってくれてるけど。
・fgetsは改行も読み込むのでprintf("%s\n",a)でなくprintf("%s",a)。
・0回以上の繰り返しのときは基本的に, do-whileでなくwhileを使う。
・文字列の比較はstrcmpを使う。a==""としても文字列の比較ではなく
文字列のアドレスの比較が行われるだけで無意味。
あと
>>77 のコードでも19文字ジャストの行を読み込むと誤動作します。
19文字ジャストの行を読むと, 次回のfgetsで改行文字だけを読み込む
ので, 文末の改行と空行との区別がつかなくなるためです。
a[]の配列を十分大きくとることで簡単に解決します。
> printf("%s", a) 漏れは fputs(a, stdout) のが好きだ。
81 :
デフォルトの名無しさん :03/01/19 18:46
72です!皆さんのご指摘でうまく動くようになりました。
質問の箇所だけではなく、他の様々な部分まで指摘してもらって、感謝してます。
判定文ごとwhileの中に入れろとか、
>>77 さんの19文字ジャストでおかしくなる・・・とかの話は、
読みながらハタと手を打ってしまいました。
>>80 速度面で有利とか、エラーでにくいとか、そういったことが何かあるんですかね?
単に好みの問題でしょうか。
速度は大抵fputsのほうが速いだろう。 必ずじゃないけど。
83 :
デフォルトの名無しさん :03/01/19 22:00
教えてください! return ( x1 >= x2+width2 || x1+width1 <= x2 || y1 >= y2+height2 || y1+height1 <= y2 ) ? false : true; ってどういうことですか??
>>83 if(x1 >= x2 + width2) return false;
if(x1 + width1 <= x2) return false;
if(y1 >= y2 + height2) return false;
if(y1 + height1 <= y2) return false;
return true;
と同じだよ。多分2つの領域の重なり判定と思う。
ふむふむ 確かゲーム系で、当たり判定のところっぽい関数だったからそうなのかも! 「||」って、「OR」だったと思うのですが、三項演算子って順々に判定してfalseやtureを返すんですか? なんか質問部分がわかりにくいーー・・・
>>85 > 三項演算子って順々に判定してfalseやtureを返すんですか?
三項演算子 xxx ? yyy : zzz は、単に xxx の値の真/偽によって yyy か zzz を返すだけ。
順々に判定するのは、|| (論理 OR 演算子) の方。
xxx || yyy は、xxx が真なら yyy を実行しないで 真 を返す。
(短絡演算で、ググッてくれ。)
ありがとう!ググってきましたー。なるほど。よくわかりました お世話になりました!
88 :
デフォルトの名無しさん :03/01/19 22:50
Cで書いたプログラムなんですが、コンパイルは通るのに実行するとエラーが起こります。 デバッグ(と呼んでいいのかどうか分かりませんが)したいのですが、 どのように行うのでしょうか。 コンパイラはgccをMS-DOS上(MinGW)で使っています。
>>88 そんなのソースださないと分かるわけ無いだろ。
せめてどうエラー出るのか書けや。
90 :
デフォルトの名無しさん :03/01/19 23:01
>>89 やはりソースによって変わってくるのですね。
一般的にどのようにやっていくのかお聞きしたくて、書き込みました。
エラーは、エラーログを作成しています。というメッセージと共に
プログラムが強制終了します。
>>90 > エラーは、エラーログを作成しています。というメッセージと共に
> プログラムが強制終了します。
.... で、そのエラーログとやらはあるのか ?
プログラムを少しづつ削っていって、エラーが出なくなったら直前に 削ったところが、エラーに関係するところだ。大抵は、
つーか、エラーログ出てるなら読めよとりあえず(w
>>88 gdb(gcc用のデバッガ)ないの?
なければprintfとassertと根性でバグ捜せ。
95 :
デフォルトの名無しさん :03/01/19 23:19
>>91 >>93 エラーログの読みかたわからないです。スマソ
実行したフォルダを探しても該当するようなファイルが見つかりません。
>>94 gdbというものは落としてすぐ使えるでしょうか?
探してみます。明日提出の課題なんです。
>>92 やはりそれですか・・・
皆さんどうもアリガd
>>95 おいおい、システムのエラーログに記録されとるんだろ。
実行フォルダには無いぞ。
97 :
デフォルトの名無しさん :03/01/19 23:26
>>96 見方教えてください。
お手数かけてほんとスマソ
>>97 だから、OSは何なんだよ(藁
何も情報書かずに推測するスレか、ここは。
恐らくLinux系だろうけど、君じゃ無理だ多分。その様子だと。
>>98 >>88 もアフォだけど、お前も相当だな。
> コンパイラはgccをMS-DOS上(MinGW)で使っています。
素の MS-DOS はエラーログなんか記録しないだろうから、どうせ Windows の MS-DOS プロンプトじゃねーのか ?
どうせ MAP ファイルなんか見れないんだから、素直に
>>92 か
>>94 の2行目に従えよ。
100 :
デフォルトの名無しさん :03/01/20 00:06
100desuyo
>>77 > printf("-----ここは改行です-----\n");
printf("-----ここは空行です-----\n");
102 :
デフォルトの名無しさん :03/01/20 11:39
厨質問で申し訳ないのですが while(fgets(buf, 256, infp) !=NULL){ hoge = atoi(buf); printf("hoge=%d\n",hoge); } とやりますと、全部のhogeが0となってしまいます。 読みこんだファイルは4行に渡る30バイトほどの テキストファイルなのですが・・・ どなたかご教授オネガイイタシマス。
>102 入力ファイルの内容を晒してみ?
104 :
デフォルトの名無しさん :03/01/20 12:30
>102 printf("%s",buf); でちゃんと、bufに文字列読み込まれてるか確認してみる。 103の言うとおり、どんな入力ファイルやねんやろ・・・ atoi関数の使い方もわかっていますか?
105 :
デフォルトの名無しさん :03/01/20 13:21
103,104サソ アリガdございます。 テキストファイルを 345504 45454 3920 5503 こんな感じに直したらできますた。 文字が入ってたのがいけなかったのでしょうか? atoiを使う際に"x"などの文字が混入していた際に 無視する方法ってあるのでしょうか? ほんと厨ですみませそ。。。
106 :
デフォルトの名無しさん :03/01/20 15:55
あるプログラムを作成しました(長いので載せれません)。 そのプログラムはある配列変数の要素を小さく設定した時は 問題なく動いてくれるのですが、大きくするとsegmentation Failureがでます。 gdbをつかってデバッグしました。そしたら、 (gdb) core a.out.core Core was generated by `a.out'. Program terminated with signal 11, Segmentation fault. Reading symbols from /usr/lib/libm.so.2...(no debugging symbols found)...done. Reading symbols from /usr/lib/libc.so.4...(no debugging symbols found)...done. Reading symbols from /usr/libexec/ld-elf.so.1...(no debugging symbols found)... done. #0 0x80489ab in main () (gdb) where #0 0x80489ab in main () #1 0x8048506 in _start () となり、何行目に問題があるのか?という情報は教えてくれません。 どこがおかしいか、長年の経験のある皆様にお聴きしようと思ったしだいです。 助けて下さい。
(gdb) where #0 0x80489ab in main () #1 0x8048506 in _start () が問題なんですよね? これってどういう意味ですか?
どんなプログラムかも配列をどういうふうに使ってるのかも要素数をどの程度にしたのかもわからないのに答えろというのか・・・
109 :
デフォルトの名無しさん :03/01/20 16:00
>105 atoi()はスペースと+-以外の文字とぶつかるとそこで終了しちゃいますよ もしかしたら、文字を取り除く関数があるかもしれないけど 自分で取り除くコード書いたほうが柔軟性あっていいかもしれないですね
>>108 じゃーのせます。
連続投稿なるけどごめんなさい、どこが悪いか全く分りませんので
enumとmainだけとりあえず載せます
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
enum {
MAX_NODE = 87381, /* 自分で計算 (( pow(4,MAX_DEPTH) -1 ) / 3) */
MAX_RES = 81, /*ネットワーク内のリソースの種類*/
MAX_DEPTH = 9, /*木の深さ*/
MAX_SIM = 100, /*シミュレーション回数*/
REPEAT = 2 /*繰り返し数 シミュレーション数*/
};
main() { int i,j,k,query,query_number,num_reg,sum_query_number,sim_num,sum_num_reg,num_resource[MAX_RES],node[MAX_NODE][MAX_RES],rt[MAX_NODE][4][MAX_RES]; double adv_num_reg,adv_query_number; FILE *outp; srand((unsigned int)time(NULL)); sum_query_number = 0; sum_num_reg = 0; for( sim_num = 0 ; sim_num < REPEAT ; sim_num++ ){ /*ノードの登録を初期化*/ node_initialize(node); /*ルーチングテーブル初期化*/ rt_initialize(rt); /*リソース数を決定*/ for(i=0; i<MAX_RES; i++){ num_resource[i]=(int)(num_normalcurve() + 0.50); /*printf("%d\n",num_resource[i]);*/ } /*各ノードごとの各リソースの登録情報をセット*/ distribute(node,num_resource); /*MATRIX表示*/ /*print_matrix(node);*/ for(k=0;k<MAX_SIM;k++){ /*QUERY決定*/ query = query_produce(); /*printf("query %d\n\n",query);*/ /*routing開始*/ route(query,node,rt);}
query = 3; /*count the number of the query 3*/ query_number = count_qnum(query,rt); /*rt表示*/ /*print_query(query,rt);*/ sum_query_number += query_number; printf("query_number %d",query_number); /*ノードAの登録数*/ num_reg = sum_reg_num(rt); sum_num_reg += num_reg; printf("registration_number %d",num_reg); } adv_query_number = (double)(sum_query_number) / (double)(REPEAT); adv_num_reg = (double)(sum_num_reg) / (double)(REPEAT); printf("adv_query_number %f",adv_query_number); printf("adv_num_reg %f",adv_num_reg); }
70〜140MBもスタックに取るつもりかよ
>>113 そこが問題ですか?enumんとこですよね?
age
>>116 何だよ、解決したんじゃなかったのか?
スタックに取りすぎだっつってんの
int i,j,k,query,query_number,num_reg,sum_query_number,sim_num,sum_num_reg,num_resource[MAX_RES],node[MAX_NODE][MAX_RES],rt[MAX_NODE][4][MAX_RES];
これがどれほど巨大なメモリを必要とするかわかる?
>>117 どうやったらいいのでしょうか?
main関数から変数をおいだせばいいのでしょうか?
配列をなくせばいいのでしょうか?
enumは関係ないのですか?
まず第一にバッファの使い方を見直すべし んな巨大な配列が本当に必要なのか? どうしても必要ならmallocなり何なりでヒープに取るべし enumの値を配列サイズに使ってんだから関係あるに決まってる
>>119 分かりました。
配列を変更するのは難しそうですので、
別の変数を直して行きます。
mallocとか勉強します
121 :
デフォルトの名無しさん :03/01/20 17:55
ぷろぐらむの実行がいつまでたっても終らん。 実行を早くする基本は何?
123 :
デフォルトの名無しさん :03/01/20 18:14
>>109 さそ
ありがdございます
while(fgets(buf, 256, ifp) !=NULL){
for(i=0; i<strlen(buf); i++){
if(isalpha(buf[i])){
こんな感じでアルファベットだったらbufからその文字を省くといった
仕様にしたいのですが、bufからその文字だけ省くことなんて
可能なのでしょうか?
再度の糞厨質問ですいません。
ご教授オネガイイタシマス。
124 :
デフォルトの名無しさん :03/01/20 18:21
VC++買おうと思って製品情報見てるとVisual Studio .NETのページに行っちゃうんですが Visual Studio .NET て何ですか?
126 :
デフォルトの名無しさん :03/01/20 18:35
11万円もするよぉ!うわぁーぁぁん
127 :
デフォルトの名無しさん :03/01/20 18:43
ある4つほどの配列をファイルに書き込もうとして、 fwriteを使って書き込みました。 別のプログラムでそれを読み込もうとしてfreadで読み込んだのですが、 読み込んだ配列の中身が途中から0になってしまっています。 具体的には a[130][100],b[100][30],c[100],d[30]を書き込んで 読み込んだaおよびbが途中から0になっていました。 けれどもcとdは正常に読み込めていました。 エラーチェックはしていますがエラーは出ていません。 プログラムも見直していますが、さっぱりわかりません。 どなたかご教授願いまつ。
>>121 実際のものより小規模なモデルを作り、プログラムが正しく動作しているかを検証する。
各処理の実行時間を調べて、時間がかかっている部分を高速化する。
(但し、複雑になるような高速化は避ける。)
いくつかの規模のモデルを実行して、時間を測定し、実際のモデルでどれだけ時間が
かかるかを見積もる。
時間がかかり過ぎるようなら、別のアルゴリズムを探す。
別のアルゴリズムが見つからなければ、複雑な高速化に取り組む。
それでも時間がかかり過ぎるなら、プログラムを作ることの意義を見直す。
>>123 省いた後、隙間を詰める。
もしくは、省く文字以外を別バッファにコピーする。
131 :
デフォルトの名無しさん :03/01/20 19:02
>>123 #include <ctype.h>を追加して、
char tmp[256], *src, *dst ;
for ( src=buf, dst=tmp; *src; src++ ) {
if ( isdigit( *src ) || *src=='-' || *src=='+' )
*dst++ = *src ;
}
*dst= '\0' ;
hoge= atoi( tmp ) ;
但し、これだと "-1 2 +3" が "-12+3" になってしまうから
それいう可能性があるなら加工しる!
123で、"アルファベットだったらその文字を省く" って言ってるから、
if ( !isalpha( *src ) )
*dst++ = *src ;
のほうがいいかな。
先頭の空白は無視するというatoiの仕様を利用して、余計な文字をスペースに置き換えたら?
「アルファベットだったら」じゃなくて「数字か+,-でなかったら」の方がいいと思うけど。
>>127 ファイルサイズが期待した通りになっているかを確認。
ファイルの中を見てみて、0が書かれているようなら、
fwrite、そうでなければ読み込みがfreadを見直す。
たぶん、二次元配列のサイズ計算が間違えているんだと思う。
途中からとかではなくて、実際にどこから0が書かれているかを
調べるのもいいと思う。(地道なことをちゃんとやらんと)
>>127 読み込むときも書き込むときもバイナリモードにした?
あ、UNIX系なら関係ないけど。
>>128 全部いらなくても、商利用したいときとか…
ところで、シェアウェアって、やっぱ商利用?
細かい訂正ですが、b[100][32]でd[32]でした。
>>134 カエレ!(・∀・)とか言われそうですが、
ファイルサイズの計算はどうすればいいのでしょうか・・・
バイナリファイルの中身はどうやって見ればいいのでしょうか・・・バイナリエディタですか?
二次元配列のサイズ計算というのがよく分からないのですが・・・
今いろいろと検索していますがよく分かりません・・・
aはa[30][0]から0になっていて、bはb[7][6]から0になっています。
>>135 WindowsのCygwinってやつでやってます。
一応fopenにはwbやrbはちゃんと書いているので
大丈夫だと思います・・・
139 :
デフォルトの名無しさん :03/01/20 19:38
Visual C++ .NET Standard 買おうと思いますがどう思われますか? VBは弄った事あります
スレ違い祭りか?
141 :
デフォルトの名無しさん :03/01/20 19:45
Visual C# .NET Visual C++ .NETて何が違うんですか?
>>138 Cygwin なら
ls -l ファイル名
でファイルサイズが見れますよ。
バイナリファイルの中身は
dump ファイル名 | less
(less でなく more でもいいです。お好きなほうを)
で見れます。
>>138 > ファイルサイズの計算はどうすればいいのでしょうか・・・
printf("%d", sizeof a);
もしくは
sizeof(aの型) * 130 * 100
として計算。あとはバイナリなんで、a, b, c, dを全部足せばよい。
> バイナリファイルの中身はどうやって見ればいいのでしょうか・・・バイナリエディタですか?
バイナリエディタもしくは16進ダンプするツールを探す。
なければ作れ。(簡単だから)
予想では0は書かれていないと思う。
> 二次元配列のサイズ計算というのがよく分からないのですが・・・
> (略)
> aはa[30][0]から0になっていて、bはb[7][6]から0になっています。
c, dは大丈夫で、a, bが駄目というんで、二次元配列の扱いが間違えているんだと思う。
fwrite()のところで3000や1350という数を渡してしまっている。
3000は130 * 100 を 30 * 100にしてしまっているとか…
>>142 >>144 ありがd。
とりあえずプログラムもう一度見直して
ファイルの中身見たりしてみまつ。
>>139 Visual C++ .NET Standard は
最適化が無くて、できた実行ファイルも配布禁止だったような。
完全に学習用なんで、それでもいいんなら買ったんでいいんでは?
>>137 自明というわけでは無い気がしますけども…
デキタ━(゚∀゚)━!!!!
>>134 ,
>>144 両氏指摘のように、
原因はfwriteおよびfreadの書き込み、読み込み数指定が間違っていたようです。
プログラムでは
fwrite(a,sizeof(double),input*middle,fp)
といったように書いていたのです。
inputとmiddleはdefineであらかじめ定義してありました。
特にinputは
#define input aho+bakaといった形で・・・
今まで本当に知らなかったのが恥ずかしいくらいなのですが、
この状態でinput*middleってやるとaho+baka*middleってことになるんですね・・・
てっきりahoとbakaの和がinputに入るんだとばかり思ってました・・・
#define input (aho+baka)で解決しますた。(´・ω・`)
書き込みから間違ってることが判明したので、
25時間かけたデータを取り直しまつ・・・(´・ω・`)
>>144 氏の言うとおり、出力ファイルのサイズはsizeof(double)が8だったので
8*(130*100+100*32+100+32)=130656Byte が正しかったのですが、
質問時の出力ファイルは28kByteくらいでした・・・
今考えると8*(31*100+7*32+6+100+32)=27696Byte だったのですね・・・
みなさまありがとうございますた。ご迷惑おかけしますた。逝ってきまつ。
(´-`).。oO 150は経験値が1上がった
>>147 ありがとうございます。
Visual C++ と Visual C++ .NET の違いは何でしょうか?
154 :
デフォルトの名無しさん :03/01/21 00:28
>>147 マジで!?
箱には・・・
「学習用を目的とした製品となります。
商用製品など、本格的なアプリケーションの開発は、
Visual Studio .NET Professional 以上の製品をお勧めいたします。」
・・・と、あるけど・・・?
あくまで、お勧めであって・・・
ダメとはどこにも書いてないっぽい。
今から、もうちょっとマニュアル読んでみる。
155 :
デフォルトの名無しさん :03/01/21 00:45
staticってなんれすか?
静電気
>>155 自動変数をstatic領域に配置することだよ
static int a;
とかって宣言すると、その関数終了しても内容の保持が保証されるのです
>>157 つーことは
static int foo(void);
と言う関数は、static領域に配置されるから内容の保持が保証されるけど
int foo(void);
と言う関数は、内容の保持が保証されないのですね?
160 :
デフォルトの名無しさん :03/01/21 01:01
void analysis(int ch) { static int repeat_count = -1; /* < 0 は無効値 */ int i; if (ch == 'F' || ch == 'R' || ch == 'L') { if (repeat_count < 0) repeat_count = 1; for (i = 0; i < repeat_count; i++) { switch(ch){ case 'F': forward(); break; case 'R': right_turn(); break; case 'L': left_turn(); break; } } repeat_count = -1; } else if (isdigit(ch)) { if (repeat_count < 0) repeat_count = ch - '0'; else repeat_count = repeat_count * 10 + ch - '0'; } } 丁寧に説明してくらさい。
>>147 ってことで、ザッと見てみたが・・・
どこにも、作ったバイナリの配布を禁止してる下りもないし、
また、商用アプリを作ってはダメって下りもない。
あくまで推奨。お勧め。
作ったバイナリ配布しても、
シェアソフト作ってもOKっぽいぞ。
163 :
デフォルトの名無しさん :03/01/21 01:03
164 :
デフォルトの名無しさん :03/01/21 01:04
165 :
デフォルトの名無しさん :03/01/21 01:08
>>160 たとえば"15FR160L"という文字列があったとき,
それを先頭から一文字づつanalysisに渡すと,
forwoard()が15回, right_turn()が1回,
left_turnが160回, の順で実行される。
staticの解釈はこの場合
>>157 で合ってるから, あとは自分で追ってみれ。
166 :
デフォルトの名無しさん :03/01/21 01:12
>>159 static の関数は同じファイルの中からしか
直接呼び出すことが出来ないんじゃなかったっけ?
>>160 の
>/* < 0 は無効値 */
ってコメントは的外れと思うのは気のせい?
168 :
デフォルトの名無しさん :03/01/21 01:20
if (repeat_count < 0) repeat_count = 1; ここか?
169 :
デフォルトの名無しさん :03/01/21 01:21
170 :
デフォルトの名無しさん :03/01/21 01:24
else if (isdigit(ch)) { if (repeat_count < 0) repeat_count = ch - '0'; else repeat_count = repeat_count * 10 + ch - '0'; コメント風に解説おながいします。
>>167 ん?なんで?
数字が何桁続くかわからないから、下から4行目の
if ( repeat_count < 0 )
の行で1桁目なのか2桁目以降なのかを判定するためでしょ?
カキコする前にreloadしてみたら
>>170 の答えにもなってた。
>>170 >isdigit(ch)
chのアスキーコード値が数字の文字かどうかの判別
>ch - '0'
文字0のコード値で引く
173 :
デフォルトの名無しさん :03/01/21 01:32
175 :
デフォルトの名無しさん :03/01/21 01:33
横突っ込みでスマソが
>>172 そんなコメントは書くなよ
>>171 スマソ、完全にボケてました
コピペしたから気づかんかったけど
/* 0 は無効値 */
ではなく
/* < 0 は無効値 */
だったんですね…首吊ってきます
>>177 まだ生きてる?
なるほど。
確かに -1 ってハードコーディングしてるんだから
/* -1 は無効値 */
のほうが読みやすいかも知れませんね。
>>177 見間違えは誰でもあるYO まあまあ気を落とすなw
>>160 これってこの前オレが書いたやつじゃん。
ちなみにあのコメントはrepeat_countが負の値をとらないよって意味。
だから-1かどうかではなく、負かどうかの判定になっている。
つか、NULL を無効値にすればいんじゃ・・・?
数字検出時に何桁目なのかを意識しなくても
if ( isdigit(ch) )
repeat_count = repeat_count * 10 + ch - '0' ;
で済むし。
但し、入力が "0R"とかの場合に
>>160 とは挙動が変わってしまうが。
まぁ、他人の課題にそこまで考えてやる必要ないし。気ぃ悪くしたらスマソ。
>但し、入力が "0R"とかの場合に
>>160 とは挙動が変わってしまうが。
まさにこれが負値を無効値にしてる理由じゃないの?
>>181 理由は、
>>182 さんの言っている通りです。
-の入力は流石にないだろうけど、0はあるだろうと思って。
質問には書いてなかったんで、どちらでもいいと思いますが。
あと、同じ人?って書いたのもオレです。
まぁ前処理で0はカットできるけどね。
ちゃんとassertなりで0を受け付けないと表明するなら
>>181 もアリかも。あと0->NULLだけど逆は必ずしも真ならず。
>>185 何でNULLは突っ込んで
挙動が変わるのは"R"等であって
"0R"等ではない事に突っ込まないかな…
187 :
デフォルトの名無しさん :03/01/21 04:21
gccのライブラリファイルのリンクトラブルは どうやって解決するのがいいんでしょうか? よく,-L,-lのオプションが足りないと, undefined reference to `xxxxx' と文句いわれるけど, そのファイルがどのライブラリにあるとか, どうやって調べたらいいんでしょう?
>>186 0を無効値にするってことは, ふつう無効値チェック部分の,
if (repeat_count < 0) repeat_count = 1;
を,
if (repeat_count == 0) repeat_count = 1;
と書き換えることを含意するんじゃないの?
191 :
デフォルトの名無しさん :03/01/21 10:51
130-133サソ アリガトウゴザイマシタ while(fgets(buf, 256, ifp) !=NULL){ for(src=buf, dst=tmp; *src; src++){ if(! isalpha(*src)) *dst++=*src; } *dst='\0'; hoge = atoi(tmp); printf("hoge = %d",hoge); fprintf(ofp, "%d\n", hoge); } ご教授頂いたように修正したところ 無事仕様とおりに動きました。
192 :
デフォルトの名無しさん :03/01/21 12:01
質問なのですが 引数で渡したファイルに バイナリで書きこむとは どういったことなのでしょうか? 例えば32という2バイトを32と1バイトにして 書きこむといわれたのですが・・・ あまりにも意味がわかっておりません。 どなたかご教授お願い致します。
>>192 fopen() で "wb" モードで開け。
char 型の変数に 32 を代入して fwrite() で書け。
終わったら fclose() で閉じろ。
>>162 そうだったんだ...。
VC5の頃はダメって書いてあったと思うので、
特にいいって書いてないだけでも
ダメなんだと思い込んでしまったのかも。
196 :
デフォルトの名無しさん :03/01/21 20:19
age
>>157 > 自動変数をstatic領域に配置することだよ
それって自動変数じゃねーだろ。
(今時誰も書かないけど、auto ってキーワードもあるし...。)
> static int a;
> とかって宣言すると、その関数終了しても内容の保持が保証されるのです
グローバル変数/関数のスコープには触れなくて良いのか ?
auto って書いてた時期ってそもそもあるの?
K&R の時代のことはよー知らんのだが。
>>155 1.関数の外に書いた変数や関数につけた場合
その変数や関数の名前がそのファイル内でしか通用しなくなる。
2.関数の中の変数につけた場合
その名前が関数の中でしか通用しないことを除いて
グローバル変数と同様の扱いになる。
(つまり、初期化は実行前に決まる値でしか行えず、
初期化を省略すれば 0 で初期化される。
staticとグローバルはメモリまわりでちょっと違うんじゃなかったか?忘れたが
>>198 > auto って書いてた時期ってそもそもあるの?
> K&R の時代のことはよー知らんのだが。
最近の香具師は、規格も知らんのか ?
(まあ、普通は省略できるから気にしなくてもいいんだが。)
>>199 >>198 の 2. の意味では、まず同じ。(よほどひねくれた実装は除くが...。)
逆に、同じ静的変数でも初期化指定子がない (or 0 で初期化) 場合と、0 以外で初期化する場合で異なるメモリセクションに配置する処理系は多い。
>>198 そもそも、日本語で自動変数って
autoを直訳しただけだからね…
>>200-201 auto ってのがあることくらい知ってるけどさ、
でも、使ったことないんで。
いや、とりあえず使ってみたことはあるが。
register もそうだなー。
VCとか無視するって書いてるし。
autoって書くのって時代遅れっぽぃ?
204 :
デフォルトの名無しさん :03/01/22 00:17
>>197 >それって自動変数じゃねーだろ。
>(今時誰も書かないけど、auto ってキーワードもあるし...。)
そういわれたらそうかも(^^;
へんないいまわしだw
staticで宣言した瞬間にautoじゃなくなるもんね
>グローバル変数/関数のスコープには触れなくて良いのか ?
うーん、staticってなんでしか?って聞いてる人にあんまり難しいこといってもなぁ〜
って思いまして。
つまるところは内容が保持されるってことがいいたい。
そうすると、スコープの話になりますね・・・
>>(今時誰も書かないけど、auto ってキーワードもあるし...。)
う〜ん、C始めて、8年やけど、いまだかつてautoキーワード使ったこと無いわw
使うことってあるの?
205 :
デフォルトの名無しさん :03/01/22 00:17
registerは要るよ! ほんとに速くなるか良く知らないけど
volatileは要るよ!
207 :
デフォルトの名無しさん :03/01/22 00:26
>>205 ん〜大概のコンパイラは最適化の段階で勝手にregisterつかってくれるんじゃないの?
registerは最適化のヒントにしかならない。本当にレジスタ使って くれるかどうかはわからない。 x86のようなレジスタが少ないCPUならなおさらその傾向が強い。
>>204 ソースを見やすくする為に使う
取り敢えず、最優先したい変数はregisterを使い
レジスタに割り当てて欲しくない変数はvolatileを使い(←正しい使い方と違うけど)
レジスタが余ってる場合にはレジスタに割り当てて欲しい場合はautoを使えば
ソースを見た時に、明示的に優先するべき変数が分かるようになる
ちなみに、省略された変数は、一時的なもので最終的には使わない予定の変数
そんなにごちゃごちゃ書いてたら 鬱陶しいことこの上ない(w
見やすくするためにautoやvolatileなどの機能を伴う(とされている) 修飾子を使うのは誤り。するべきは変数名の工夫、コードの構成。
autoは使わない w registerは優秀なコンパイラを使っていれば必要ないんじゃない? volatileは・・・・それを必要とするほど高度なプログラムを俺は書いたことがないw 俺は上の三つは使ったことないな。signedも使ったことないかも
みんなは外部のファイルから参照される関数の頭にexternをつける? 俺はデフォルトでexternになっているからつけないんだけど。 プロトタイプにはつける人もいるみたいだから。
無意味といえば単項演算子の+もauto同様、無意味だよな。
extern int i; /* 宣言 */ void foo() { : i++; /* 参照 */ : } int i ; /* 定義 */ これをstaticでやりたい場合はどうするの? ファイル内でしか通用しないのだから 普段は宣言無しで定義を一番上に書く事にしてるんだけど 出来たら、それは、それで少し便利かなと…
217 :
デフォルトの名無しさん :03/01/22 04:15
int* p; p=malloc(sizof(int), 100); で動的に確保したpの配列要素数を調べるにはどうすればいいでしょう? sizeof(p)ならsizeof(int *)がもとまってしまいます... もちろんサイズ100ってわかってるのになんで?ってのは なしでおねがいします.
>>216 一応
static int i; /* 定義 */
にすればできる。
でも、そういうのはできるだけ一箇所で済ませたいと思うけどね。
2箇所で整合性とらなあかんのは面倒。
関数の場合は前方参照問題とかあるから
static でもプロトタイプ宣言するのは有意義だけど、
変数では滅多にそういう問題ないから不必要っしょ。
>>221 要するに、何か変数に保存しときんしゃいってこと。
>>223 どうもありがとうございます.
単純に考えたら...
お恥ずかしい限りです
>>221 覚えておけばいいってのは、変数に入れておけばいいという意味なんだが、伝わらなかったか。
226 :
デフォルトの名無しさん :03/01/22 05:01
>>225 >>225 そこまで頭がまわりませんでした...
文字どおり”覚えておけ”ってことだと解釈してもうた
>>217 ところで、mallocの引数はひとつだよ。
callocでも意味上では引数の順番が逆だな
>>222 ありがとうございます
関数だと駄目なので、変数も駄目だと思い込んでたんですけど
変数の宣言はexternで良かったんですね
>>228 > 関数だと駄目なので、変数も駄目だと思い込んでたんですけど
何で駄目だと思ったんだ?
プロトタイプに extern とか書いたのか?
#include <stdio.h>
static void hoge();
int main()
{
puts("main");
hoge();
puts("main");
return 0;
}
static void hoge()
{
puts("hoge");
}
>>228 > 変数の宣言はexternで良かったんですね
よくない。
いや、悪くないが、気持ち悪い。
関数内でも、変数は頭に宣言するだろう。
変数を後ろに宣言する何の必要があるのか?
「元も子も」じゃなかったけ?勘違い?
233 :
デフォルトの名無しさん :03/01/22 19:17
032 #なんだかnandaka 038 #あそこがasokoga 214 #むず痒いmuzugayui 314 #なんでだろnanndedaro 286 #なんだか切ないnanndakasetsnai ↑こんな感じの複数行のテキストファイルがあり、 このファイルを引数で渡すと 数字のみファイルに書きこむプログラム (#以降はコメントのようにみなす)を 作成していたのですが、変更があって 032 #なんだかnandaka ne #あそこがasokoga 214 #むず痒いmuzugayui ↑のように数字以外のものがあっても 変換する必要性が出てきました。 今まではisdigit()で済ませていたのですが それでは2行目の"ne"が弾かれてしまいます。 そこでどのようにすれば#以降を弾きつつ 先頭行の数字以外のデータを書きこむように できるのかをお教え頂きたくカキコしております。 ほんと厨房で長々と乱文でスイマセソ 5教授お願い致します。。。
>>233 書き込むって何に書き込むんだ?
文脈から判断できない
メモリーか?
ああ、わるい。ファイルか。
>>233 strchrで#までの長さを求める。
なければ行末までとする。
言い方が悪いな。 strchrをうまく使って長さを求める。 strcspnを使ってもいいけど
isdigitの代わりにisgraphをつかう
239 :
10000 :03/01/22 19:29
C言語でいまCGI作ろうとしているんですが とりあえず文字表示するだけとかやってみたわけなの printf("<HTML>");みたいに。 それをコンパイルしてXREAってトコロにUPしてみたの だけど・・動かないの・・・EXEをCGIにリネームしてUPしたのに。 ・・・・なにがわるいんでしょう・・・??
>>239 ・コンパイルした環境がxreaと違うから
・Content-Typeヘッダーを出力していないから
>>239 EXEとか言っているあたりWindows上でコンパイルしたな・・・・
xreaはLinux(CPUはIntel系)だから。
242 :
10000 :03/01/22 19:34
printf("Content-type:text/html\n\n"); こんなん付けていましたが・・・ダメでした・・。 環境はVCなんです。・・うーぬ。 レスありがトン。
トクトクでコンパイルしたものをXREAにアップすれば動くかも
Windowsじゃだめなのですか!! それは気付かなかった・・っていうか知らなかった〜 Linux対応にするにはどうすればいいか、わかります・・?
>>233 strtok(バッファの内容を改変してもいいとき)
もしくは strchr(よくないとき)を使う。
>>242 : の後は空白を空ける。
printf("Content-type: text/html\n\n");
>>244 Linux 上でコンパイルする。
>>245 他のバッファにコピーするならsscanf(src,"%[^#]",dest);こんな感じかな?
Linuxヵー自分全然わかんないッス・・・。 まだ遠い道なのかな・・。
レンタル鯖でCGIするなら、やっぱperlとかの方がいいっしょ。 実験用に自前鯖つくるか
*.cgi の中身ってどんな言語? ってか、コンパイルされた状態なの? テキストソースなの?
>>239 のことなら
>>239 を読めば分かると思うけど・・・
> C言語で
> それをコンパイルして
そういう意味か・・・ 標準入出力と環境変数にアクセスする機能があれば言語は問わない。 Cで書かれたものならもちろんコンパイルしないとだめ
>>252 確かにそういう意味かもしれんな...。
>>251 に補足するなら、サーバが許可してない形式のは実行できなかったと思う。
インタプリタ言語なら、もちろんインタプリタがサーバに置いてないと実行できない。
ホームでインタプリタを自前でコンパイルして使うという手もあるが...。
255 :
デフォルトの名無しさん :03/01/22 22:57
const struct ABC {int i;} a; struct ABC b; ってすると、なんで a しか定数にならないのー? 型限定子なのに
書き換え不能なstruct ABC型のaだからじゃない・・・ 何がおかしいんだろ・・・
257 :
困った1 ◆tr.t4dJfuU :03/01/22 23:03
int findpos(char s[], int lim) { int i; for (i = 0; s[i] != '\0' && i < lim; i++) { ; } if (i == lim) { while (i >= 0 && (s[i] == ' ' || s[i] == '\t'))/*@*/ { i--; } } return i; } @の条件が常に偽になるのはなぜなのでしょう?
free()でsegmentation faultが発生するんですが考えられる原因は何でしょうか
>>258 ・mallocで得た領域でない。
・既にfree済み。
const struct ABC {[?[struct]?] int i;} a;
261 :
困った ◆tr.t4dJfuU :03/01/22 23:18
「困った1」ではなくて「困った」でした。スマソ。
>>257 常に偽になるわけないでしょ。
findposに与える引数を工夫してみな。
>>259 それ以外にも、ポインタとかの使い方間違えてて、メモリ管理がぐちゃぐちゃになってるとか...。
>>230 >変数を後ろに宣言する何の必要があるのか?
関数でも変数でも定義や参照の後ろで宣言するのは意味無いし
>>259 ,263
1)でした...
静的に確保した領域を開放しようとしてました.
どうもありがとうございました.
266 :
デフォルトの名無しさん :03/01/22 23:43
>>255 それで正常です。
構造体の定義の部分に const をつけても、
その構造体変数を作ろうとした場合に const になるわけではありません。
定義の部分でついでに定義した構造体変数が const になるのです。
常に const になって欲しいんならこんな感じで。
typedef const struct __ABC {int i;} ABC;
ABC a = { 0 };
ABC b = { 5 };
267 :
困った ◆tr.t4dJfuU :03/01/22 23:46
>>262 ありがとうございます。
その方向で工夫してみます。
>>198 再帰関数を書いたときにauto変数であることを明示するために書いたことがある。
269 :
デフォルトの名無しさん :03/01/22 23:51
>255 >const struct ABC {int i;} a; だと const struct ABC a; でって、ABCがconstになるわけじゃないですからね。 そもそも、型を定数にしてなんかいいことある? あえてするなら struct ABC {const int i;}; かな?
270 :
デフォルトの名無しさん :03/01/23 00:08
sizeof honyaraと、sizeof(honyara)って何か違いますか?
don't worry.
>>270 #define honyara honya + ra
後は自分で考えませう
273 :
デフォルトの名無しさん :03/01/23 00:37
>>269 です。
んー、簡単なプログラムかいて、色々実験してみたんだけど、
結果は、同じになります。
あんまり悩む事じゃないのかな??
>>272 それは、そんな定義する奴の方が悪いと思うけど。
>>273 じゃ↓を試してみ
#define honyara 7 + 11
printf("%d\n",sizeof honyara );
printf("%d\n",sizeof(honyara));
型に対してsizeofするときは括弧が必要なんじゃなかった?
>>277 だからと言ってそんな変な例を出してどうする。
sizeof 単一式
sizoof(型名)
と言うだけのことだろ。規格書ぐらい読めよ。
279 :
デフォルトの名無しさん :03/01/23 00:58
>>275 さん、どうもです。
なるほど、この場合だと結果は違いますね。
自分の環境だと、
printf("%d\n",sizeof honyara );
これは、15になって、
こちらは、
printf("%d\n",sizeof(honyara));
4になりました。
後者は、sizeof(int)をあらわしてると思うのだけど、
前者はなんだろう?
うーむ、、、、考え中...
>>278 >sizoof(型名)
>規格書ぐらい読めよ。
プッ
>>279 型名に()が必要と言うのは
#define honyara int
や
typedef int honyara;
の場合
>>278 そうか?俺は勉強になる良い例だと思うが・・・
ところで単一式なんて単語定義されてたっけ?
>>279 sizeof 7 + 11 は ( sizeof 7 ) + 11
sizeof( 7 + 11 ) は sizeof( 18 )
で、あなたの環境の場合 sizeof 7 も sizeof 18 も4だったって事
284 :
デフォルトの名無しさん :03/01/23 01:07
>>281 つまり、一般的には(typedefしない時などは)、両者は同じであるというわけですか?
正直、わかったような、わからないような。
なんだか釈然としないですょ。
285 :
デフォルトの名無しさん :03/01/23 01:09
>>283 なるほど!
非常によくわかりました。
カッコつけることで、優先順位あげてるわけか。
理解しますた。
みなさん、どうもありがとうございました。
>>284 いつでも括弧をつけていれば間違いない。
俺は変数に対してはあまり括弧をつけないけど・・・
>>284 要は、honyaraの正体を知ってる時は、どっちを使っても構わないが
honyaraの正体を知らない時は()使えって事
また、honyaraの正体を知ってても変更する(される)
可能性がある場合も()使えって事
俺はいつもつけるようにしてるな、 つけないとワードとワードが2つ連続して並んじゃってなんか居心地が悪い hage + sizeof hoge + huge ↑ここに何も無いのがキモイ
ところで sizeof(i++) のように、変数を変化させる事を書いた場合の ふるまいって、どうなってるの?
sizeofの中味は評価されないんじゃなかった? i++の型だけが使われて、iの値は変化しないと
>>289 変数の大きさに変数の中身は関係ないんじゃ?
ああ、i++が実行されるかどうかということか。 どうだろ・・・
手持ちのコンパイラは全て変化しないけど これが、保証済みだったら良いけど 未定義や処理系定義だったら怖いでふ… まぁ #define i j++ とかアホな宣言しなければ良いんですけどね…
C++/C99の規格では、(C99の可変長配列を除いて)オペランドは評価されない。 となってる。
295 :
デフォルトの名無しさん :03/01/23 02:30
#include<stdio.h> main() { putchar(126); } だと ~ が表示される.(~のコードが126だから) しかし 。 のコードは130のはずなのに, #include<stdio.h> main() { putchar(130); } と打っても結果が表示されません.これに関して,130〜159までが表示されないみたいなんですが,なぜなんでつかー??おせーてくらさい.
130のコードが'。'では無かったから
>>295 isgraph()で調べてみたら。
スペース以外の表示可能文字なら0以外を返す。
>>295 。 は 161(0xA1) だと思います。
129(0x81) 〜 159(0x9F) はSJISでは2バイト文字用の
文字コードなので、単独では何も表示されません。
299 :
デフォルトの名無しさん :03/01/23 02:53
putchar はコードを文字に変換出力しますが,その逆(文字をコードに)をしてくれる命令はありますか??
誰も突っ込んでくれない…鬱
301 :
デフォルトの名無しさん :03/01/23 03:00
勉強になります.ここはレベル高杉ですね
ぼけのレベルがですか?
303 :
レゴ其の二 :03/01/23 03:15
助けて下さい。 #include <iostream.h> #include<stdio.h> void main() { FILE *fp; fp=fopen("素数−実行結果.txt","a"); int i, j ,f,n=1000,c=0; // 1から1000までの数の素数を求める // i, jはループ変数 // fは一回でも割り切れたら1。 // 一度も割り切れなかったら0。 for(i = 2; i <= n; i++) // i(==2,3,4,..,1000)について調べる。 { f = 0; for(j = 2; j < i; j++) // j(==2,3,...,i)で割ってみる。 { if(i % j == 0) // あるjで割り切れたらfは1。 f = 1; }
304 :
レゴ其の二 :03/01/23 03:15
if(f == 0){// iを割り切るjがなかった場合 cout << i << "は素数です。" << endl; c++; } } printf("%d個です。",c); } 素数を表示するプログラムなんですが、 実行結果をテキストファイルに出力するにはどうしたら良いですか? 教えて下さい。御願いします。 ちなみに、コレを実行しても、作成されたテキストファイルは白紙になってしまいます。
>>299 printf( "A=0x%02x\n", 'A' ) ;
てっとり早くやるなら、そのプログラムの名前をtestとしたら、 test > hoge.txt ってしたら、いいんじゃねーか? 面倒くせーから、まともなやりかたは、他の人に聞いてくれ。
308 :
レゴ其の二 :03/01/23 03:24
実行結果をテキストファイルに出力する仕方を教えて下さい。 御願いします。 なかなかうまくいかないんです。
マルチポストなのでIP抜いて通報しますた
マルチポストってなんですか?
>>310 複数のスレッドに同じことを投稿する違法行為。
知らなかったじゃ済まされないのが犯罪。
すいません。 いえ、あちらの方に、MFC限定と書いてあったので、 書き込んだ後で、違うかも知れないと思って、こっちに来たんです。 だから、他には投稿してないです。
ム板はやたらスレが細分化されてるからなあ。 マルチポストと移動の違いが分からない罠。
迷惑掛けてしまったみたいで恐縮なんですが、 どうしたら、うまくテキストファイルに出力できるか、 教えて下さい。御願いします。
>>312 マルチポストが何故いけないのかちゃんと調べておこうな。
>>313 移動はちゃんと移動したと書いてある。
マルチポストと勘違いされるのを防ぐのにな。
317 :
名無しさん@3周年 :03/01/23 03:37
「レゴは 素直に 単位を 落とせ。」
向こうにレス付いてたよん。
>>312 >書き込んだ後で、違うかも知れないと思って、こっちに来たんです。
1、書き込む前に確認する
2、移動する時は、必ず、移動すると元スレに書き込んでから移動する
以上、基本ですので憶えて置きなはれ
追記
反省してるならMFC限定スレにも謝っておく事
>>303 それは C++ だが、ここは 「C 限定」 なんだよな。
316>> はい、分かりました。 317>> 単位というか、研究室に入れなくなってしまうんです。
fprintfの使い方分かる方、教えて下さい。
読んだんですけど、C言語というと、C++も入ってるんですかね? 違うけど、言葉的に入ってると思ったんですが。違うのでしょうか? 間違ってたら、すいません。
FILE *fp,*fc; fp=fopen("素数−実行結果.txt","w"); int i, j ,f,n=1000,c=0; // 1から1000までの数の素数を求める // i, jはループ変数 // fは一回でも割り切れたら1。 // 一度も割り切れなかったら0。 for(i = 2; i <= n; i++) // i(==2,3,4,..,1000)について調べる。 { f = 0; for(j = 2; j < i; j++) // j(==2,3,...,i)で割ってみる。 { if(i % j == 0) // あるjで割り切れたらfは1。 f = 1; } if(f == 0){// iを割り切るjがなかった場合 cout << i << "は素数です。" << endl; c++; } } printf("%d個です。",c); fc=fclose("素数−実行結果.txt","w"); と入力したのですが、エラーが出てしまいました。
>>324 はっきり言われないとわからないか。
>>1 の 2 行目は呼んだか?
あと、C と C++ は全然別言語だ。
fprintfを使った方が簡単に出来るのですか? もしかして、両方使わないといけないんですかね?
326>> はい。 自分で色々調べたり、先輩に聞いたんですけど、 ここまでしか分からなくて。 本当に頭悪くて、すみません。
それでは、失礼します。
>>328 まずfopenとfprintfとfcloseの使い方をおぼえたほうがいいな。
なんでfpにファイルをオープンしたポインタを代入してるのにcoutに出力してんだ?
fpをまったく使わない時点でおかしいと思わないのか?
えっ? fpに出力ですか? coutは、使わないんですかね? 初めに素数を表示するプログラムが完成した後で、 テキストファイルに出力出来るようにしようとしたので、 分からなくなったんです。 ちょっと、いじってみます。
>>330 優しいね…
>>331 C++として組みたいならXXstream使え(XXは自分で探せ)
何が簡単で、何が簡単ではないかは、使う人の考え方次第
それにネットで検索すればfprintf()の使い方なんて簡単に見つかる
そして、ルールは守れ。
何処で聞けば分からなければ、この板のルールの↓を守って
>あらゆる質問はまずすれ立てるまでもない質問はここでスレにしてください。
http://pc3.2ch.net/test/read.cgi/tech/1043159083/ に書きこんでれば、一発で誰かが答えてくれる問題だった
まぁ、今更書いたところで、答えてくれる香具師がいるかは分からんが…
取り敢えず、
>>330 が付き合ってくれてるので
Cに直した答えを教えてくれるかも知れないが
C++にしたいのなら明日あたり↑のスレで聞いてみ
いつからレゴはC++になったんだ?
>>333 いやま、スレ違いだし、ヒント以上を出すつもりはないんで(w
引き取ってくれるスレがあることだし、この辺で。
>236 >238 >245サソ アリガdございますた。 アドバイス頂いておいて何なんですが、 正直strchrを使って"#"以降を弾くのかわかりません。。。 ほんと糞厨ですみませんが、もう少し 5教授頂きたく思います。 お手数お掛け致しますが宜しくお願い致します。
339 :
デフォルトの名無しさん :03/01/23 11:56
C言語の、多分基礎のところだと思うんですけど質問します。 int AAA = BBB != CCC ? DDD:EEE ; この1行を要約すると、 if( BBB==CCC ) int AAA = DDD ; else int AAA = EEE ; ということでよろしいのでしょうか?
int AAA; if( BBB!=CCC ) AAA = DDD ; else AAA = EEE ;
>340さま ありがとうございました。m(__)m
342 :
デフォルトの名無しさん :03/01/23 12:31
>>338 1. 一行読み出す
2. #の位置を探す
3. 見つかれば、そこまでを書き出す
4. 見つからなければ、全部書き出す
でできます。
一文字ずつ読み出す場合はこういうことできないんですけどね。
一文字ずつ読み出すと何度も読み出し作業があって遅くなるので、
一度にある程度読み出すことが多いです。
まぁ、一文字ずつ読み出す場合であれば、
isdigit とかの関数を使わずに
'#' かどうか判定するのが一番真っ当なやり方でしょうね。
C言語の長所と短所を教えてください。
>>343 長所: 簡潔であること。
短所: 簡潔すぎること。
>342サソ アリガdございます 相変わらず糞厨なもので。。。 3. 見つかれば、そこまでを書き出す 4. 見つからなければ、全部書き出す 上記3.4のコーディング方がわかりませぬ・・・ まじオワッテルって感じなんですけど、 御教授願いたく再度ペコーリでございます。
>>345 3. 位置の差を使って fwrite
4. fputs
何で分岐するかは strchr のヘルプを見れば分かるはず。
fgets で一行読み出そうとしても、
バッファが小さいと一度に一行全部読み出せるとは限らないので、
その対処をする必要があります。
全部読み出せたかどうかは最後が改行かどうかで分かります。
具体的な形については、全部自分でやってください。
>>345 >>246 じゃだめ?確認していないけど。
一行読んだものを格納するバッファとは別にもうひとつバッファをつくってそこにsscanf
>>346 位置の差を取るくらいならstrcspnを使えばいいじゃん
'#'を探して見つかったらその位置とその次に'\n'と'\0'を置く。
行バッファなんか要らないじゃん。 fopen(fpin=入力、fpout=出力) while(!feof(fpin)) { fgetc(cに1文字読む); if(c=='#') { fputc('\n',fpout); while(!feof(fpin)) { fgetc(cに1文字読む); if(c=='\n') break; } } else { fputc(cの1文字を書き込む,fpout); } } 両file close exit(0);
(^^)
山崎渉も氏ね
(××)
C言語が全然分かりません(>_<) どうしたらいいですか(>_<)
ほうじ茶を飲むといいですよ (-:
C言語でほうじ茶のプログラムを書く方法を教えてください(>_<)
/ ∋8ノハヽ8∈ | ( ´D`) < こーするのれす | printf("ほうじ茶のプログラム");
361 :
デフォルトの名無しさん :03/01/24 15:31
C言語でいい参考書ありませんか?やさしいCとC言語スタートブックは読んだのですが 次になにを読めばいいのか迷っています、それともはやめにC++の方に移った方がいい のでしょうか?
363 :
デフォルトの名無しさん :03/01/24 15:42
364 :
デフォルトの名無しさん :03/01/24 18:36
ど素人な質問でスミマセン。 ファイルから1バイトおきにデータを読み込みたいのですがうまくいきません なぜこれではダメなのでしょうか? FILE *fp; char ch; ....... while(!feof(fp)){ ch=fgetc(fp); putchar(ch); fseek(fp, 1L, SEEK_CUR); }
FILE *fp; char ch; ....... while(!feof(fp)){ ch=fgetc(fp); putchar(ch); fgetc(fp); //fseek(fp, 1L, SEEK_CUR); }
> while(!feof(fp)) 終了条件がこれはマズイだろ。
367 :
デフォルトの名無しさん :03/01/24 19:28
文字を数値に変えるのはatoiとわかりました。 数値を文字に変えるのはitoaですか?
はい
aprintf()
間違い。 sprintf()
>>364 fgetc の戻り値で終わってるかどうか確かめましょう。
また、fgetc の戻り値は int なので int で受け取りましょう。
FILE *stream; char buffer[81]; int i, ch; ................ /* 最初の 80 バイト文字を読み出し、"buffer" に格納します。*/ ch = fgetc( stream ); for( i=0; (i < 80 ) && ( feof( stream ) == 0 ); i++ ) { buffer[i] = ch; ch = fgetc( stream ); } ...................
1週間位前から、snprintfを実装してた者です。 本日作成終了しました。とりあえず感想等を書いてみます。 文字列フォーマット後のサイズを計算して、 オーバーフローしないなら、 内部でvsprintfを呼ぶ様に実装しました。 でも、何箇所か精度の甘い部分が残りました。 変換指定子g,Gはeかfのどちらかに変換されるらしいけど、 どちらに変換されるか判らないからサイズは大きい方で 計算したり、フラグ#は最小フィールドが指定された時には、 サイズがフィールド幅足す2なのか、最小フィールド幅内に含めるのか等 他の人には簡単なのかも知れないけど、 私には難しかったです。そしてめんどくさかった。
strtok使ってみたら?
375 :
名無し@沢村 :03/01/24 23:31
>>373 ヌヒよ、それは実装とは言わないぞ。
ヌヒよ、それは単に作成というぞ。それは単なる関数だからな。
ヌヒよ、実装というのは関数ではなくインターフェイスを定義することだ。
実装って、定義されたインターフェイスに対して 実際の処理内容を与えることじゃないの?
勘違いした。
>>375 377 の言う通りだ。
お前それじゃ、本物の沢村より DQN だぞ。
>>381 本物ならあんな文の書き方しないよ。
修行が足りないね。
383 :
ひとりでぷよぷよ :03/01/25 05:42
1 6 2 7 3 8 4 9 5 10 ↑これを (a=1;a<6;a++){ (b=a;b<=10;b+=5) printf("%d",b); printf("\n"); こうじゃなくて12345と数字の順番に表示させていくにはどうしたらいいですか
>>383 printf("12345\n678910");
>>383 何をやりたいのか見当がつかん。
どういう出力結果が欲しいんだ?
>>386 俺が思うに、1 6\n2 7\n3 8・・・と表示してゆくのではなく、
1から5までを表示したあとに一番上の行間で戻って少し右にずらし6から10までを表示したいんだと思う。
× 行間で ○ 行まで
390 :
ひとりでぷよぷよ :03/01/25 06:20
1 6 2 7 3 8 4 9 5 10 ↑これを #include <stdio.h> int main(void){ int a,b; for(a=1;a<6;a++){ for(b=a;b<=10;b+=5) printf("%3d",b); printf("\n"); } } こうじゃなくてああ
1 6 2 7 3 8 4 9 5 10 ↑こういった出力結果が欲しいだけなんか? だったら int i; for (i=1; i<=5; i++) printf("%d %d\n", i, i+5); これでええやん。
>>391 それだと1 -> 6 -> 2 -> 7という順で表示されるから嫌なんだと思う。
カーソルを移動させるための関数が必要だな。標準にはない。
>>392 俺も当初そう思ったんだけど,
>>390 を見る限り1 -> 6 -> 2 -> 7と表示させようとしてるような。
1 2 3 4 5 6 7 8 9 10
>>393 「こうじゃなくてああ」と書いているから違うコードがほしいんじゃない?
396 :
デフォルトの名無しさん :03/01/25 06:39
398 :
デフォルトの名無しさん :03/01/25 07:36
strtokはワークエリアが一つしかないので、だぶって使ったら ダメだということです
399 :
デフォルトの名無しさん :03/01/25 07:45
なんの話だ
>>399 よう分からんけど、
>>398 の環境で
同一プロセス内のスレッドが複数ある時の話じゃないか?
401 :
デフォルトの名無しさん :03/01/25 07:58
「Java 謎+落とし穴」のp50参照
402 :
デフォルトの名無しさん :03/01/25 09:44
C言語って関数内関数が使えないはずですよね? gccだと通っちゃうんですが。何故?
403 :
デフォルトの名無しさん :03/01/25 11:09
>402 gccが独自拡張してるからだYO! -ansi -pedantic-errors の、「ANSI準拠以外認めない」オプション付けたらエラーになる筈 ところで >59、61 の掛け合いに激しくワラタんだが、 反応ないのをみるに、これって激しく既知のネタ?
Not Found.
405 :
デフォルトの名無しさん :03/01/25 14:08
>>403 知らなんだ。イイ! ね。
特に作業用の引数が必要な再帰関数使うときとか。
>>403 サンクス
というかなんで標準Cじゃ使えないんだよヽ(`Д´)ノ
スコープがちょっと違うだけだろうが!
407 :
デフォルトの名無しさん :03/01/25 15:49
配列の範囲チェックを省きたいんですけど、 こんなのありなんでしょうか? struct aaa { int d1[10]; int data[10]; int d2[10]; }; aaa l; l.data[-1]=1; //d1[9] //anti bad_alloc l.data[-2]=222; //d1[8] //anti bad_alloc
>>407 添え字に負数入れてもコンパイラはエラー吐かないんだな。びっくりした
a[n] == *(a+n) と解釈されるから当然といえば当然か。
>>403 -pedanticまでつけなくてもいいんじゃないか?(笑)
以前試しにつけたら、//コメントはおろか標準にない関数をつかっただけでもエラーになった気がする。
410 :
デフォルトの名無しさん :03/01/25 17:35
>>406 >というかなんで標準Cじゃ使えないんだよヽ(`Д´)ノ
一見簡単そうだが、意外に厄介な問題が潜んでいるので・・・
>>411 まともな関数内関数の実装はスタックフレームにも影響あるからね。
C++やJavaのメソッド内クラスみたいな制限つきでも十分便利なのにな。
>>287 亀レスで悪いが...
> 要は、honyaraの正体を知ってる時は、どっちを使っても構わないが
> honyaraの正体を知らない時は()使えって事
と言うより、
#define honyara honya + ra
なんて宣言する奴が悪い。普通...
#define honyara (honya + ra)
って宣言するだろ。
>>280 規格書も読めないんだね。 ぷぷっ。
>>413 > #define honyara (honya + ra)
> って宣言するだろ。
このくだらないつっこみのために遅レスしたの?
>>413 > #define honyara (honya + ra)
> って宣言するだろ。
#define honyara ((honya) + (ra))
>>414 >このくだらないつっこみのために遅レスしたの?
規格書を読んでいた為ではないかと。
>>414 あんたの意味なし煽り突っ込みよりマシかと。
>>415 趣味の差かと。
念には、念を入れると言う考え方もあるけど、俺はマクロ側で () 必須にするのが好み。
>>416 それもあるが、毎日 2ch 見てるわけじゃないし...。
>>417 >俺はマクロ側で () 必須にするのが好み。
#define a(b) (b * 5)
printf("%d\n", a((4 + 8)));
という意味だったら死刑。
>>418 まあ、話の流れからわかるでしょ ?
「マクロの定義側で」と書いた方がいいか...。
>>420 これ (=このくだらないつっこみのために遅レスしたの?) 書いといて...
> 煽ったつもりはないですけど。
と来たか...。
>>413 で煽りがないとは言わんけど、
>>280 は見てんのかなぁ。
>>421 驚いたので感想を書いただけです。
亀レスでなければ驚きもしないですけど。
くだらないという表現がまずかったでしょうか。
>>422 > 驚いたので感想を書いただけです。
マジなのか、ネタ (だと思いたいが) なのかわからんけど。
まああんたみたいな奴も世の中にはいるということはわかった。
> 亀レスでなければ驚きもしないですけど。
自分で亀レスって書いといてなんだけど、2日と17時間ぐらいが、驚くほど亀レスか ?
君と違って、毎日 2ch 見てる香具師ばかりじゃないんだよ。
> くだらないという表現がまずかったでしょうか。
相手に対して、「くだらない」と言う表現がまずくない場合があるとでも思ってんの ?
2chだからね。
425 :
デフォルトの名無しさん :03/01/25 22:19
>407 1.構造体のメンバが宣言順にアドレス増加方向で並ぶのは保証されている 2.配列内の要素はアドレス増加方向で並ぶことが保証されている 3.アドレス演算は+で増加方向、-で減少方向が保証されている だが、 4.構造体の中身が隙間無く並ぶことは保証されていない に引っかかって誤動作することがあると思われ。 sizeof(int)=4,sizeof(short)=2として、 struct mix{ short a[1]; int b[1]; short c[1]; }; だと、恐らくmix.c[-3] != mix.a[0]になると思う。 ただそれよりも何よりも、そんな危険な匂いのするコード個人的に嫌だw
>>423 あんな書き込みでは2日と17時間でも驚くよ。
大抵は思っても書き込んだりはしないんじゃないかな。
要は2日と17時間経ってからレスしたことに驚いたんじゃなくて、あんなレスを2日と17時間も経ったあとにしたことに驚いたということ。
430 :
デフォルトの名無しさん :03/01/25 22:32
二次元配列を引数にとるにはどうすればいいんですか? int dat[100][100]; void func(int *param); main(){ func(dat); } のようにやっても、うまくいきません。 void func(int** param);でもだめでした。 教えてください。
-3じゃなく-4かもね、それ。
>>430 void func(int param[][100])
void func(int (*param)[100])
>>430 void func(int param[][100]);
434 :
デフォルトの名無しさん :03/01/25 22:36
ありがとうございます。 でもそれだと、要素数が100に限定されてしまいませんか?
>>434 限定される。
ポインタの指すものの大きさが分からないとだめだろ。
>>425 そもそも配列の範囲外へのアクセスは保証されないよ。
>>429 しつこい、お前等ウザイからどっか逝け。
>>430 void func(int param[][100])
多次元配列の最上位の次元以外の範囲は省略できない。
437 :
デフォルトの名無しさん :03/01/25 22:40
よくわかりました。どうもありがとうございました。
>>436 int data[100 +2], *p;
p = data +2;
とすれば、p[-2], p[-1] が有効に使えるね。
>>437 こうやればできる。
#include <stdio.h>
#define ELEMOF(array) (sizeof (array) / sizeof *(array))
void func(int* param, int n)
{
param[n * 3 + 6] = 3; /* a[3][6] = 3;
}
main()
{
int a[10][20];
func(*a, ELEMOF(*a));
printf("%d\n", a[3][6]);
}
あ、コメント閉じるの忘れてた。 param[n * 3 + 6] = 3; /* a[3][6] = 3; */
441 :
デフォルトの名無しさん :03/01/26 00:43
それだと2次元配列の見易さや配列の大きさについての 情報が無くなるから・・ void func(int *param,int n){ /*nは1列の要素数*/ *(param + 3 * n + 6) = 3; } と大差ないと思われ。 これなら通ることは恐らく>430も確認済みと思う。 関係ないが、関数の中にマジックナンバーを仕込むのは サンプルコードでも止めて欲すぃ・・
>>278 ==413
>sizoof(型名)
>規格書ぐらい読めよ。
規格書読む前に、アルファベットの綴りを覚えろよ
>>443 エラそーに能書きを垂れる時にミスったらアカンやろ
>>441 数字だと瞬間での同一性の確認が得られるから、
こういうサンプルではマジックナンバーもアリかと思って。
あと、もし第二要素数の異なる二次元配列を扱うのであれば、
それと大差ないのは仕方がないんじゃないかな。
まぁ、
#define INDEX2(n2, a, b) ((a) * (n2) + (b))
とかして
param[INDEX2(n, 3, 6)] = 3;
とでもすればいいかと。
もちろん要素数固定ならこんなことする必要ないんだけどね。
447 :
デフォルトの名無しさん :03/01/28 02:24
age
#include<stdio.h> #include<stdlib.h> int main (void){ int k,nsize; int *pnVar; printf("確保する大きさ"); scanf("%d",&nsize); pnVar= (int *)malloc(sizeof(int)* nsize); printf("%dバイトの領域を確保しました\n",4*nsize); for(k=0;k<nsize;k++); pnVar[k]=k*10; for(k=0;k<nsize;k++); printf("pnVar+%d=%p pnVar[%d]=%d\n",pnVar+k,k,pnVar[k]); free(pnVar); return 0; } 何故かエラーがでます。 授業の板所を間違えて写してしまったのでしょうか どなたか対処法をおねがいします。 マロック関数です
お前はその前に日本語を学びなおせ。 for文の後にいきなりセミコロンがあるが、それはどうなのよ?
452 :
デフォルトの名無しさん :03/01/28 16:08
↑お前ね、煽り方がふるくせんだよ。 ジジイかよ
Stack overflowと言うエラーは何ですか?
>>452 ヒソヒソ( ゚o゚)ヤダァ(゚o゚ )ネェ、キイタ?( ゚o゚)オクサン(゚o゚ )アラヤダワァ
大学の研究でいきずまってるんですけど。助けてください。 まず仕事の数を入力して次に仕事の内容を入力して次に仕事別に分けたいのだけどどうしたらいいの? ちなみに仕事は丸ブローチ加工、角ブローチ加工、キーみぞ加工の3種類です。
マロック関数ですか。 なんだか新鮮ですな。
458 :
デフォルトの名無しさん :03/01/28 16:24
>455 質問が漠然としてるな いまいちわからない 研究にかかわってない人間でもわかるように質問して
459 :
デフォルトの名無しさん :03/01/28 16:26
>455 マイコンで旋盤制御でもやるつもりか? お手製のNC旋盤
>450 少しおちついて考えればすぐ解ると思うが、 for(k=0;k<nsize;k++);/* k が nsize になるまで空回り*/ pnVar[k]=k*10;/* ここでは k は nsize と同じ値になっている*/ となっている。 451じゃないが、for文直後のセミコロンはいったい何なんだと小3分ほど(w
>>450 intの大きさをsizeof(int)と書いているところもあれば4と決めつけているところもあるね。
あ、エラーとはなんの関係もないよ。
include<stdio.h> void main() { long sum=0; short ten[10],i,n; printf(“仕事数の入力(10個以内):”); scanf(“%2d,&n); for(i=0;i<n;++i){ printf(“%2d個目の仕事の入力:”,i+1); scanf(“%s”,&ten[i]); sum=sum+ten[i]; } if(?){ printf(“丸ブローチ加工です。\n”); } } ここで()のなかの条件式がわかりません。仕事の内容を入力する時にmと入力されれば ”丸ブローチ加工”です。と表示したいのです。初心者なのでよろしくおねがいします。
>>462 まずは全角のダブルクォーテーションをなんとかしろ。
次に、なんでshortに文字列を入れようとする?
charにすればいいんですか?
>462 sumって何に使うの?
木下君のやりたいことを想像してみよう
469 :
デフォルトの名無しさん :03/01/28 17:24
下記のようなプログラムを作成中の厨房です。 /* int hoge */ while((hoge = fgetc(fpin)) !=EOF){ if(hoge=='#'){ fputc('\n',fpout); while(!feof(fpin)){ hoge=fgetc(fpin); if(hoge=='\n') break; } } else { fputc(hoge,fpout); } } *fpoutの示すファイルにバイナリで書きこみたいので fwriteを使いたいのですが、いまいち使い方が わかりません。特にfputc('\n',fpout);のところです。 '\n'をどのように引数で渡せばよいのでしょうか? 糞みたいな質問で申し訳ありませんがよろしくお願い 致します。
470 :
デフォルトの名無しさん :03/01/28 17:41
>>469 > fputc('\n',fpout);
fwrite(&'\n', 1, 1, fpout);
でも、1文字書き込みたいだけならfputcの方がいいと思うが...
>>471 > &'\n'
これはCなのか?
てか、"\n"でええやん。
473 :
デフォルトの名無しさん :03/01/28 18:18
>>453 スタックがオーバーフローするエラー。
スタックってのは
自動変数(関数内で普通に定義した変数)、
関数の引数、関数の呼び出し元のアドレスなどを
保存しておくところ。
オーバーフローってのは、容量オーバーすること。
つまり、
1. 自動変数が大きすぎる・多すぎる
2. 関数呼び出しが深すぎる
って時に起こるエラーです。
普通は再帰関数の終了条件が満たされなくなるようなバグがあったときか、
3次元以上の配列を確保したが予想以上に大きくなってしまった、という時に起こります。
初心者で,数値計算[円周率]のプログラムをC言語でつくりたいのですが 何をしたらいいかわからず,何か参考になるネタはありますか?
476 :
デフォルトの名無しさん :03/01/28 18:22
>474 検索すればその手の例題は結構あります。
みなさんありがとうございやす。
479 :
デフォルトの名無しさん :03/01/28 18:34
言うと殴られちゃうぬるぽってC言語のNULLのことじゃないんですよね??
( ・∀・) | | ガッ と ) | | Y /ノ 人 / ) < >__Λ∩ _/し' //. V`Д´)/ (_フ彡 /<<479
481 :
デフォルトの名無しさん :03/01/28 18:44
ミナサン ご回答ありがdございます。 while((s = fgetc(ifp)) !=EOF){ if(s=='#'){ fwrite("\n", 1, 1,ofp); while(!feof(ifp)){ s=fgetc(ifp); if(s=='\n') break; } } else { fwrite (&s, 1, 1, ofp); } } 上記のように直したのですが ファイルにはNULLしか入ってないっす・・・ まじ厨でもうしわけないのですが ご教授お願い致します。
>>481 fwrite を使うか fputc を使うかで
バイナリかテキストかは切り替わらないので、
どっちを使っても問題ありません。
というか、
fwrite (&s, 1, 1, ofp);
は危険な(環境依存な)コードなので
fputc 使って下ちぃ。
483 :
デフォルトの名無しさん :03/01/28 19:06
>>482 サソ
ご丁寧な回答ありがdございます。
fputcを使うべしとのことですが
fputcはバイナリで書きこむことが
可能なのでしょうか??
>>481 CPUはなんだ? なんとなくx86系じゃないような香りがする。
>>484 int型のs(多分fgetcを受ける変数なんでintなんだろう)を
*(char*)&s;
と評価したときの値は環境に依存するよ。
fwrite(&s, 1, 1, ofp);
なんてやってる場面はまさにそれ。
ぐぉーーなんか複雑だぁ。 CPUは・・・?よくわかりますぇん。。。 OSはUNIX、ソラリスであることは 間違いないっす。 fputcじゃーバイナリでカキコは無理なんで しょうか・・・
>>487 するとsparcかな。エンディアンしらねえや(w
でも書いたファイルがヌルだらけという状況からいって、
ビッグエンディアンっぽいね。
ともかくその場面ではfwriteを使うんじゃなくて、fputcを使うべし。
fputcは文字をストリームに書く関数というよりは、
一バイトストリームに書く関数って感じなので、バイナリ書けるよ。
何か「バイナリ」という言葉を勘違いしている予感。 というか、何をしたいの? #があるとその行のそれ以降のものを消すコード、 というのなら最初ので合ってるような気が。
>>488-499 サソ
アリガトウゴザイマス
確かに漏れバイナリわかってません。。。
32#more
44#baka
nanoka #utsuda
↑こんな感じのテキストファイル読み込んで
(#以降はコメントの扱いとして省く)
バイナリでファイルに書きこむっていう
プログラムを作っています。
putcでバイナリで書きこめるのであれば
私の仕様でもダイジョウブなんでしょうか?
最近夢にバイナリが出てきます。
鬱です。
491 :
デフォルトの名無しさん :03/01/28 20:02
>>490 32 とか 44 とかをバイナリで書き込むんですね?
でも、nanoka とかバイナリもテキストもないと思いますが
どういう仕様にしたいのでしょうか。
>>491 サソ
アリガdゴザイマス!
おっしゃる通りでして
"nanoka"はそのままカキコで
OKであります。
32やら44をバイナリで書きこみたい
のです。
ご教授お願い致します。
>>492 300get#300geto-
という場合はどうなんでしょう?
何にせよ、fgets で一行読み込んでから処理する方が楽な気がします。
494 :
デフォルトの名無しさん :03/01/28 21:13
age
>493サソ fgetsのほうがよいですか。。。 while(fgets(buf, 256, ifp) !=NULL){ for(src=buf, dst=tmp; *src; src++){ if(*src == "#") *dst++=*src; } *dst='\0'; こんな感じでいけますかねぇぇ。。。
atoi って知ってる?
aoiなら知ってる
ぬ★ぽなら知ってる
hoge = atoi(tmp); でしか?
走査していって数字が見つかれば atoi、 見つからなければ1文字出力、 を続けていけばいいんじゃない?
>498 フセジ カコワルイ
>500サソ 500ゲトの暁にそのコード書いて くださひ。。。 もうアタマがオーヴァーヒートして だめぽ。。。
ヒント挙げすぎちゃったかなと思ってるくらいなのに...。
>>503 ソウナンデスヨネェ
まだC言語触って2週間なのに・・・
こんなん漏れに与えるヤシがおかすぃ。
ほんとおながいしますっ!
>>504 ほらよ。行数多すぎとか言われたんで入るように手を加えた。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char * argv[]) {
char s[512], *p;
FILE *ifp, *ofp;
if (argc != 3) {
fputs("usage: hoge <in> <out>\n", stderr);
return 0;
}
ifp = fopen(argv[1], "rb"); ofp = fopen(argv[2], "wb");
if (!ifp || !ofp) {
perror(NULL);
return 3;
}
while (fgets(s, sizeof(s), ifp)) {
if (p = strchr(s, '#')) *p = '\0';
else if (p = strchr(s, '\n')) *p = '\0';
if (isdigit(*s)) {
int i = atoi(s);
fwrite(&i, sizeof(i), 1, ofp);
}
else
fputs(s, ofp);
fputc('\n', ofp);
}
fclose(ofp); fclose(ifp);
return 0;
}
507 :
デフォルトの名無しさん :03/01/29 00:15
どなたか文字列指数をdouble型へ変換する最も効率の良い方法しりませんか? "3e-5" を 0.00003とする場合など。 お願いします!!
double a; sscanf("3e-5", "%g", &a)
>>508 ものすごくあっさりできるのですね。
ちなみに反対の変換はfcvt()でOKでしょうか?
>>510 了解しますた。
ありがとうございました。
>505サソ・・・ ふぉんとにありがdございます。 家に着いたらそこには宝があったよー!! (゚д゚)ウマー(゚д゚)ウマー(゚д゚)ウマー とりあえずケコーンしてくだはい。
あ、当方、29歳女、バツ2です。 ・・・などとプロフィールを勝手に書いてみるテスト・・・
514 :
デフォルトの名無しさん :03/01/29 01:35
printfをラップしたいのだが、訳あってvprintfは使えないとき、 int myprintf(const char *format, ...){ return printf(?????); } こんなことは出来ないよねえ。 可変個引数をとる関数とva_listをとる関数はセットで用意しておくべき物なの?
>>514 質問の趣旨がわからないんだけど・・・。
518 :
デフォルトの名無しさん :03/01/29 01:47
質問なのですが、 文字をそのままにして計算させることは可能でしょうか?たとえば、 double a=1.2, b=2.3, c, d; d=a+b+c; で、“d=3.5+c”と計算させたいのです。
519 :
デフォルトの名無しさん :03/01/29 01:49
誰か教えてください!出来れば、leap=で始まっている2ヶ所を関数にしたいんですが、どうしたらいいでしょう? そうじゃなくてもこれをもっと短くする方法ってありますかね? #include <stdio.h> main() { static int days_data[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},Feb=28; int i,days1,y1,m1,d1,days2,y2,m2,d2,leap,lapse,ydays; printf("初めの年月日を入力してください : "); scanf("%d %d %d",&y1,&m1,&d1); printf("終りの年月日を入力してください : "); scanf("%d %d %d",&y2,&m2,&d2); leap=(y1%4==0 && y1%100!=0)|| y1%400==0; days_data[2]=Feb+leap; days1=d1; for(i=1;i<m1;i++){ days1+=days_data[i]; } leap=(y2%4==0 && y2%100!=0)|| y2%400==0; days_data[2]=Feb+leap; days2=d2; for(i=1;i<m2;i++){ days2+=days_data[i]; } ydays=0; for(i=y1;i<y2;i++){ leap=(i%4==0 && i%100!=0)|| i%400==0; ydays+=365+leap; } lapse=(ydays+days2)-days1; printf("経過日数は%d日です\n",lapse); }
>>513 一瞬ドキッとしたじゃねえかゴルァ(w
>>519 int isleap(int y1)
{
return (y1%4==0 && y1%100!=0)|| y1%400==0;
}
放置??他スレで聞くYO!
>>523 2 時間もしないうちにそれを言うか?
可能か不可能かと言われれば可能だろうけど、自分でインタープリタ作る事になるよ。
>>519 元年1日(西暦)を1日(延べ日数)とした時の
西暦から延べ日数(i)への変換法(y=year,m=month,d=day)
if(++m<4)y--,m+=12;
i=365*y+y/4-y/100+y/400+306*m/10-428+d;
>524 書きこんだ時点では結構回転早そうだったので・・。 朝までにプログラム作る必要があったので急いでたのでつ。 他スレ逝って来ました。レスサンクスでした。
そろそろテストが始まるのでage
528 :
デフォルトの名無しさん :03/01/29 18:43
ヒロユキ氏ね 俺が、
>>1 のスレでプロキシー奇声すんな〜
int
┏━━━━━┳━━━━━┳━━━━━┳━━━━━┓
char ┃ ┃ ┃ ┃ ┃
┃ 1 ┃ 2 ┃ 3 ┃ 4 ┃
┃ ┃ ┃ ┃ ┃
┠─────╂━━━━━┻━━━━━┻━━━━━┛
┃ ┃
┃ 2 ┃
┃ ┃
┃ 3 ┃
┃ ┃
┃ 4 ┃
┃ ┃
┗━━━━━┛
列*
┏━━━━━┳━━━━━┳━━━━━┳━━━━━┓
行** ┃ [0] [0] │ [0] [1] │ [0] [2] │ [0] [3] ┃
┠─────┼─────┼─────┼─────┨
┃ │ │ │ ┃
┠─────┼─────┼─────┼─────┨
┃ │ │ │ ┃
┠─────┼─────┼─────┼─────┨
┃ │ │ │ ┃
┗━━━━━┷━━━━━┷━━━━━┷━━━━━┛
529 :
デフォルトの名無しさん :03/01/29 18:44
お前のせいでな〜大事なヒトと話できなかったんだYO! 列* ┏━━━━━┳━━━━━┳━━━━━┳━━━━━┓ 行** ┃ [0] [0] │ [0] [1] │ [0] [2] │ [0] [3] ┃ ┠─────┼─────┼─────┼─────┨ ┃ [1] [0] │ [1] [1] │ [1] [2] │ [1] [3] ┃ ┠─────┼─────┼─────┼─────┨ ┃ [2] [1] │ [2] [1] │ [2] [2] │ [2] [3] ┃ ┠─────┼─────┼─────┼─────┨ ┃ [3] [1] │ [3] [1] │ [3] [2] │ [3] [3] ┃ ┗━━━━━┷━━━━━┷━━━━━┷━━━━━┛ 列* ┏━━━━━┳━━━━━┳━━━━━┳━━━━━┓ 行** ┃ [0] [0] │ [0] [1] │ [0] [2] │ [0] [3] ┃ ┠─────┼─────┼─────┼─────┨ ┃ [0] [4] │ [0] [5] │ [0] [6] │ [0] [7] ┃ ┠─────┼─────┼─────┼─────┨ ┃ [0] [8] │ [0] [9] │ [0] [10] │ [0] [11] ┃ ┠─────┼─────┼─────┼─────┨ ┃ [0] [12] │ [0] [13] │ [0] [14] │ [0] [15] ┃ ┗━━━━━┷━━━━━┷━━━━━┷━━━━━┛
530 :
デフォルトの名無しさん :03/01/29 18:47
折れが、作ったアスキーアートだ・・・。使ってくれ
1:事実に対して仮定を持ち出す 「犬は子供を産むが、もし卵を生む犬がいたらどうだろうか?」 2:ごくまれな反例をとりあげる 「だが、時として尻尾が2本ある犬が生まれることもある」 3:自分に有利な将来像を予想する 「何年か後、犬に羽が生えないという保証は誰にもできない」 4:主観で決め付ける 「犬自身が哺乳類であることを望むわけがない」 5:資料を示さず自論が支持されていると思わせる 「世界では、犬は哺乳類ではないという見方が一般的だ」 6:一見関係ありそうで関係ない話を始める 「ところで、カモノハシが卵を産むのは知っているか?」 7:陰謀であると力説する 「それは、犬を哺乳類と認めると都合の良いアメリカが画策した陰謀だ」 8:知能障害を起こす 「何、犬ごときにマジになってやんの、バーカバーカ」 9:自分の見解を述べずに人格批判をする 「犬が哺乳類なんて言う奴は、社会に出てない証拠。現実をみてみろよ」 10:ありえない解決策を図る 「結局、犬が卵を産めるようになれば良いって事だよね」 11:レッテル貼りをする 「犬が哺乳類だなんて過去の概念にしがみつく右翼はイタイね」 12:決着した話を経緯を無視して蒸し返す 「ところで、犬がどうやったら哺乳類の条件をみたすんだ?」 13:勝利宣言をする 「犬が哺乳類だという論はすでに何年も前に論破されてる事なのだが」 14:細かい部分のミスを指摘し相手を無知と認識させる 「犬って言っても大型犬から小型犬までいる。もっと勉強しろよ」 15:新しい概念が全て正しいのだとミスリードする 「犬が哺乳類ではないと認めない限り生物学に進歩はない」 16:反論の代わりに詭弁ということにしてすます。 「それは詭弁です。いいから詭弁なんです。」
532 :
デフォルトの名無しさん :03/01/29 21:17
質問ですが、文字列 "\t\t\tABCD\t\t\t\t1234" とあって、 char *buf1; char *buf2; sscanf("\t\t\tABCD\t\t\t\t1234\t\t","%s%s",buf1,buf2); とするようなコーディングでbuf1にABCD、buf2に1234と入りますか? 他に簡単に格納する方法がありますか?
533 :
デフォルトの名無しさん :03/01/29 21:21
>>532 > buf2に1234と入りますか?
試してみればわかる。
sscanfを使う前に、mallocでも使って領域を確保しておけよ。
>>533 今コンパイラがなく、机上でコーディング考えてるんで…。
お願いします。
>>536 了解しました。
ありがとうございました。
538 :
◆vZrORbBkXs :03/01/29 23:04
#include <stdio.h> main() { int y,m; int c[13],d[13]; long z,n,k,r; int kara,made,i; printf("A.D. "); scanf("%d",&y); printf("Month "); scanf("%d",&m); printf("n"); printf(" SUN"); printf(" MON"); printf(" TUE"); printf(" WED"); printf(" THU"); printf(" FRI"); printf(" SATn"); d[1]=31; d[2]=28; d[3]=31; d[4]=30; d[5]=31; d[6]=30; d[7]=31; d[8]=30; d[9]=30; d[10]=31; d[11]=28; d[12]=31;
539 :
◆vZrORbBkXs :03/01/29 23:04
if(((y%4==0)&&(y%100!=0))||(y%400==0))d[2]=29; c[1]=0; for(i=1;i<11;++i){ c[i+1]=c[i]+d[i]; } z=y-1601; k=z/4 - z/100 + z/400 +1; n=365*z+k+c[m]; r=n%7; kara = 1-r; while(kara<=d[m]){ made=kara+6; if (made>d[m]) made=d[m]; for (i=kara; i<=made; ++i){ if (i<=0) printf(" "); else printf(" %5d",i); } printf("n"); kara+=7; } printf("nn"); } これを修正して欲しいのですが(全部表示されない月があります)
事故解決しました × d[10]=31; d[11]=28; d[12]=31; ○ d[10]=31; d[11]=30; d[12]=31;
541 :
デフォルトの名無しさん :03/01/30 00:30
>>541 Cでは、いわゆるオーバーロードはできません。
これは可変長引数。printfみたいな。
543 :
デフォルトの名無しさん :03/01/30 00:44
>>542 あーなるほど。可変個の引数ですか。
確かにfcntl.hでは三番目は...となっていますね。
flagsによって三番目の引数があるかないか判断しているのかな。
ありがとうございました。
544 :
超初心者の名無し :03/01/30 00:44
超超初心者です。 あるソフトのパッチを当てるのに バイナリデータの変更で 0000E76A: 56 3b と書いてあるのですがどういういみですか
>>544 本当に初心者ですね。
聞くべきスレッドを間違えるなんて。
スレ違いどころか板違いか。
546 :
超初心者の名無し :03/01/30 00:56
追記 別のパッチでは 004167: 10 00 とADRESS部分が6文字なのですが? エデッターでどう入れればいいのでしょうか
エデッターって何ですか?
>>546 int main(void) {
FILE *fp;
fp = fopen("hoge", "w+b");
fseek(fp, 0x4167, SEEK_SET);
fwrite("\x10\x00", 2, 1, fp);
fclose(fp);
return 0;
}
550 :
デフォルトの名無しさん :03/01/30 12:44
可変個の引数を取る関数の中で、与えられた引数の個数以上に読むのはまずいですけど、 少なく読むのはかまわないですよね?
yes
超怒素人です。 @のexeで取得した変数アドレスを Aのexeから入力して変数の値を取得したいのですがうまくできません。 何故でしょうか? @--------------------------------- #include<stdio.h> int main(void) { int a; long *pnt; printf("数値を入力して下さい:"); scanf("%d",&a); pnt = &a; printf("変数のアドレス:%d\n",pnt); printf("そのアドレスに格納されている値:%d\n",*pnt); } A--------------------------------- #include<stdio.h> int main(void) { int a; long *pnt; printf("変数のアドレスを入力して下さい:"); scanf("%d",&a); pnt = a; printf("そのアドレスに格納されている値:%d\n",*pnt); }
ポインタ変数の値が別プロセスで有効な保証は無い、というかまず無効
どうしよう...共有メモリとかの概念とか 物理アドレスと仮想アドレスとかの概念を教えた方がいいのだろうか...
そもそも何がしたいんだろう・・・
557 :
デフォルトの名無しさん :03/01/30 13:27
39という文字が書かれたテキストがあって
この場合の"39"って2バイトですよね?
これを1バイトの39にパックしろって
指令されたんですが、
1.パックってなんですか?
2.パックを実現する方法(関数等)
上記2つに関してご教授下さると幸いです。
以上、初心者ですが宜しくお願いします。
>>552 って
printf("変数のアドレス:%p\n",pnt);
じゃダメなんすかね?
"39"という文字列を39という値にしろということだと思うけど・・・ atoi、strtol、sscanf アドレスを手動で入力させるのってかなり無理がある。
1バイトならsscanfだと面倒か・・・intの変数に入れた後にcharの変数に入れ直さなければならないから。
fscanf(fp, "%2d", &inum); は、いくらなんでも冗談として、 1の質問は指示した人間にするべきかと。 余りに一般的で汎用的な言葉だけに、 その相手がどんなつもりで「パック」と言ってるかわからん。 #尤も、「おまえそんなこともわからないのか」と言われる覚悟が必要だけど。
Packed BCDにしろって意味ではないかと。
一桁4bitで表現するので、0x39となる。
C言語の標準関数にはないです。
とはいえ、
>>560 の言う通り一度確かめた方が確実。
>>561 パック十進数?
二桁なら12bit必要じゃない?
563 :
デフォルトの名無しさん :03/01/30 14:28
ありがとうございました。
564 :
デフォルトの名無しさん :03/01/30 14:58
成績処理プログラムの作り方を教えてください。できれば具体的に プログラムを書いてくださるとありがたいです。
>>564 #include <stdlib.h>
int main(int argc, char **argv);
void getSeisekiData(void);
void calcHyouka(void);
void putKekka(void);
int
main(int argc, char **argv)
{
getSeisekiData();
calcHyouka();
putKekka();
return EXIT_SUCCESS;
}
/* それぞれの処理をこの後に書けば完成w */
>>558-562 サソ
ご回答ありがdです。
>>563 話しおわらさんといてや
int ENZAN (FILE *fp,char x,char y )
{
char z;
x&=0x0F;
x<<=4;
y&=0x0F;
z=x | y;
fwrite(&z, sizeof(z),1,fp );
}
↑こんな感じの処理をパックって
言うもんだと思ってました・・・
>>562 もっと詳しく説明してくれ。
昔にも、それBCDちゃうみたいなこといわれて、
調べ直したことがあったんだけど、
結局、どう解釈が違っているのかわからんかったんで。
>>565 ありがとうございます。
>>567 二桁で8bit、それに符号4bit、併せて12bit。
違うかな。
>>569 =562
1バイトにパックってことだから、符合は考慮しないんでないの?
#寡聞にして、符号付BCDの実例を知らないんだけど。
571 :
デフォルトの名無しさん :03/01/30 20:18
・・すみません、これどうやるのですか? キーボードをでたらめ出鱈目に打つとき、英字(A-Z, a-z) 、数字(0-9)、その他の文字の出現頻度を数えなさい。 Ex.) I am a student. Hello %Enter → a = 2, d = 1, e = 2 初心者であんまりわからないのですが
/* 取り敢えず、こんなもんでどうでしょ。 */ #include <stdio.h> #include <stdlib.h> int main(int argc, char**argv); int main(int argc, char **argv) { int count[256]; int ch; while (ch = getc() != EOF) { count[ch]++; } /* 問題は出力方法 */ return EXIT_SUCCESS; }
573 :
デフォルトの名無しさん :03/01/30 20:49
574 :
デフォルトの名無しさん :03/01/30 20:56
GUIアプリケーションをLinuxで開発したいと思うんですが、 どんなライブラリを使えばいいんでしょうか? どれがお勧めのライブラリなんでしょうか?
>>573 あ、ぼけてた。
面倒だから
static int count[256];
で。
>>577 出力方法はこんなんでどうでしょ。
for (i = 0; i < 256; i++) {
if (isprint(i)) {
printf("%c: %d", i, count[i]);
}
}
ごめん、ちょっと書いてみたくなっただけ。
583 :
デフォルトの名無しさん :03/01/31 00:30
今ユーザー関数作成で困っております。 仕様:テキストファイルを読み込み 行数毎に異なった処理を行い バッファにぶちこむ。 for(cnt=1; (fgets(tmp,256,ipt_fp)); cnt++) 上記のようにすれば行数は数えることが 可能ですよね? int cntに代入された数値を利用し switch (cnt){ case 1: printf("(゚д゚)ウマー\n"); break; case 2: printf("(・A・)イクナイ\n"); break; といった感じにしたのですが cntを関数に引数で渡すにはどのように すればよろしいのでしょうか? 初心者でご迷惑お掛けいたしますが ご教授お願いいたします。
>>583 関数の定義の仕方がわからんということか?
void uma(int cnt) {
switch (cnt){
case 1:
printf("(゚д゚)ウマー\n");
break;
case 2:
printf("(・A・)イクナイ\n");
break;
}
}
とか定義しといて
for(cnt=1; (fgets(tmp,256,ipt_fp)); cnt++) {
uma(cnt);
}
でいいんじゃないの。それともこういうことじゃない?
>>584 さん
ありがとーございます!
なるほど、こうやって定義するんですねぇ。
勉強になります。
cntが1だったら
(゚д゚)ウマーが出力されるのか。
すげー。関数すげー。
関数(゚д゚)ウマー
forを for(cnt=1; (fgets(tmp,256,ipt_fp)); cnt++) という形で使えるやつが、 な ん で 関 数 定 義 が わ か ら な い ん だ ? !
>>586 for は極めたが関数定義はまだ習っていないか理解が不十分。
で充分説明つくじゃないか。
>>586-587 BASICからCに入ったので、(自分で定義する)関数というものを知らなかったに100ペリカ
したがって、mainはおまじないで、main以外の関数は一切なし。
しかもgotoを多用したスパゲッティプログラムだ!
589 :
デフォルトの名無しさん :03/01/31 02:02
Cから始めたけど、2000行程度なら関数はmainだけにするYO!
義理チョコももらえませんが何か?
。・゚・(ノД`)・゚・。
596 :
デフォルトの名無しさん :03/01/31 16:16
int main(){ //略 return 0; } この最後に返してる0ってなんに使うの? 子プロセスとしてプログラム動かしたら wait(&state)とかでstateに入る数値になるの?
>>596 そこまで予想がついてるのなら、wait()のmanを見ればすぐ分かるよ。
statusの値そのものじゃなくて、#include <sys/wait.h> で定義されるマクロ
WEXITSTATUS(status) の値がmainの戻り値になる。
598 :
でふぉるとのななしさん :03/01/31 18:40
Cでネットワークプログラミング勉強できるサイト教えてらさい
600 :
デフォルトの名無しさん :03/01/31 18:43
601 :
デフォルトの名無しさん :03/01/31 20:18
>>597 waitとか出てくるのスレ違いちゃうんか?
602 :
デフォルトの名無しさん :03/01/31 20:20
wait持ち出すんならvoid main()でもそれが直接問題になったりせん罠
603 :
デフォルトの名無しさん :03/01/31 21:01
>>596 main()からのリターン値でコマンドが成功したか、どうか判断する!
604 :
デフォルトの名無しさん :03/01/31 21:49
>>596 >この最後に返してる0ってなんに使うの?
結論から言う、それはあんたが決めることだ
さもないとあんたの書いているアプリを使いに来る者
全員に聞いてまわる羽目になる
605 :
デフォルトの名無しさん :03/01/31 21:57
二次元配列p[3][10]のポインタって *p[3]?*p?
それの先頭を指すポインタなら、(*p)[10]
607 :
デフォルトの名無しさん :03/01/31 22:04
p+1はp[1][0]になる?
違う違う。*(p+1)がp[1]になる。
p+1なら&p[1]だ。
611 :
デフォルトの名無しさん :03/01/31 22:10
p[1][1]は何になる?
pの型をTとするならT&だな
613 :
デフォルトの名無しさん :03/01/31 22:56
p+1はp[1]だろ
p[0]+1 は &p[0][1] ?
sizeof(p[0])+p
616 :
int no_name :03/01/31 23:36
いきなりですが、携帯電話(ちなみにJ-phone)で見れる関数リファンレ ス(というか簡単な文法)のサイトあれば教えてもらえませんか?
617 :
デフォルトの名無しさん :03/02/01 00:12
619 :
int no_name :03/02/01 01:23
>>617 15年前は自分で考えたよ。
>>618 「例のtelnet」てシェルにもアクセスできるの?
man の内容を加工して表示する CGI を作るとか...。
621 :
int no_name :03/02/01 02:03
>>620 深よみしすぎ(苦笑
オレはman読む方が早い。
昔と違って時間がないの!(笑
>>621 プロトタイプだけまとめて自分宛にメールしたら?
623 :
int no_name :03/02/01 02:22
>>622 いいこと言うねェ。
なぜオレがそれをやらないか(笑
これは時間がないわけじゃない。
624 :
デフォルトの名無しさん :03/02/01 06:49
ノノノノ ( ゚∋゚) ハッ!
625 :
デフォルトの名無しさん :03/02/01 14:35
626 :
デフォルトの名無しさん :03/02/01 14:50
>>626 無理せずにVisual C++ .NETを買いましょう。
■ Step 3 : autoexec.batの書き換え これか? 今autoexec.batなんか使わないだろ 2000やxpならシステムのプロパティでPATHを設定する
>>625 左側にある
2482 [e161]char は遅い
のリンク先
解説の
「普通の人の処理時間 370msec」って何?
悪いけど、笑ってしまいました。
632 :
デフォルトの名無しさん :03/02/01 20:07
次のようなソースをmain文と一緒に書いてコンパイルして実行すると 「このプログラムは不正な処理を行ったので強制終了されます。」 といじめられます それともただ単に僕がバカなだけなんでしょうか? void shell_sort(int *array,int num) { int i,j,h; int val; num-=1; for(h=1;h<=num/9;h=3*h+1) ; for(;h>0;h/=3) { for(i=h;i<num;i++) { val=array[i]; for(i=i;j>=h&&array[j-h]>val;i-=h) { array[j]=array[j-h]; } array[j]=val; } } } ご教授願います
>>632 配列の範囲を超えて書き込んでいないか調べる。
>>633 if(array[num]!=NULL)
{
printf("領域破壊");
array=NULL;
exit(1);
}
みたいなカンジでOKですか?
>>634 arrayの要素はintなのになぜNULLと比較する?
なぜarrayにNULLを代入する?
調べるってのは自分の頭を使って調べるんだ。
>>635 ごめんなさい
自分の中で「領域外の要素=NULL」だと思っちゃってるんで
もし領域外の要素を使っていたらarrayにNULLを代入して
終了するってつもりだったんですが
確かに今ちゃんと考えれば実引数の内容を変える事に
なっちゃうんだからマズイですよね
拙い点は他にもある。 次の辺りを抑えておくといいと思う。 ・領域外かどうかの判断方法 ・NULLの型 ・コンパイラの警告Lvとその内容 ・ソースを客観的に読む
>>637 それでさっきから気になってたんですけど
NULLって何型なんですか?void型?
常識的なことも分からなくてすみませんです
>>638 Cだとvoid *にキャストされた0ということが多い。
C++だとキャストなしにvoid *を他の型のポインタに代入できないから単なる0だけど。
NULL をポインタ型以外の文脈で使用した場合、未定義の動作になる。 数値の 0 とポインタ値の 0 (NULL) は別物なので注意。
(void*)型かぁ 何かの本でvoid*型は何でも代入できる汎用的な型だけど その分色々問題もあるとか読んだ気がします でもやっぱりそれを使いこなせてこそプログラマーなんですよね
使いこなせた上で欠点を言えるのが真のプログラマ。 欠点が言えないのはただの盲目。
>>642 正確に言うと void * 型は、関数型を除く、あらゆる型への
*ポインタ*を代入できる型。
>>643-
>>646 そうなんですかー
確かmallocの戻り値の型はvoid*ですよね
前にキャストしてmallocを使ってるのを見たことあるんですけど
あれは意味があるんですか?
>>647 昔はvoidがなかったからmallocの戻り値の型をchar *にしていた。
だからキャストしていたんだけど、今はstdlib.hさえインクルードすれば必要ない。
あと、C++だとキャストが必用だったかな。
>>649 > あと、C++だとキャストが必用だったかな。
その理由は
>>640 に書いてあるよ。
>>649 > あと、C++だとキャストが必用だったかな。
つーか、C++ だったら new 使えよ。
652 :
デフォルトの名無しさん :03/02/02 12:06
#include<stdio.h> って書きますが、stdio.の後のhって何の意味があるんですか? ググってみても、stdioの意味は解説してあるんですが、.hの意味を解説しているページは見当たりませんでした。 あと、int main()をよく目にしますが なぜmain()の前にintをつけるのですか? 付ける理由がわかりません。 初歩的な質問とは思いますがよろしくお願いします。
>>652 > stdio.の後のhって何の意味が
stdio.hというファイル名をもつファイルをインクルードしろと言う命令だから
> intをつけるのですか?
intの場合は省略可能だが、わかりやすくするため。
>>652 でもintをつけた場合はreturnしないとダメ
> でもintをつけた場合はreturnしないとダメ ダウト。
656 :
デフォルトの名無しさん :03/02/02 12:40
C99厨のおでまし。
ANSI C でもそうなっていますが。
main{}をBCC32(最新版ではない)でコンパイルしたら「関数は値を返すべき」と警告が出たと思ったが・・・・・
>>654-659 [0が返る]ようになったのはC99/C++からだが、
C90でも [ホスト環境へ返る値が未定義] になるだけだろ?
>>652 ただの拡張子。
自作ヘッダならべつに.hである必要は無し。
655 じゃないが、65 はダウトだぞ。 return で値を返すかどうかは、関数の型指定の int を省略したかどうか とは関係がない。 main() と int main() は結局一緒だろう。
> 655 じゃないが、65 はダウトだぞ。 65 じゃなくて 654 ね。
まとめると、 ・mainの型はintでなければならない。これは規格で決まっている ・mainの型を指定しなかったときはint型を返すと仮定される。 これは、Cの規約で明示的に返却値を指定しない関数はintを返すと 仮定されることによる ・いわゆるC99では、mainで値を返さなかった場合(return文やexit関数などを 経由せずにプログラムが終了した場合)、0を返すことになっている ・C99でない場合、mainはintの値を返さなければならない これでOK?
漏れにはそれで問題は見つからなかった。
666 :
デフォルトの名無しさん :03/02/03 19:48
引数の文字数を参照する為にその配列のサイズを測りたいのですが、 ↓とするとどうもポインタのサイズを測っちゃうみたいでうまくいきません。 どうすれば配列の大きさを測るように出来ますか? #include<iostream.h> int main(int argc,char **argv) { int x[3]; cout<<"x:"<<sizeof(x)<<endl; cout<<"argv[1]:"<<sizeof(argv[1])<<endl; }
668 :
デフォルトの名無しさん :03/02/03 20:02
失礼。では気を取り直して… #include<stdio.h> int main(int argc,char **argv) { int x[3]; cout<<"x:"<<sizeof(x)<<endl; cout<<"argv[1]:"<<sizeof(argv[1])<<endl; }
つーか文字数を知りたいのならstrlenを使えばいいだろうが。
>669-670 おぉ〜Thanx! でもどうやればポインタのサイズではなく、配列のサイズを参照できるんでしょう?
動的に確保したものは測れないのですか?
675 :
デフォルトの名無しさん :03/02/03 20:31
>>671 #include <iostream.h>
#include <string.h> //strlen関数を呼ぶヘッダ
int main()
{
char s[] ="itteyosi";
int len = strlen(s);
cout << s << "の文字数はな " << len << " 個だゴルア!!" << endl;
return 0;
}
てだめなの?
初心者だけど・・・
676 :
デフォルトの名無しさん :03/02/03 20:35
#include <iostream.h> #include <string.h> //strlen関数を呼ぶヘッダ int main() { char s[100] ; cout << "なんか文字入れろや!!ゴルア!!"; cin >> s; int len = strlen(s); cout << s << "の文字数はな " << len << " 個だゴルア!!" << endl; return 0; } これ、動的に文字数カウントしてるって言えるの? 初心者だけど
スレ違いだっつってんだよヴォケしね
>>583 で関数作成の質問をさせていただいた
厨房です。
また同じ質問なのですが
for(cnt=1; (fgets(tmp,256,ipt_fp)); cnt++)
でchar tmp[256]にぶち込んだものを
switch文内で使用することになりました。
その際
void uma(int cnt) {
switch (cnt){
case 1:
printf("(゚д゚)ウマー\n");
break;
case 2:
printf("(・A・)イクナイ\n");
break;
}
}
上記の処理にどのように引数で渡せばよろしいのでしょうか?
ほんと厨でご迷惑お掛け致しますがよろしくお願い致します。
>>679 まずは無駄なfgetsのまわりのかっこをはずせ。
cntを関数に渡す?関数呼び出し時に引数リストに加えればよいのでは?
tmpか・・・ void uma(int cnt,char *tmp)
char→intならatoi() 主旨あってるかな?
>char→intならatoi() (#゚Д゚)ハァ?
684 :
デフォルトの名無しさん :03/02/03 23:33
お世話になります。 IPアドレスを表す文字列を数値に変換する良い方法ありますか? 255.255.255.255 → 0xFFFFFFFF っていう風に。
unsigned long inet_addr(const char *cp);
unsigned int n = 255; n += 255 << 8; n += 255 << 16; n += 255 << 24; とか・・・
>>685 ありがとうございます。
ちなみにその関数はサブネットマスクは駄目なんですかね〜。
…駄目そうですね。。
>>686 255.255.255.255とは限らないんです。
192.168.0.1なども処理したいので。。
typedef union test{
int addr;
char A[1];
char B[1];
char C[1];
char D[1];
} addr_t;
として、
sscanf("xxx.xxx.xxx.xxx", "%s.%s.%s.%s", addr_t.A,addr_t.B,addr_t.C,addr_t.D);
とするものありですかね〜?
(↑書式怪しいです。)
でも、inet_addrの方が全然スマートですね。
typedef union ip { int addr; char bytes[4]; } addr_t; addr_t foo; sscanf("192.168.0.1", "%d.%d.%d.%d", &foo.bytes[0], &foo.bytes[1], &foo.bytes[2], &foo.bytes[3]); printf("%x\n", foo.addr); /* 不毛だ・・ */
690 :
デフォルトの名無しさん :03/02/04 01:08
691 :
デフォルトの名無しさん :03/02/04 01:23
>>689 %pを使ってください。おながいします。
692 :
デフォルトの名無しさん :03/02/04 01:25
へぇ、埼玉県の中に東京都練馬区の一部があるんだ。
694 :
デフォルトの名無しさん :03/02/04 02:11
C言語を勉強するのに分かり易い参考書ってありますか? たくさん本があるから、どれがいいのかわからなくて。 自分はPASCALを少し使えるくらいです。 あと、パソコンの専門用語もあまりわかりません。 よろしくお願いします。
>>695 ありがとうございます。
今度書店で探してみます。
698 :
デフォルトの名無しさん :03/02/04 11:05
>>693 どこの誤爆だ?
・・・が、その近隣の住人なんで気になった。
4〜5軒の家だけ飛び地になってるんだよ。
>>680 サソ
ご回答ありがdございますた!
謝謝
>>698 テレビ番組板だね。昨日の「トリビアの泉」でやってた。
しかしなんでム板に誤爆…。
701 :
デフォルトの名無しさん :03/02/04 11:31
int i; int *p; i=*p++; これは、 i=*(p++); ですか?
>>701 試してみればわかるでしょ。
pが指すものをiに代入し、pの値を1ふやす。
>>701 そう。
リファレンス見ればわかるはずだけど、無いの?
プリプロセッサもCの範疇だよね??
>>704 C という言語の一部ではないけど、C という処理系の一部ではある。
>>705 なるほど・・・
なんか他の言語にも流用できるとか・・・
>>706 アセンブラに流用するのが割りと見かけるようとかな。
後は、ソース解析系のツールも利用している。
708 :
デフォルトの名無しさん :03/02/04 12:04
struct hoge { char ahya[16]; } PIYO; こんな構造体があって ポインタから要素にアクセスするときは PIYO->ahyaになりますよね? この要素に文字列をぶちこみたいのですが どのようにすればよろしいのでしょうか? 御教授ください。 よろしくお願い致します。
strcpy(PIYO->ahya, "適当な文字列"); /* 但し文字列の長さに注意 */ sprintf(PIYO->ahya, "%.15s", "応用が利く方法"); 間違っても、strncpy()を使ったり自前で一文字ずつコピーしないように。
って、書いてから気付いた。 PIYOはポインタ変数じゃないじゃないか。 なので一応フォロー。 struct hoge *pPiyo; pPiyo = &PIYO; strcpy(pPiyo->ahya, "後は応用しる");
PIYO.ahya[0]='h';PIYO.ahya[1]='o';PIYO.ahya[2]='g';PIYO.ahya[3]='e';PIYO.ahya[4]=0;
strcpy((&PIYO)->ahya, "後は応用しる");
char *p = &PIYO.ahya; strcpy(p, "後は応用しる");
715 :
デフォルトの名無しさん :03/02/04 16:26
C言語ものすごい勢いで勉強しています。 ちょっとどうしても並列が苦手でわからないんでご教授ください int x, ary[3]; for(x = 0; x < 3; x++) { ary[x] = 10 * x; printf("%d\n", ary[x]); ってのがあったとします 「ary[x] = 10 * x;」のことなんですが x==2としたら20がary[x]のxに代入されますよね? その代入されたxってのはaryの要素番号じゃないんですか? プログラムを見ると、xは要素そのものを指してるようなんですが そこのところが全然意味わからないのです。。。
717 :
デフォルトの名無しさん :03/02/04 16:30
>>716 すんません意味不明で
つまりary[x] = 10 * x; だとary[x]のxは要素番号じゃないの? ってことなんです
'配列'な CPUの並列処理じゃないんだから。 x==2としたら'2'がary[x]のxに入る、と思うが。 結果としてxは、要素番号だと思うが。 10*xが要素そのものか?
いや、やっぱわからん。 20が代入されているのはary[x]であってxではないぞよ?
そそ「配列」でした(w 実はこれまで割とすんなり勉強できてたんですが、配列がどうも納得いかないのです 「20が代入されているのはary[x]であってxではないぞよ?」ってのがどうもわかんないす ary[x]は変数のようなものなのでしょうか? 例えば int a = 5; みたいな それなら納得いくんですがなんか違うような・・・ほんとスマソ こんな質問しちゃって
721 :
デフォルトの名無しさん :03/02/04 16:44
何で今のゲーム業界はC++が使われてないの?
>>720 処理結果より、アドレス:値:Cの定義した変数の名前
08047a94:00:any[0]
08047a98:0a:any[1]
08047a9c:14:any[2]
08047aa0:03:x
>>720 配列は入れ物
アパートとかホテルの部屋のようなものを想像すればいい
正直まだわかんないですけど、何人かの人が答えてくれたものを理解できるようがんがります なんかお邪魔してすいませんでした みんなありがとうヽ(´ー`)ノ
int x;のイメージ ┌─┐ │ │x └─┘ int ary[3];のイメージ ┌─┬─┬─┐ │ │ │ │ary └─┴─┴─┘ x = 2、ary[x] = 20のとき、 ┌─┐ │ 2│x └─┘ ┌─┬─┬─┐ │ │20│ │ary └─┴─┴─┘ 等幅な環境にコピペすれば判るっしょ。
> x==2としたら20がary[x]のxに代入されますよね? x==2としたらary[2](ary[x])に20が代入される。 > その代入されたxってのはaryの要素番号じゃないんですか? あくまで代入されたのはary[2]。xはaryの要素番号は正しい。 > プログラムを見ると、xは要素そのものを指してるようなんですが 纏めると、ary=配列, ary[x]=配列の要素, x=配列の要素番号
・・・みんななんていいヤツなんだ! これで完全に時間かけたら理解できそうっす! ほんと感謝、感謝です 今ほんとに本気でCを勉強してるんだけど、すごくおもろいですね〜 早くC++とかできるようにがんがります ほんとありがとうね!
729 :
デフォルトの名無しさん :03/02/04 17:45
bcc32でAPI関数ShellExcuteをしたいのですがコンパイルエラーになります。 shellapi.hをインクルードして bcc32 -W ソースファイル.c でコンパイルしてるのに、何故ですか?
>>729 リンクエラーでしょ?
必用なライブラリをリンクするようにリンカーに伝えればよい。
方法はスレ違いなので、Borlandフリーコンパイラスレできいてね。
>>729 エラーの内容を書かないのに診断できると思うのか?
>>708 デシ
ミナサソの御教授を元に
下記のようにやってみますた。
void OrehaAfo (int i,char *s, struct uma *ahya){
char hoge[512];
char dmy[512];
switch ( i ) {
case 1:
sscanf( s, "%x #%s", &hoge, &dmy );
strcpy(ahya->priority, hoge) ;
printf("buf NO.1=%s\n",&CMQ->priority);
break;
case 2:
ってな具合にしたんですが,コンパイル時に
警告: ポインタ/整数の組み合わせは不適切です: 1 番目の引数
という警告がでてしまいます。。。
わからんっす、わからんっす。
異常な点をご指摘していただけるとありがたいのです。
異常なのはオマエの脳内とか勘弁してください。
よろしくおながいします。
>>732 sscanf( s, "%x #%s", &hoge, &dmy );の&dmyとprintf("buf NO.1=%s\n",&CMQ->priority);の&CMQ->priorityの&は不要でしょ?
あと、配列名に&をつけてはだめ(&hoge)。sscanfの%xにはint *を与えること。
・・・・。配列名に&をつけてもいいのか。。。
char (*)[512]になるんだから当たり前か(^_^;)
736 :
デフォルトの名無しさん :03/02/04 21:32
'\0' を含んだ文字列を標準入力から読む時 char buf[10000] = {0}; char *p = buf; int ret; while (ret = read(0, p, 100) > 0) { p += ret; } これで合ってますか?
>buf[10000] = {0}; 無駄無駄無駄あぁぁッ
738 :
デフォルトの名無しさん :03/02/04 21:42
ついくせで... でも、それ以外は間違いないですか?
buffer overrunするのを間違いに入れないならば。
問題外
overflow?
freadで10000バイト読むというやりかたじゃダメなのか?
ありがとうございました うまく動きそうです
落第
>>736 stringstream ss;
ss << cin.rdbuf();
が正解
逝ってよし
わかりにくい質問でしたので再度質問させていただきます struct hoge{ int t;/* ヘキサでぶち込む用 */ char s;/* ヘキサでぶち込む用 */ char ss[16];/* 文字列用 */}; 上記のような構造体がありまして void MajiWakaran (int i,char *s, struct hoge *piyo){ char hoge[512,odamy[512]; switch ( i ) { case 1: sscanf( s, "%x #%s", &hoge, &odamy ); strcpy(&piyo->t, hoge) ; printf("int t = %s\n",&piyo->t); break; case 2: sscanf( s, "%x #%s", &hoge, &odamy ); strcpy(&piyo->s, hoge) ; printf("char s = %s\n",&piyo->s);break; case 3: sscanf( s, "%x #%s", &hoge, &odamy ); strcpy(piyo->ss, hoge) ; printf("char ss = %s\n",&piyo->ss);break; 上記のような関数があります。 printfした結果、int tとchar sが空白になってしまいます。 この関数は for( CNT=1; fgets(dmy2,256,ifp) !=NULL; CNT++){ Fhk_ipTRSF(CNT,dmy2,&piyo);} ↑のような使用法でmain関数内に配置しております。 int tとchar sが空白になってしまう原因を御教授いただけると幸いです。 お願い致します。
続き ファイルから読みこんだバッファは void MajiWakaran (int i,char *s, struct hoge *piyo){ のchar sに格納されているはずでして、 int tには"0F680000" char sには"01"が入っております。
749 :
デフォルトの名無しさん :03/02/04 22:29
>>747 printf("int t = %d\n",piyo->t); break;
printf("char s = %s\n",piyo->s);break;
strcpy?
>>734 配列変数をポインタとして評価した時、& があるか無いかでは型が違うから気をつけろ!
752 :
デフォルトの名無しさん :03/02/05 02:32
freopen("c:\\stdout.txt", "w", stdout); のようにして標準出力をファイル出力に変えたのだが、 もとのコンソール出力に戻にはどうすればいいの?
解決した。 freopen("/dev/console", "w", stdout); freopen("CON", "w", stdout); のように直接指定しなければならないのね。
754 :
デフォルトの名無しさん :03/02/05 03:17
「XXだったら非0,XXでなかったら0を返す」という関数を幾つか作って、 int a = isXXX(); a &= isYYY(); とお馬鹿なコードを書いていたらバグりました。 1行目が1を、2行目が2を返していたからです。 「isXXX()かつisYYY()でaは非0」のつもりが、(1&2)、そう、0ですた。 ↑これに対する修正をしていて、ふと思ったこと。 (2&&4) が返す値は、1?2?4?
1(真)
756 :
デフォルトの名無しさん :03/02/05 03:38
配列に文字列をいれて、その文字の文字コードを調べるときには 一度別の変数に入れて調べるしかないのでしょうか? str[0]の文字コードを調べる時には char str[] = "ABC"; char buf; buf = str[0]; printf("%d",buf); 別の変数に入れずにスマートに行きたいのですけど この方法以外でないのでしょうか
printf("%d", str[0]);
758 :
デフォルトの名無しさん :03/02/05 03:52
夜釣り禁止!
759 :
デフォルトの名無しさん :03/02/05 03:58
質問です。 array1[N]に対して何らかの処理(ソートなど)を行い、 array2[N]、array3[N]・・・と名前の違う配列にまったく同じ処理を 行う場合に、同じ処理を繰り返し書かないようにしたいです。 ポインタを使って解決するにはどうすればよいでしょうか。
array1,array2,...へのポインタからなる配列をつくってループ
761 :
デフォルトの名無しさん :03/02/05 04:06
>>759 いっそ、2次元で配列を確保して
forループのなかで array[i][j]で行う
>>760 int *array[M] = {array1, array2, array3, ・・・};
という感じでいいですか?
763 :
デフォルトの名無しさん :03/02/05 07:50
FILE *fp fp = fopen( C:\\WINDOWS\\DATA.txt, "a+" ); a+モードで開いた既存の(既にデータが入っている)テキストファイルに、 ファイルの先頭から新たに(全てのデータを消して)書き込みたいのですが どうもうまくいきません。(rewindとかfseekとかやってみましたが ) 既に入っているデータを使用して計算し結果を同じファイルに出力するため a+モードでやらなければなりません。 スマートなやりかたはないでしょうか。
#define numberof(x) (sizeof(x)/sizeof(*(x))) int *arrays[] = {array1, array2, array3,}; int ic; for (ic = 0; ic < numberof(arrays); ic++) { nanrakanoshori(arrays[ic]); } 定数Mはやめとけ。
>>763 "a"や"a+"は「追加」のためのモードなのでファイルの先頭には行けない。
既存のファイルの先頭にもアクセスしたいなら"r+"で開いて自分でfseek()すればいい。
>>749 サソ
ご回答アリガdございます。
ご指摘くださった方法で
コンパイルは通るのですが
実行しますと
core dump吐きます。。。
セグメント例外(コアダンプ)と・・・
int t は表示されるのですが
(でも、"0"がかえってくる・・・)
char sは表示されないので
char sに問題があるようなのですが
わかりません。。。
再度でもうしわけございませんが
御教授お願い致します。
>>766 =747
ツッコミどころ満載で何処から手をつけていいやらなんだけど、
sscanf()の第3パラメータは激しく間違い。
#sscnaf()とprintf()、構造体の使い方をそれぞれきっちり理解してから組み合わせよう。
>>767-768 サソ
ご指摘ありがとうございます。
void OrehaAfo (int i,char *s, struct uma *piyo){
char hoge[512];
char dmy[512];
switch ( i ) {
case 1:
sscanf( s, "%x #%s", hoge, dmy );
strcpy(piyo->t, hoge) ;
printf("buf NO.1=%s\n",piyo->t;
break;
case 2:
sscanf( s, "%x #%s", hoge, &odamy );
strcpy(piyo->s, hoge) ;
printf("char s = %s\n",piyo->s);
break;
というような具合に修正したのですが
同じ結果です。
sscanf()の第3引数が腐ってるとのことですが、、、
正直ど厨初心者でよーわかっておりません、、、
ご指導 き ぼ ん ぬ 、、、
ごめん、第3パラメータそのものじゃないや、第3パラメータに渡しているhoge周りが滅茶苦茶。 (1)"%x"の意味は判る? 判ってないならごちゃごちゃ修正せずにsscanf()だけのサンプルつくって納得いくまでやってみな。 (2)intへstrcpy()しようとしているけどこれも判ってないっしょ。 判ってないなら(以下同文)。 (3)承知してやってるなら別だけど、構造体のタグと同じ名前の変数は定義するな。 兎に角いっぺんにやろうったって無理だって。
Error:
>>747 /
>>769 printf系の%d%l%f%・・書式が理解できていません
Error:
>>747 /
>>769 int,char,char[],*char などのデータ型が理解できていません
Worning:
>>747 /
>>769 ポインタと実体が理解できていません
間違いの有無を別として、ソースを見ても仕様が理解できないのはめずらしいのだが
とりあえず、scanfに与える引数には&をつける必用があると思いこむのはやめよう。
>>771 708から延々と見ていくと少しは判るかも。<仕様
#漏れは判らなかったから任せた。w
774 :
デフォルトの名無しさん :03/02/05 12:56
インテルのコンパイラがほしいです。
775 :
デフォルトの名無しさん :03/02/05 13:23
そっか
>>775 Winnyでひっかからないんですけど(T_T)
セブ〜〜ンセブ〜〜ンセブ〜〜〜〜ン セブンセブンセブン
インテルってコンパイラ出してたっけ?
クソレス申し訳ないが・・・ C言語ってC++のことですか? __________________
↓餌
↓釣り針
ある関数の仮引数がポインタ変数のポインタ変数であり、 2次元配列をその関数の引数として渡したい場合、 その関数を呼び出す側は、どのように実引数を渡せばよいのでしょうか? (ただし、関数の仮引数がポインタ変数のポインタ変数であることは 変更不可、という条件があります) #include <stdio.h> void mess(int **p); int main(void){ int i, j; int **p[2][2], *p2[2][2], p3[2][2]; for(i=0; i<=1; i++){ for(j=0;j<=1;j++){ p2[i][j] = &p3[i][j]; p[i][j] = &p2[i][j]; **p[i][j] = i*j; printf("%d\n", **p[i][j]); /* 値は正しく入っている */ }} printf("\n"); mess(*p); /* ここはどうすれば? */ return 0; } void mess(int **p) /* 問題上、定義側がポインタのポインタであることは変更不可 */ { int i, j; for(i=0; i<=1; i++){ for(j=0;j<=1;j++){ printf("%d\n", p[i][j]); }}}
うぅ…死にます。死んで来ます…
786 :
デフォルトの名無しさん :03/02/05 18:49
**str *str[] str[][] これらのいずれも同じように感じるのですが、どうなのでしょうか?
Now preparing the installation...
788 :
763 >>765ありがとうございます。 :03/02/06 00:14
FILE *fp
fp = fopen( "C:\\WINDOWS\\DATA.txt", "?????" );
ううう、
>>763 で既存のファイルを開くと書きましたが、
ファイルがない場合は新しくファイルを生成する必要がでてきました。
ファイルがある場合は書き込まれているデータを使用して計算し結果を同じファイルに出力します。
fopen( "C:\\WINDOWS\\DATA.txt", "rw+" );
↑だとDATA.txtがない場合はファイルを新しく作ってくれるのでいいのですが、
DATA.txtがある場合はファイルを壊して新しく作ってしまうので使えません。
また、ファイルの先頭からデータを書き込むので"a+"や"a"は使用できません。
つーか、ファイルがあるかないか調べてある場合とない場合でfopenのデリミタの指定を変える必要がある?
それだとスマートじゃないような。。。
よろしくお願いします。
>>788 WindowsならCreateFile使えばいいじゃん。
パラメータは自分で調べろ。
790 :
デフォルトの名無しさん :03/02/06 00:48
浮動小数点演算例外ってなにですか? 0で割るとかそういう類のものなのでしょうか?
791 :
デフォルトの名無しさん :03/02/06 00:48
>>790 yes.
但し処理系依存。
例外出さずにInfやNaN返すような処理系も有る。
>792 おぉ、有難う!
>>792 その書き方も処理系依存だから、無限大値 (Infinite) とか非数値(Not a number)
とか書いた方が。
>>786 それらが同じ意味を持つのは関数の引数で現れたときだけだ。
変数の宣言(定義も含む)を行ったときはその三つは全然違う意味になる。
796 :
en252.ade.ttcn.ne.jp :03/02/06 01:55
関数がかなりややこしくなって丸ごときれいに書き直したモジュールに 変えたいんだけども以前の関数と同じ動作をするかどうかを 全パスチェックするのは大変なので、この際処理時間は無視していいから ロジックとして同じ動作をすることを証明してくれる ソフトってないでしょうか?
797 :
デフォルトの名無しさん :03/02/06 01:58
>>786 **str ポインタのポインタ
*str[] ポインタの配列
str[][] 二次元配列
ポインタはアドレスを保管しておく変数である。
例えば配列の先頭アドレスを保管しておいて、
配列の様に使うことができる。
その場合、配列の置いてある場所と
ポインタの置いてある場所は別であることは
十分注意しなければならない。
配列にはそのようにアドレスを保管しておく場所は存在しない。
従って、メモリ上に置かれるのは
配列そのもののみである。
これらのことを考慮に入れて、
それぞれメモリ上にどう置かれているか、
紙の上に書いてみよう。
>>797 補足ありがとさん。不親切な書き方だなと反省してた(w
んで、
>>797 は変数の宣言・定義の時のことな。
関数の宣言の引数に現れたときは三つとも同じ**pと見なされる。
>>796 どういう状態であれば 「同じ」 と判断できるのか、条件を言ってみてくれ。
>>796 アルゴリズムの自動証明ソフトなら作れば大金持ちになれそうだな
実際に全ての入力についてチェックするのは実質的に無理だな、
内部状態があるとなお大変だ。自分で証明するしかないだろ
>>796 両モジュールに適当にいろいろなデータぶち込んで、
出力値が同じになるかどうかを確かめるというのはだめかの…?
803 :
デフォルトの名無しさん :03/02/06 07:06
内部状態は時々グローバル変数にコピーして確かめる。
804 :
763 > :03/02/06 07:30
>>789 ありがとうございます。
調べてみます。
805 :
デフォルトの名無しさん :03/02/06 12:31
>>798 違いますよ。
関数の引数では
**p ポインタへのポインタ
(*p)[N] 配列へのポインタ
*p[N] ポインタへのポインタ(Cでは本当は無理だったはず)
p[M][N] 配列へのポインタ(Cでは本当は無理だったはず)
となります。
こういった違いは二次元配列をソートする関数を
作る時とかに重要になります。
ポインタって具体的にどんな時に使えるのですか? 構造体リストとか構造木には使えると分かるのですが
>>806 不要だと思うなら使うべきではない。
でも、文字列操作とかにはよく使うし、動的メモリ確保をするならポインタに
頼らざるを得ない。
>>807 そういえば確かにmallocとかは対象がポインタじゃないとダメですよね
も1つ質問なのですが変数宣言で
char array[]="iteyo-shi";
と宣言したとします
これをポインタを使って宣言すると
char *array="iteyo-shi";
でいいんですか?
違うような気はするのですが厨房なので違いが分かりません
ご教授お願いします
809 :
デフォルトの名無しさん :03/02/06 14:55
Direct3D のサンプルで FLOAT x = (FLOAT)sin(....); というのを よく見かけるのですが、上記のようなケースで sin() の戻り値を 明示的に FLOAT型へキャストする必要はあるのでしょうか。ちなみに typedef float FLOAT; となっているようです。
>>810 いえ double から float へは暗黙に型変換が行われるのじゃ
ないかと思ったので。浮動小数点型のキャストに付いて理解が
足りない部分があったのだろうかと
>>811 =809
明示的に書いておきたいだけじゃないの?
そもそもfloat使う段階で普通じゃないから理由がわかんないけど。
>>809 floatはDirect3Dのハードウェアとの整合性うんぬんの話では
C++コンパイラは型キャストに厳しい
C++?
>>809 lintを黙らせる為にそういうことをすることはある。
みなさんどうもです 特に意味があるキャストではなさそうなので安心しました。 C# では double → float でキャストが必要みたいなので 混乱しそうですね。
C#?
まだCをやり始めて一ヶ月ほどなんですが、オリジナルのライブラリを使いたいのに、標準のライブラリが適用されてしまいます。 どこか弄らないといけないのでしょうか? 環境はCygwinです。
使いたい関数を、標準ライブラリに含まれているものと名前を変える。 それができないならライブラリを評価する順序を変えるしか。
820 :
デフォルトの名無しさん :03/02/06 21:31
>808 char array[]="iteyo-shi"; char *array="iteyo-shi"; 実体が何処におかれるか?だな。 array[]="iteyo-shi"; こっちは実体。 んで、 char *array="iteyo-shi"; こっちはcharのポインタがさすどっかのアドレスに "iteyo-shi"を代入してるつう事では? 危なくねぇ?それって。 俺も糞厨房なんだけど。
>>820 > こっちはcharのポインタがさすどっかのアドレスに
> "iteyo-shi"を代入してるつう事では?
アフォ。"iteyo-shi" が書いてあるどっかのアドレスを array に代入してんるんだ。
危なくはない。
ただし、*array = 'I'; とかした時の挙動は異なる。(ことがある)
char array[] = "iteyo-shi"; ならちゃんと "Iteyo-shi" になる。
char *array = "iteyo-shi"; だと何が起こっても不思議ではない。
>808 後者は文字列リテラル定数のアドレス。 参照するだけで、そこの実態を書き換えなければ問題無し。
こういうコードは有りですか? char *array = {"itte", "yosi", "kana"};
実際に試せばいいのに。
>>823 char *array[3] = {"itte", "yosi", "kana"};
>>825 すんまへん。そういうつもりでした。
で、
>>825 ならOKで?
疑問なのは、文字列リテラルの寿命ってどうなってるのかなっつーことでし。
なんとなく、普通の変数(
>>825 のarrayなんか)より寿命が長そうなので、
いいかなと思ったんけど、あんまりそういうコード見ないし、疑問なんです。
プログラム開始からプログラム終了まで。 静的変数と同じ。
>>828 わかりました。
>>825 なら問題なしですね。
ありがとうございました。
(でも、疑うのではないのですが、そういうことって、
どの辺を勉強すればわかるんですか?)
>>821 char a[] = "itteyo-shi";
char *p = "itteyo-shi";
後者で何が起こっても不思議じゃないなんてこたない。
どっちも規格に合致してる書式だし、実際に問題の起こる処理系は見たことない。
aはaというラベルのついてる11バイトの領域に文字列「itte-yoshi\0」が入ってる。
a |i|t|t|e|-|y|o|s|h|i|\0|
pはpというラベルのついてる領域に、どっかにある「itte-yoshi\0」という文字列
の先頭を指す値(ポインタ)が入っている。
p |ポインタ| → |i|t|t|e|-|y|o|s|h|i|\0|
斯様にポインタと配列はまったくの別物であるが、Cの場合大抵の場面で
ポインタと配列は同じように扱えるってだけの話。
ただし、pのように初期化したときに取られる文字列の領域を書き換えてはいけないと
規格では書かれている。
もし書き換えたら、(この場合に限り)何が起こっても不思議じゃない。
>>830 まさにそのことを821は言ってるんだと思うのだけど。
>>834 おお、そうかそうか、読みきれてなかった。
アフォですた、すんません。
ちょっと細かい話をさせてもらうと、本当は、 >ポインタと配列はまったくの別物であるが、Cの場合大抵の場面で >ポインタと配列は同じように扱える というのはまちがいで、 1.Cにはポインタはあるが配列はない 2.*(p+n)のシンタックスシュガーとしてp[n]がある という方がすっきりしてると思うんだけど。で、 char a[] = "itteyo-shi"; char *p = "itteyo-shi"; では、aもpもポインタ。 ただ、どこに文字列データが確保されるかの違い、という説明。 どうすか?
>>837 だめ。大域変数で
char a[] = "itteyo-shi";
char *p = "itteyo-shi";
なんて定義があったとして、別のファイルで
extern char *a;
extern char p[];
なんてやったらどうなる?
aは配列だよ。&演算子やsizeof演算子のオペランドになる場合だけ ポインタ(配列の先頭要素を指す)に成り下がる。
失礼・・・ >場合だけ 場合の除いて
>>838 えーと。a[]と*aが互換というつもりはありませんのでした。
「aもpもポインタである」というだけで、aが「変数」かどうかは別です。
>>839 まあ、そういう見方もわかりますが、たとえば、
"abcd"[2]
なんかでは、ポインタが配列に成り上がるのでしょうか?
個人的には、言葉の定義は、多数の意見が「正解」なんだと思うので、
自分が正しいというつもりはないんですけど。
かなりレス遅れましたが806です 何かの本で文字列リテラルは配列だと読んだことがあるのですが 要するに char *p="iteyo-shi"; は char array[]="iteyo-shi"; char *p=array; と同じだってことですよね?
char a[]="itteyoshi"; char *p ="itteyoshi"; 上のをauto変数でやると、毎回コピーされるから、かなり遅くない?
>>841 配列名は配列の最初の要素のアドレスを指すが
ポインタではないのでインクリメントできない
846 :
デフォルトの名無しさん :03/02/06 23:37
エンディアンで質問なのですが、 なるべくコード上で#ifdefとか使ってエンディアンを区別せずに makefileかヘッダでどの処理でもビッグエンディアンにする方法がありましたら ご教示下さい。
>>841 いや、多数の意見が正解じゃなくて規格に書いてあることが正解。
規格そのものは(多分)多数決で決まってるんだと思うけどね。
char a[] = "itteyoshi";
の場合、どちらも非constなので問題なし。
char *p = "itteyoshi";
の場合、右辺はconstなのでconstへのポインタから非constへのポインタの代入なので警告対象。
勿論、
char const *p = "itteyoshi";
ならば、どちらもconstなので問題なし。
但し、
p[0] = 'I';
とすると、その時点でエラーになるはず。
>>843 前者は文字列のコピーが発生するが、後者はポインタのみの代入。
あとあとのことを考えたらきっちり配列とポインタは区別しておいた ほうがいいと思うな。文字列リテラルを書き換えようとしたり。a が ポインタなら a = p; が許されないのはどうしてか、とか。sizeofの 結果も。あとで混乱の元になりそう。
>>845 なるほど。インクリメントできないものをポインタとはよべない。
うー、説得力あります。
それと、
>>839 をよく考えたんすけど、
sizeofの挙動は、ポインタだけでは説明できない、かな?
sizeofは、どうやって配列の終わりを知るんでしょう?
なんか、負けたような気がします。
もう、みんな必ず一回は配列とポインタで混乱するから、Cから配列をなくそうよ。 int a[10]; は、 int *a = alloa(...); と等価としたらいいやん。
>>846 ないんじゃないかな。
エンディアンを気にする部分を関数群に閉じ込めちゃって
他ではエンディアンを気にせずコーディングするってのが
定石でしょう。でもそれが使えないってことなのかな…
たとえば「#ifdef使っちゃだめ」ってアフォな規則あるとか。
>>850 配列のサイズはコンパイル時にわかってるから、
sizeof(配列)なんてのがあったらコンパイラは
配列のサイズに置き換えるだけの話。
syslogシステムコールで質問。 openlogして設定して、syslogを実行します。 closelogせずにopenlogを再度実行して、 syslogを行い、closelogすると、 設定は最初のopenlogに戻る? どうすれば戻るようなコーディングできる?
>>852 即レスサンクス。
やはり無いですか。。
今からエンディアンを変更せよと言われ、面倒だったので。。
>>853 なるほどです。
でも、そうすると、sizeofそのものがちょっと「いんちき」みたいな。
でも、そんなこと言うと、デンパですかね。
>>848 は、いろいろおもしろいものを含んでいるような気がしますが、
眠いので落ちます。
a[1]ってのはもともと*(a+1)のシンタックスシュガーだから 型のサイズ×配列のインデックスでアドレスがその分だけ進められるんですよね? 例えばsizeof(char)=1の環境で char a[]="iteyo-shi";という宣言があったとして &a[0]=0x0000000だったとすると&a[1]=0x0000001になるはずだから sizeof(char)*1=1で0x0000000に1がプラスされて0x0000001になって そのアドレスにオペランドとしてアスタリクをつけて 変数の内容を参照するわけですね? 長い&分かりにくくてスマソ
860 :
デフォルトの名無しさん :03/02/07 00:21
char a[] = "itte-yoshi!"; これは、a という配列を確保し、 それを "itte-yoshi!" で初期化するというもの。 char *p = "itte-yoshi!"; これは、"itte-yoshi!" という文字列リテラルのアドレスで p を初期化するというもの。 文字列リテラルがどこに確保されるかはOSによって違うが、 多分静的であることは保証されてると思ってていいんじゃないかな。 あと、OSによっては書き換えを禁止されている領域に確保されるから、 *p = 'I'; なんてことをすると、書き換えちゃダメ! ってエラーが出ることがある。 OS依存だから、あー、エラーが出ないから使っていいんかなー、 とか思ってる人がいるかもしれないが、それは即刻やめること。 そのOSのバージョンが上がった場合にも相変わらずエラーが出ない、 ということは期待できない。 *a = 'I'; の場合は、a という配列を新しく作っている (文字列リテラルそのものではない)ので、書き換えることができる。
誰か教えてください〜。
>>861 激しくスレ違い
よくわからんが UNIX の話なのなら UNIXプログラミング質問すれにでも逝け
char *pというポインタを"string"(の先頭アドレス)で初期化しているだけだと考えれば混同しないと思うけど。
char *p = "literal"; を char *p; strcpy(p, "literal"); と混同して危険だと思ってるヤツもいるかもね。
>>848 > char *p = "itteyoshi";
> の場合、右辺はconstなので
互換性のために、これはダウト...だったはずだが、最近は違うのか ?
>>865 曖昧な記憶だけで書くのだけど。
char *p = "itteyoshi";
で初期化した場合、pが指す先にある領域を書き換えてはいけないというのは、
void mona(void) {
char *p = "itteyoshi";
}
void giko(void) {
char *q = "itteyoshi";
}
みたいなふたつの関数があったときに、pとqが指す先が同じものであっても
よいようにするためだったと思う。場合よってはバイナリサイズが劇的に
小さくなるからね。
実際、MS-DOSの頃メモリが苦しくて、そういう風に処理してくれるオプションが
MS-Cにあったんで重宝してた。今はあんまり気にしないのでどうなってるかしらんが(w
>>846 そのためにあるのがntohs()と仲間たち。
>>865 文字列リテラルの型は大抵constがつかないと思うけど。
869 :
デフォルトの名無しさん :03/02/08 03:28
型を省いた関数は、戻り値int。
珍妙なプリプロセッサを自作しているということです。
#if defined(__2ch__) #include "/dev/console" #endif
Cはまったく初心者で Pascalのポインタまでしか理解してないですけど、 K&R本はこんな俺に理解できるシロモノですか?
プログラミングの初心者じゃなければ大丈夫。
#include <stdio.h> void *nurupo(void){printf("ぬるぽ\n");if(nurupo()==(void*)0)nurupo();return (void*)0;} void main(void){nurupo();}
Stack overflow
>>872 #include "/dev/tty"
だろ
throw unko();
>>877 セキュリティのために、コンソールのみに限定してます。
880 :
デフォルトの名無しさん :03/02/09 01:23
2^50とかを数字でディスプレイ上に表示する方法ってありますか? 分割するにしても数字がでかすぎて下位の数字が消えちゃうし…
883 :
デフォルトの名無しさん :03/02/09 01:32
どうしたいのさ。
10000…(略
>>881 2.0e+50は2.0×10^50でつよ。
>>881 VCなら
printf("%I64d", 0x4000000000000I64);
GCCなら
printf("%lld", 0x4000000000000L);
で表示できるはず。
あー、1I64 << 50 とか 1L << 50 とかの方が分かりやすかったな。
888 :
デフォルトの名無しさん :03/02/09 01:56
>>887 どういうものなのでしょうか?
ご教授いただけると嬉しいのですが…
あ〜、激しく納得。64ビット整数って話か。 私馬鹿じゃん(TT)
890 :
デフォルトの名無しさん :03/02/09 02:05
今調べているのですが、gccでも64bit整数が扱えるのでしょうか? "long long int"型がコンパイルエラーになるのですが…
>>890 sageでよろしく。
で、コンパイルオプションでlong long型を禁止してないかチェックした?
>891 それはどういうことでしょうか? 単に bcc32 main.cpp とタイプしてますが…
>>891 質問は age で良いとおもうけど...
>>892 > bcc32 main.cpp
って、おい、ネタかよ。
ゴメン。1L じゃなくて 1LL だった。
ネタじゃないですよ〜。 とりあえずの目標は2^40とかを数字で表示する事ですから直接main.cppで実験してます。 確認作業も楽ですし…
bcc の long long型は __int64 使い方と定数の書き方&printf()の修飾子は↓のような感じで __int64 i ; i = 1i64 << 50 ; printf ( "%Ld\n", i ) ; と言うか、もろに環境依存やね…
プリプロセッサで色んなコンパイラで使えるように 細工しとくのがいいのかね。
かぶった… (T_T)
皆様親切にThanxdThanxdThanxd!!! "__int64"にて無事解決しました! bccとgcc間違えてた…
gcc でも __int64 使えるんじゃなかった? long long のエイリアスになってたような・・・。
無かった。 gcc (GCC) 3.2 20020927 (prerelease) (Cygwin) jni.h に int64_t ってのならあったけど、 この後ろについてるのはなんじゃらほい。 変数のサイズ指定かな? typedef int jlong __attribute__((__mode__(__DI__))); typedef int64_t jlong;
>>903 MinGW gcc 2.95.2 で通ったコード。
#include <iostream>
#include <typeinfo> // これが無きゃダメぽ?
using namespace std;
int main()
{
__int64 i = 1234567890;
cout << i << endl;
return 0;
}
++ の方かい。
#include <con/con> //これ誰か試して
コンソールから Hellow World 打ち込んだが別に問題は無かったが何か?
910 :
デフォルトの名無しさん :03/02/11 15:53
重複スレが上がってるようなのでこっちもage
913 :
デフォルトの名無しさん :03/02/28 05:19
黄昏のぬるぽ
定期埋め立て 残り81
埋め立て 残り80
埋め立て 残り79
埋め立て 残り78
埋め立て 残り77
埋め立て 残り76
1000-75
74
埋め立て 残り73
929の策
>>929 40分ほどわかりませんでした。頭が鈍ってるなぁ、寝よう。
埋め立て 残り70
printf("%3d\r",69);
>>931 こら、ハードコーディングするなよ。再利用できないだろ。
int i = 68;
/* --- 以下ここからコピペスレ --- */
printf("%3d\n", i--);
printf("埋立 残り%3d\n", i--);
printf("埋立 残り%3d\n", i--);
printf("埋立 残り%3d\n", __LINE__);/* ってできるのかな<試せよ */
>>935 だと、935がでませんか、と。
i--;printf("埋立 残り%3d\n", i--);
printf("ぬるぽ\n");
ッタクモウ
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←
>>937
/*
>>935 の分までデクリメントしてくれた優しい
>>936 に萌え */
i--; printf("埋立 残り%3d\n", i--);
うめーーーーーーー
>>936 だったら、printf("埋立 残り%3d\n", 1000 - __LINE__); でいいかい ?
printf("埋立 残り%3d\n", 1000 - __LINE__); /*採用*/
printf("埋立 残り%3d\n", 1000 - __LINE__);
>>942 printf("埋立 残り%3d\n", 1000 - __LINE__); /*なんか嬉しい*/
なんでもいいけど、あげなくてもいいじゃないですか
946 :
デフォルトの名無しさん :03/03/17 22:15
>>946 > 多分スレ違いだと思うので最初に「ごめんなさい」
謝ればいいというもんでもない。
そんな暇があるなら、スレ一覧をじっくり眺めること。
> C++を勉強してます。
ここのスレタイトル見たか ?
C と C++ の区別もできないようならこの業界に向いてないから、「次に何もするな !!」
これが俺の指導だ。
おっと、忘れた... printf("埋立 残り%3d\n", 1000 - __LINE__);
951 :
デフォルトの名無しさん :03/03/17 22:25
>ここのスレタイトル見たか ? >C と C++ の区別もできないようならこの業界に向いてないから、「次に何もするな !!」 >これが俺の指導だ。 そんな言いぐさがあるかこの大馬鹿がお前は社会に向いてないか「明日氏ね」 これが俺の指導だ
なんでもいいけど、あげなくてもいいじゃないですか?
49がまだ生きていたか。 うめうめ。
うめ
うんめぇー
気づこうぜ、釣りなんだからさ…… マジ質問なら、こう答える。 「仕事にしたいなら、まずUMLとGoFを学べ。それからだ。 C言語なんて使える奴はいくらでもいる。」
957 :
デフォルトの名無しさん :03/03/17 22:39
どうでもいい、埋めろ
平安京エイリアン
ロードランナー
DigDug
質問はスレ違いです。 ここは埋め立て予定地です。
あ、本当だ…… スマソ
梅
桜
木毎
966
8823謎の人
埋立
残り 0x20;
計算ミスった、、、ショボーン
>>969-970 printf("残り 0x%02x;\n", 1000 - __LINE__);
C
973 :
デフォルトの名無しさん :03/03/19 14:54
D
わたしを呼びましたね。 ∧_∧ ( ´∀`)< ぬるぽ
わたしを呼びましたね。 ∧_∧ ( ´∀`)< ぬるぽ〜
わたしを呼びましたね。 ∧_∧ ( ´∀`)< ぬるっ ぽ
わたしを
ヨンデネーヨ
( ・∀・) | | ガガッ
と ) | |
Y /ノ .人
/ ) .人 < >__Λ ∩
_/し' < >_Λ∩Д´)/
(_フ彡 V`Д´)/ / ←
>>974 / ←
>>975
>>978 / | / | <なっ、なんてことするんだ!!!
/,_ ┴─/ ヽ , 、 ,、
(・_.,》.'(・_,》)ミ ヽ . / L--/ l、
/ ,,__,ニ、、 ノ( | (・;;》 (・;;》 | /L--/l、
| Y~~/~y} `, ~ | |y-,‐vi`ノl | (・.》 (・.》 l /L--/l、
| .,k.,.,!,.,.,r| ,! く |, kl r| i ^< | 'fT~ヲ x (・〕_(・〕x| /L/l <イクナイ
/ <ニニニ'ノ \ / (二二‐ ' \ / l==_」 < l fmヨ ! L〔゚fヲ゚.〕、.。., .
∧__∧ (´∀`) <ぬ ( つ つ ) ) ) (__)_)
∧__∧ (´∀`) <る ⊂ ⊂ ) ( ( ( (_(__)
∧__∧ ∩´∀`) <ぽ ヽ ⊂ ) ( ( ( (_(__)
マゾガオオイナ!!
| | ガガガガッ
( ・∀・) | | 人
と ) | | 人 < >__Λ∩
Y /ノ .人 < >__Λ∩Д´)/
/ ) .人 < >__Λ ∩Д´)/ / ←
>>976 _/し' < >_Λ∩Д´)/ / ←
>>980 (_フ彡 V`Д´)/ / ←
>>981 / ←
>>982