C言語なら俺に聞け! Part 120
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/01/08(日) 22:17:59質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は専門の別スレッドがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
C言語なら俺に聞け! Part 119
http://pc8.2ch.net/test/read.cgi/tech/1135077848/
0002デフォルトの名無しさん
2006/01/08(日) 22:18:210003デフォルトの名無しさん
2006/01/08(日) 22:26:41>>1
乙
>>2
m9(^Д^)プギャー
0004デフォルトの名無しさん
2006/01/08(日) 22:29:01宿題OK
ただしスルーされます
0005デフォルトの名無しさん
2006/01/08(日) 23:04:34__,,, -= と´⌒)=- __
 ̄ _.ィ⌒ヽ "T :|´^
/ }=Yゝヽ、")=- __
∠.イミ' ^ソ ) :|´^
{_ ハf彡{ l ")=- __
_,,../ /ミ>^ノ | :|´^
( _fミ|-/-' )ノ ⌒)=- __
| }ヾ' K ノ:T´|| T :|´^
F/ {__,}::| || :'='
_ノ {. |||{._」-l:l
= 彡' ノ|{ ̄
{_メ
0006デフォルトの名無しさん
2006/01/08(日) 23:10:46いや〜。発明してしまいましたよ
0007デフォルトの名無しさん
2006/01/08(日) 23:11:19乙
00081
2006/01/08(日) 23:19:46から、ケータイから立てたw
0009デフォルトの名無しさん
2006/01/08(日) 23:32:38教えてください。
0010デフォルトの名無しさん
2006/01/08(日) 23:34:24スレ違い(・∀・)カエレ!!
0011デフォルトの名無しさん
2006/01/08(日) 23:35:38全く別です。
“C”はプログラミング言語Cのことであり、言語の名称です。
“Visual C# .net”は、Microsoftが販売(または配布)しているソフトウェアの
名称です。
0012デフォルトの名無しさん
2006/01/08(日) 23:46:58悪かったな。
>>11
MSの言語ソフトのスレに行けということですね。
道が開けました。有難うございます。
0013デフォルトの名無しさん
2006/01/09(月) 00:23:42ほっといてこのスレを続けようぜ
0014デフォルトの名無しさん
2006/01/09(月) 02:54:55いつごろ標準として取り入れられるんだろう。
0015デフォルトの名無しさん
2006/01/09(月) 07:19:56http://www.open-std.org/jtc1/sc22/wg14/
動きはあるようです。ただ、fopen() をfopen_s()に置換しても
ダメ(引数違う)な点で本当に浸透するのか疑問なのですが…
0016デフォルトの名無しさん
2006/01/09(月) 08:23:370017デフォルトの名無しさん
2006/01/09(月) 08:40:46ある。
前者はテキストモードで後者はバイナリモード。
典型的にはWin系ではテキストモードのとき、入力時に改行コードが\r\nから\nへ変換される。
0018デフォルトの名無しさん
2006/01/09(月) 14:51:03int型配列の要素の個数を知りたいのですが、どうすればいいでしょうか。
strlenも試したのですが、うまくいきません。
warning C4133: '関数' : 'int [11]' と 'const char *' の間で型に互換性がありません。
と出てしまいます。
分かる方、ご教授お願いします。
0019デフォルトの名無しさん
2006/01/09(月) 15:14:390020デフォルトの名無しさん
2006/01/09(月) 15:14:53sizeof(array)/sizeof(int)
0021デフォルトの名無しさん
2006/01/09(月) 15:35:040022デフォルトの名無しさん
2006/01/09(月) 15:36:010023デフォルトの名無しさん
2006/01/09(月) 15:41:200024デフォルトの名無しさん
2006/01/09(月) 16:23:09演算子の優先順位の問題が出るようなものを入れること自体
このマクロでは問題になるから(大抵配列でなくポインタになる)、
むしろカッコを付けない方が安全。
0025デフォルトの名無しさん
2006/01/09(月) 16:25:36(´д)ヒソ(´д`)ヒソ(д`)
0026デフォルトの名無しさん
2006/01/09(月) 16:27:11m9(^Д^)プギャー!!
0027デフォルトの名無しさん
2006/01/09(月) 17:02:53ぬるぽ
0028デフォルトの名無しさん
2006/01/09(月) 17:35:140029デフォルトの名無しさん
2006/01/09(月) 17:40:05ガッ!
0030デフォルトの名無しさん
2006/01/09(月) 18:08:400031デフォルトの名無しさん
2006/01/09(月) 18:49:170032デフォルトの名無しさん
2006/01/09(月) 19:13:020033デフォルトの名無しさん
2006/01/09(月) 19:30:09(´д)ヒソ(´д`)ヒソ(д`)
0034デフォルトの名無しさん
2006/01/09(月) 19:53:45m9(^Д^)プギャー!!
0035デフォルトの名無しさん
2006/01/09(月) 20:23:31ぬるぽ
0036デフォルトの名無しさん
2006/01/09(月) 20:26:010037デフォルトの名無しさん
2006/01/09(月) 22:04:13int main()
の違いを教えてください。
() != (void)と聞いたこともあるような…
0038デフォルトの名無しさん
2006/01/09(月) 22:46:05前者は引数がないことを表し、後者は引数が不定(引数に関する情報がない)ということを表す。
ただこれは関数の宣言のときだけで、
関数の定義の時にはどうやら両者ともに引数がないことを表すらしく、違いはないようだ。
0039デフォルトの名無しさん
2006/01/09(月) 22:59:52ANSI-C以前のK&Rではint main()でよかった。
ANSI-Cでは引数が無いことを「明示的」に示すためにint main(void)となってる。
ANSI-Cの方針の一つとして、文法とコンパイル時でのチェック機能を強化して、
ケアレスミスを未然に防ごうという意図がある。その一環の一つ。つまり
無いときは省略でなく無い(void)とプログラマに指定るようにした。
0040デフォルトの名無しさん
2006/01/09(月) 23:02:10ガッ!
0041デフォルトの名無しさん
2006/01/09(月) 23:03:06(void)はキモいし、()が引数を取らないという意味でないというのは直感的でないなど言う理由からだったと思う。
0042デフォルトの名無しさん
2006/01/09(月) 23:44:58C++では前方参照をサポートする必要が無いからvoidが除かれても問題が無い。
0043デフォルトの名無しさん
2006/01/10(火) 05:19:340044デフォルトの名無しさん
2006/01/10(火) 05:20:38004543
2006/01/10(火) 05:25:010046デフォルトの名無しさん
2006/01/10(火) 05:27:19せっかく色々情報出してやろうかと思ったのに、マルチなので教えません。
0047デフォルトの名無しさん
2006/01/10(火) 06:56:08何処と?
0048デフォルトの名無しさん
2006/01/10(火) 12:44:32スレ違い
0049デフォルトの名無しさん
2006/01/10(火) 22:55:330050デフォルトの名無しさん
2006/01/10(火) 22:56:230051sinnki
2006/01/11(水) 01:51:590052デフォルトの名無しさん
2006/01/11(水) 03:52:230053デフォルトの名無しさん
2006/01/11(水) 06:05:29スレ違い。
>>51
マルチ乙。
0054デフォルトの名無しさん
2006/01/11(水) 11:14:53でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド)
ぐらいなら作ったことあります。
今のところ、オープニングまで作ったのですが、どなたか僕に
Cの基礎からすべてを叩き込んでくれませんか??
お願いします。
0055デフォルトの名無しさん
2006/01/11(水) 11:16:240056デフォルトの名無しさん
2006/01/11(水) 11:16:55何につまづいているのかわからないのでアドバイスできない。
0057デフォルトの名無しさん
2006/01/11(水) 11:17:550058デフォルトの名無しさん
2006/01/11(水) 11:18:36三回回って 「ぬるぽ」 と叫んでみましょう。
0059デフォルトの名無しさん
2006/01/11(水) 11:20:05食べてないorz
0060デフォルトの名無しさん
2006/01/11(水) 12:22:460061デフォルトの名無しさん
2006/01/11(水) 12:23:550062デフォルトの名無しさん
2006/01/11(水) 12:40:57また論争を始めようというのか
0063デフォルトの名無しさん
2006/01/11(水) 12:43:070064デフォルトの名無しさん
2006/01/11(水) 22:03:53らいすぼうる
0065デフォルトの名無しさん
2006/01/11(水) 23:00:02さんこうにすれば
0066デフォルトの名無しさん
2006/01/11(水) 23:08:36オープニングが作れる程度の知識があるなら WIZ1 もどきでも作ってみたら?
俺思うにあなたに「難しい」のはCよりも世界観=システム設計だ
0067デフォルトの名無しさん
2006/01/11(水) 23:11:12プログラミング言語 RPG を作りたいのか
ゲームの RPG を作りたいのか
はっきりしる。
0068デフォルトの名無しさん
2006/01/11(水) 23:15:26ヒントでもいいです。お願いしますm(__)m
まず、整数を任意に10個入力させa[0]からa[9]に格納する。
次にこれを小さ順に並べ替え、画面に表示させよ。
選択ソート方式を用いよ。
(1) a[0]とa[1]を比べ、a[0]のほうが大きかったらa[0]とa[1]を入れ替える。
次に新しいa[0]とa[2]で行い、その次は新a[0]とa[3]で行い、以下a[9]まで行う。
(2) a[1]とa[2]を比べ、(1)と同じようにa[9]まで行う。
(3) 以下、a[2]、a[3]、とa[8]まで行う。
0069デフォルトの名無しさん
2006/01/11(水) 23:18:33/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< さいたま! さいたま!
\_/ \___________
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< さいたま! さいたま!
さいたま〜〜〜! >( ゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」
 ̄ / /
\ │ /
/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< さいたま! さいたま!
\_/ \___________
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< さいたま! さいたま!
さいたま〜〜〜! >( ゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」
 ̄ / /
0070デフォルトの名無しさん
2006/01/12(木) 05:45:120071デフォルトの名無しさん
2006/01/12(木) 09:30:44開発環境はVISUAL C++ .NET 2003です。
0072デフォルトの名無しさん
2006/01/12(木) 09:33:200073デフォルトの名無しさん
2006/01/12(木) 10:02:28スレ違い
0074デフォルトの名無しさん
2006/01/12(木) 12:20:00GetFileAttributesEx()
あと氏ね。
0075デフォルトの名無しさん
2006/01/12(木) 12:21:21忘れてた。
FindFirstFile()
FindNextFile()
あと氏ね。
0076デフォルトの名無しさん
2006/01/12(木) 12:23:08言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0077デフォルトの名無しさん
2006/01/12(木) 12:31:27>>71にはあんな言葉ももったいない
0078デフォルトの名無しさん
2006/01/12(木) 12:37:190079デフォルトの名無しさん
2006/01/12(木) 13:39:08addCell関数の部分がわかりません。
すいませんが、どなたか教えて頂けないでしょうか?期日が明日までなんですよ。
おねがいします。
ttp://8701.teacup.com/a240/bbs
0080デフォルトの名無しさん
2006/01/12(木) 14:00:10スレ違い。
宿題、丸投げは宿題スレへ。
そうでないなら初心者スレにでも。
0081デフォルトの名無しさん
2006/01/12(木) 14:55:10> 期日が明日までなんですよ。
そんなこと知ったこっちゃない。
それがルールを破っていい理由にはならないよ。
回線切って首吊ってろ。
0082デフォルトの名無しさん
2006/01/12(木) 16:18:250083デフォルトの名無しさん
2006/01/12(木) 16:24:59環境依存。よって、環境依存OKスレなどへどうぞ。
0084デフォルトの名無しさん
2006/01/12(木) 19:24:100085デフォルトの名無しさん
2006/01/12(木) 19:25:46はい、次。
0086デフォルトの名無しさん
2006/01/12(木) 19:31:110087デフォルトの名無しさん
2006/01/12(木) 20:19:130088デフォルトの名無しさん
2006/01/12(木) 20:31:560089デフォルトの名無しさん
2006/01/12(木) 21:13:50標準Cの話をするスレだという事が
>>1 を見ても解らないようだとヤバイ。
0090デフォルトの名無しさん
2006/01/12(木) 21:14:46あれ、実は一つ一つ取り外せるから。
並び替えればいいだけだよ。
0091デフォルトの名無しさん
2006/01/12(木) 22:07:350092デフォルトの名無しさん
2006/01/12(木) 22:13:19これで解決だ。
0093デフォルトの名無しさん
2006/01/12(木) 22:14:48ふにゃふにゃキーボードを使ってるのですが・・・
0094デフォルトの名無しさん
2006/01/12(木) 22:40:440095デフォルトの名無しさん
2006/01/12(木) 22:41:37配線替えれ
0096デフォルトの名無しさん
2006/01/12(木) 22:51:03http://www.artlebedev.com/portfolio/optimus/
0097デフォルトの名無しさん
2006/01/12(木) 23:45:32http://www.remus.dti.ne.jp/~kurotora/
0098デフォルトの名無しさん
2006/01/13(金) 00:09:13#include <stdio.h>
#define KEISEN
"==========================================================\n"
int main(int argc, char* argv[])
;{
FILE *fp;
int a[5],f=0,i;
char name[30];
fp=fopen("c:seiseki.dat","r");
printf("***********************成績一覧表************************\n");
printf(KEISEN);
printf("氏名 生物 化学 物理 数学 英語 平均 最高点\n");
while((fscanf(fp,"%s%d%d%d%d%d",name,&a[0],&a[1],&a[2],&a[3],&a[4]))!=EOF){
f=a[0];
0099デフォルトの名無しさん
2006/01/13(金) 00:10:30if(a[i]>f){
f=a[i];
}
}
printf("%-20s%5d%5d%5d%5d%5d%5d%5d\n",name,a[0],a[1],a[2],a[3],a[4],(a[0]+a[1]+a[2]+a[3]+a[4])/5,f);
}
fclose(fp);
return(0);
}
このプログラム
C:\Program Files\Microsoft Visual Studio\MyProjects\11−1\11−1.cpp(7) : error C2143: 構文エラー : ';' が 'string' の前に必要です。
C:\Program Files\Microsoft Visual Studio\MyProjects\11−1\11−1.cpp(10) : error C2447: グローバルスコープで中カッコ ({) が見つかりましたが、対応する関数ヘッダーがありません。
このようなエラーが起きてしまうのですが、どうしても解決出来ません。
お願いします。
0100デフォルトの名無しさん
2006/01/13(金) 00:16:19入門書でも読んでください。
0101デフォルトの名無しさん
2006/01/13(金) 00:17:36;{
↑
このセミコロンは?
010298
2006/01/13(金) 00:22:36書き込むスレ間違えました?
(;´Д`)間違えてたらすみません。
>>101
そこにセミコロン入れないと
C:\Program Files\Microsoft Visual Studio\MyProjects\11−1\11−1.cpp(10) : error C2143: 構文エラー : ';' が '{' の前に必要です。
というエラーがあったので取り合えず入れてみました。
0103デフォルトの名無しさん
2006/01/13(金) 00:24:35>取り合えず入れてみました。
>取り合えず入れてみました。
>取り合えず入れてみました。
0104デフォルトの名無しさん
2006/01/13(金) 00:24:53せいせいせいせい
取り合えずで入れるなよw
0105デフォルトの名無しさん
2006/01/13(金) 00:25:150106デフォルトの名無しさん
2006/01/13(金) 00:27:23ようようようよう
取り合えずで入れるなよw
0107デフォルトの名無しさん
2006/01/13(金) 00:27:48010898
2006/01/13(金) 00:29:39>>104,106
大学の授業でプログラムの意味とかほとんど理解出来てなくって
エラー文でたら従ってみれば何とかなるかなみたいな感じでやってて・・・・・
>>107
ありがとうございます、やってみます。
0109デフォルトの名無しさん
2006/01/13(金) 00:35:04って、大学生なのかよ、ハァ
0110デフォルトの名無しさん
2006/01/13(金) 02:08:340111デフォルトの名無しさん
2006/01/13(金) 02:30:41キタ━━━ヽ(∀゚ )人(゚∀゚)人( ゚∀)人(∀゚ )人(゚∀゚)人( ゚∀)ノ━━━ !!!
0112デフォルトの名無しさん
2006/01/13(金) 02:51:520113デフォルトの名無しさん
2006/01/13(金) 16:14:47入力し、最大値 MA を求めるプログラムをポインタを用いて
作成してください。
0114デフォルトの名無しさん
2006/01/13(金) 16:21:13巣に帰れ間抜け。
C/C++の宿題を片付けます 57代目
http://pc8.2ch.net/test/read.cgi/tech/1136768567/l50
0115デフォルトの名無しさん
2006/01/13(金) 23:13:15これは正しい
あてずっぽうじゃなく調査結果から次の試みを計画するのは工学者の基本
2ch よりダーティでない情報源は当然あたっておろうな?
>大学の授業でプログラムの意味とかほとんど理解出来てなくって
理解できない授業の単位は間違ってももらってはならない
なぜ理解できないのかを分析し、次の試みを計画するのは工学者の基本
教員の終電は無視するのが学生の基本
0116デフォルトの名無しさん
2006/01/13(金) 23:56:510117デフォルトの名無しさん
2006/01/14(土) 00:00:210118デフォルトの名無しさん
2006/01/14(土) 00:03:550119デフォルトの名無しさん
2006/01/14(土) 01:10:31飲みをサークルと同じ雰囲気でやろうとする奴までいやがるし。
0120デフォルトの名無しさん
2006/01/14(土) 04:54:58そういう仕事の邪魔をするストーキング学生はつまみ出されます。
0121デフォルトの名無しさん
2006/01/14(土) 11:29:25便利ですね、C。
まあ、プログラミングの方が長くかかったわけですが。
0122デフォルトの名無しさん
2006/01/14(土) 11:35:06まぁそのようとだったら文字列処理が強力なPerl/PHP/Rubyといった
スクリプト言語に任せた方が早いけどな
0123デフォルトの名無しさん
2006/01/14(土) 15:58:44main(void)
{
int a;
long l;
double d;
char str[]="computer";
a=67;
printf("10進:%d\n",a);
printf("16進:%x\n",a);
printf("文字:%c\n",a);
l=987654321;
printf("10進:%ld\n",l);
d=1234.567;
printf("浮動小数点数:%f\n",d);
printf("指数形式:%e\n",d);
printf("文字列:%s\n",str);
return 0;
}
で何故
文字=C
になるのかわからん 教えてください
0124デフォルトの名無しさん
2006/01/14(土) 16:02:22Cの文字コードが67だったから。
0125デフォルトの名無しさん
2006/01/14(土) 16:02:350127デフォルトの名無しさん
2006/01/14(土) 17:10:07ここからsin,cos,tanを求めるプログラムをどう作ればいいんでしょう。教えてください。
#include<stdio.h>
int main(void)
{float a;
int i,k;
char d;
printf("aを入力\n");
scanf("%f",&a);
scanf("%c",&d);
printf("計算方法を入力(!)");
scanf("%c",&d);
switch(d)
{
case'!':
if(a==0)
{
printf("0!=1\n");
}else{
k=a;
for(i=(a-1);i>0;i--){
k=k*i;
}printf("aの階乗は%d",k);
}
break;
default:
printf("入力し直してください");
break;
}
}
0128デフォルトの名無しさん
2006/01/14(土) 17:18:05#include <math.h>
int main(void)
{
float a;
printf("aをラディアンで入力\n");
scanf("%f",&a);
printf("sin(a)は%f",sin(a));
printf("cos(a)は%f",cos(a));
printf("tan(a)は%f",tan(a));
return 0;
}
0129デフォルトの名無しさん
2006/01/14(土) 18:56:59sub_hoge1()〜sub_hoge200()と言う感じの複数の関数が呼び出されるんですが
その呼び出される関数内でstatic宣言された変数が使われています。
で、そのstaticな変数を必要に応じて有る時期に一斉に再初期化したいのです。
しかも、外部から・・・
なぜならそれぞれの関数が呼び出される時期はバラバラで
外部にグローバルなフラグを作って、staticな変数をそのフラグの状態に応じて初期化する方法にしたとしても
どのタイミングで全ての関数内のstaticな変数が初期化されるかわからないので、グローバルなフラグの状態をいつ戻せば良いか分からないからです。
このような場合、どうすれば解決するのでしょうか?
設計を変えるにしても、ちょっと時間がないので・・・
あと、数が多すぎて無理です。
よろしくお願いします。
0130デフォルトの名無しさん
2006/01/14(土) 19:06:27グローバルなフラグを配列で持っておき、それぞれの要素を関数と対応づける。
関数に入ったところで、自分自身のフラグを参照して初期化。
ま、設計が悪いですけどね。
0131デフォルトの名無しさん
2006/01/14(土) 19:50:44その関数に書いとく。
グローバルなリセット関数では、ポインタが有効なら、リセットする。
NULLなら放置しとく、とかではどうか。
0132デフォルトの名無しさん
2006/01/14(土) 21:33:15TCPコネクションがあるんだけど、それに大して fprintf とか fgets が使いたいんです。
0133デフォルトの名無しさん
2006/01/14(土) 22:01:160134デフォルトの名無しさん
2006/01/14(土) 22:01:48UNIXならfdopenでいける。WINSOCKはもう二手間くらいかかる。
0135132
2006/01/14(土) 23:28:05おー、便利なものがあるんだね。
ありがとう。
ちなみに Linux です。
0136デフォルトの名無しさん
2006/01/15(日) 11:14:19#include<stdio.h>
#include<string.h>
#define N 32
void sorting(char*,char*);
main(int argc,char *argv[]){
char read[N*N],Memory[N][N],CASL[N][N][N];
sorting(CASL,read);
}
void sorting(char *CASL,char *read){
int i=0,j=0,k=0,z=0,I,J;
while(1){
I=i*(N*N);J=j*N;
if(*(read+z) == '\0') break;
else if(*(read+z) == ' '){
*(CASL+I+J+k) = '\0';
j++;k=0;
}
else if(*(read+z) == '\n'){
*(CASL+I+J+k) = '\0';
i++;j=0;k=0;
}
else{
*(CASL+I+J+k) = *(read+z);
k++;
}z++;}}
上記のプログラムでコンパイルするとwarning: passing arg 1 of `sorting' from incompatible pointer type
のエラーメッセージがでてしまいます。関数間での受け渡しで発生しているエラーだと思うのですが、どこを直せばいいのでしょうか?教えてください。
0137デフォルトの名無しさん
2006/01/15(日) 11:16:49void sorting(char *CASL,char *read){
当たり前だ
0138デフォルトの名無しさん
2006/01/15(日) 11:24:21char read[N*N],Memory[N][N],CASL[N][N][N];
↓
char read[N*N],Memory[N*N],CASL[N*N*N];
Memoryが使われてないような気がするが。
しかしお前の書いたアプリケーションは漏れは絶対使おうとは思わない。
0139デフォルトの名無しさん
2006/01/15(日) 11:31:39mainの下のほうでMemoryは使われています。
できれば、配列は3次元で行いたいのですがどうすればいいですか?
0140デフォルトの名無しさん
2006/01/15(日) 11:46:550141デフォルトの名無しさん
2006/01/15(日) 11:49:48char read[N*N],Memory[N][N],CASL[N][N][N];
sorting(CASL,read);
}
void sorting(char CASL[N][N][N],char *read){
int i=0,j=0,k=0,z=0,I,J;
while(1){
I=i*(N*N);J=j*N;
if(*(read+z) == '\0') break;
else if(*(read+z) == ' '){
CASL[i][j][k] = '\0';
j++;k=0;
}
else if(*(read+z) == '\n'){
CASL[i][j][k] = '\0';
i++;j=0;k=0;
}
else{
CASL[i][j][k] = *(read+z);
k++;
}z++;}}
0142デフォルトの名無しさん
2006/01/15(日) 12:17:17ここの情報を参考に減色をしてからヒストグラム作成をしたいんですが(課題2-2と課題3の部分)
減色処理は分かるのですがヒストグラムを作るときの具体的な方法が思い浮かびません
どういうプログラムを組めば”この画素は64色の中のこの色である”→”+1処理”というようにできるのでしょうか?
RGBの組み合わせのパターンから判断できそうですが
0143デフォルトの名無しさん
2006/01/15(日) 12:18:10スレ違い
0144デフォルトの名無しさん
2006/01/15(日) 12:56:47http://pc8.2ch.net/test/read.cgi/tech/1127705848/
0145デフォルトの名無しさん
2006/01/15(日) 16:26:10%4fって記述してもそうなりません。正しくはどうなんでしょうか?
0146デフォルトの名無しさん
2006/01/15(日) 16:28:090147デフォルトの名無しさん
2006/01/15(日) 16:29:18ありがとうございます。
0148デフォルトの名無しさん
2006/01/15(日) 16:31:57printf( "%c%c%c%c", str[0], str[1], str[2], str[3] );
0149デフォルトの名無しさん
2006/01/15(日) 16:35:29表示する中身は構造体の中に入ってるんですが・・・・
0150デフォルトの名無しさん
2006/01/15(日) 16:36:36printf("%.4s", str);
0151デフォルトの名無しさん
2006/01/15(日) 16:41:340152デフォルトの名無しさん
2006/01/15(日) 17:27:37int i,j,k,n,N;
int s=0;
FILE *fp;
char dataFile[20];
double **array1,**array2,**array3,*array4;
char line[256];
puts("input filename");
fgets(dataFile, sizeof dataFile, stdin);
dataFile[strlen(dataFile)-1]='\0';
printf("%s\n", dataFile);
fp = fopen(dataFile, "r");
if (fp == NULL) {
fputs("File read error\n", stderr);
return 1;
}
fgets(line,sizeof(line),fp);
sscanf(line,"%d",&N);
printf("N=%d\n",N);
array1=initialize(array1,N);
array2=initialize(array2,N);
array3=initialize(array3,N);
array4=(double*)calloc(N,sizeof(double));
0153152
2006/01/15(日) 17:28:57for(j=0; j<n+1; j++){
if(j == n){
fscanf(fp,"%lf",&array4[i]);
}else{
fscanf(fp,"%lf",&array1[i][j]);
}
}
}
で、AとBに値が格納されません。どこがおかしいのかサッパリです。
ご教授お願いします
0154デフォルトの名無しさん
2006/01/15(日) 17:51:17お引取り願います。
0155152
2006/01/15(日) 18:37:25それぞれ配列のarray1とarray4の事です。
よろしくお願いします
0156デフォルトの名無しさん
2006/01/15(日) 18:44:57nが初期化されていないから
まともにforループ回らないだろ。
>fscanf(fp,"%lf",&array1[i][j]);
これでコンパイル通るとは思えんのだが。
0157152
2006/01/15(日) 18:52:53単純な事でした…修行しなおします。
0158デフォルトの名無しさん
2006/01/15(日) 18:59:34ここは C のスレなんで、該当スレへ行ってくれ
0159デフォルトの名無しさん
2006/01/15(日) 20:02:520160デフォルトの名無しさん
2006/01/15(日) 20:09:22何をどーしたいのかが分かりません
0161デフォルトの名無しさん
2006/01/15(日) 20:10:21/* LITTLE endian の場合 */
unsigned int jusinsu = moji[0] << 8 | moji[1];
/* BIG endian の場合*/
unsigned int jusinsu = moji[1] << 8 | moji[0];
0162デフォルトの名無しさん
2006/01/15(日) 20:24:09どうして?
0163デフォルトの名無しさん
2006/01/15(日) 20:26:54と
endian
は何か関係ありますの?
0164デフォルトの名無しさん
2006/01/15(日) 20:33:33そんなもん文字コードとOSによるんじゃないの
0165デフォルトの名無しさん
2006/01/15(日) 20:35:440166デフォルトの名無しさん
2006/01/15(日) 21:07:28御意
0167デフォルトの名無しさん
2006/01/15(日) 21:15:450168デフォルトの名無しさん
2006/01/15(日) 21:19:55単に間違ってるだけだろ
しったかぶりの蛇足
0169デフォルトの名無しさん
2006/01/15(日) 21:21:160170デフォルトの名無しさん
2006/01/15(日) 21:40:43わかりやすく教えてもらえないでしょうか?
0171デフォルトの名無しさん
2006/01/15(日) 21:46:00ttp://www.google.co.jp/search?hl=ja&q=XP+%E3%82%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9
0172デフォルトの名無しさん
2006/01/15(日) 21:52:11/* LITTLE endian の場合 */
unsigned int jusinsu = moji[0] << 8 | moji[1];
/* BIG endian の場合*/
unsigned int jusinsu = moji[1] << 8 | moji[0];
0173デフォルトの名無しさん
2006/01/15(日) 22:52:21%.6sにすると3文字のデータは3文字分しかスペースが使われません。データが3文字だったら余分に3個スペースをいれて
必ず6文字にしたいんですがどうしたらいいですか?
0174デフォルトの名無しさん
2006/01/15(日) 22:55:56たぶん%6.6s
0175デフォルトの名無しさん
2006/01/15(日) 23:05:550176デフォルトの名無しさん
2006/01/15(日) 23:09:30奴なりの「すみません、わかりません」なんだよ
これ以上、恥をかかせないでやれ
0177デフォルトの名無しさん
2006/01/16(月) 00:15:50処理を繰り返すとfreeに失敗します。
数回 "free(): invalid pointer"というメッセージがでて、セグメンテーション違反で終了します。
以下のソースの何がおかしいんでしょう。
int **array;
array = (int **)malloc( size_y * sizeof(int *));
for(i = 0; i < size_y; i++){
array[i] = (int *)malloc(size_x * sizeof(int));
}
...
for(i = 0; i < size_y; i++){
free(array[i]);
}
free(array);
0178デフォルトの名無しさん
2006/01/16(月) 00:17:55そのソースだけで本当に再現するか?
0179デフォルトの名無しさん
2006/01/16(月) 00:20:340180177
2006/01/16(月) 00:23:31さっきのコードの、前半部のようなメモリの確保をしたばあいに
後半部の方法でfreeするのは、問題がありますでしょうか?
この解放の方法が問題無い場合は、間の部分が問題なんですよね。
0181デフォルトの名無しさん
2006/01/16(月) 00:28:140182デフォルトの名無しさん
2006/01/16(月) 00:30:29問題ない
0183デフォルトの名無しさん
2006/01/16(月) 00:31:40DOSの時代からAT互換機はansi.sysでエスケープシーケンスに対応してた。
171のサイトは、そのansi.sys組み込みの話
ttp://kasai86.ld.infoseek.co.jp/dos/esc.htm
XPでcommand.com使うのもねえ?
まんどうならConsoleAPIで書いたほうが楽な気もする。
0184デフォルトの名無しさん
2006/01/16(月) 00:36:43内部でポインタをインクリメントとかしてないよね。
0185177
2006/01/16(月) 00:37:44ありがとうございました
・・・あー、じゃーどこだろw
0186デフォルトの名無しさん
2006/01/16(月) 00:39:23自分に礼言ってるし。
0188デフォルトの名無しさん
2006/01/16(月) 01:32:47VC++.NETでコンパイルすると必ずといっていいほど、
「MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
F:\Program\CG\test\Debug\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。」
と、表示されて何もできません。
何か、ミスをしているのかと思い、「helloworld」を表示するだけのを作っても同じ結果になりました。
どなたか助けてください。お願いします。
0189デフォルトの名無しさん
2006/01/16(月) 01:39:53プロジェクトを作るときに「コンソールアプリケーション」じゃなくて「Win32アプリケーション」にしてるだろ。
コンソールアプリでプロジェクトを作り直すか、プロジェクトの設定を変える。
あとスレ違い。
0190デフォルトの名無しさん
2006/01/16(月) 01:43:50メモリ不足でmalloc失敗してないかい?
0191デフォルトの名無しさん
2006/01/16(月) 01:50:44それは二次元配列じゃなくてポインタの配列だ。
んで、「...」の部分でそのポインタを壊している。
0192デフォルトの名無しさん
2006/01/16(月) 02:03:55結果を元のCで書かれたプログラムで受け取りたいのですが、
どのような実現方法があるでしょうか?
0193188
2006/01/16(月) 02:09:59どうもありがとうございす。
板違いは注意したいと思います。
すみませんでした。
0194デフォルトの名無しさん
2006/01/16(月) 02:17:14struct meibo{
name[20]
};
main(){
fgets(), sscanf(); ←ココ
}
の()の中をどんな風にしたらいいですか?
0195デフォルトの名無しさん
2006/01/16(月) 02:43:18環境依存、WindowsもしくはUNIXもしくはPerlプログラミングのスレに行け
0196デフォルトの名無しさん
2006/01/16(月) 02:45:39まず日本語を勉強してください
0197デフォルトの名無しさん
2006/01/16(月) 02:56:28fp を出力(printfで)してみると全部同じモノが出る。
これは何故なんでしょう?移動してるのだから出力は全て別になるはずでは?
ファイル本体を一つのアドレスとして認識して、その中身のアドレスを移動している
という考えで良いのか不思議に思います。
ご回答お願いします。
0198デフォルトの名無しさん
2006/01/16(月) 03:12:09fpはただのポインタだから。
> ファイル本体を一つのアドレスとして認識して、その中身のアドレスを移動している
それはメモリマップドファイル。
標準ストリーム(FILE)とは全く別の機構。
0199デフォルトの名無しさん
2006/01/16(月) 03:17:56かなり乱暴な説明だけど、FILEはただの構造体だと思ってしまえば理解しやすいかも
struct FILE {
int pos; // ファイル内の位置が格納される
// その他メンバ色々
};
FILE *fp = fopen(...);
fseek(fp, 10, SEEK_CUR); // fp->pos += 10; と同じ。fp自体は変化しない
実際のFILEがどういう構造になっているかは処理系依存だから
普段プログラマが意識する必要はない
ファイル内の位置が欲しければ素直にftellを使うべき
0200デフォルトの名無しさん
2006/01/16(月) 06:20:37標準Cの範囲でやるならファイルを介してやればいい。
Unix系やそれに類似したOSではpopen()があると思う。
0201デフォルトの名無しさん
2006/01/16(月) 09:50:26> ファイルポインタを fp として fseek でアドレス移動を行う。
fseek()ではアドレスは移動しないわけだが。
# かなり勘違いしてそうな悪寒
0202デフォルトの名無しさん
2006/01/16(月) 10:33:52プログラムの終了条件で
while(eps>dx){
}
と書くことが多いですが、EPSは何の略か分かりますでしょうか?
お教え下さい。
0203デフォルトの名無しさん
2006/01/16(月) 10:42:050204デフォルトの名無しさん
2006/01/16(月) 10:43:250205デフォルトの名無しさん
2006/01/16(月) 10:49:190206デフォルトの名無しさん
2006/01/16(月) 10:53:45機械エプシロンでググれ
0207デフォルトの名無しさん
2006/01/16(月) 10:57:17機械エプシロンってことを、初めて知りました。^^;;
勉強になりました。
0208デフォルトの名無しさん
2006/01/16(月) 12:29:22> プログラムの終了条件で
> while(eps>dx){
> と書くことが多いですが、EPSは何の略か分かりますでしょうか?
> while(eps>dx){
は、whileループであって、プログラムの終了条件ではない。
つまり、プログラムの終了条件として、
上記の様に書くことが多いなどと言う事はあり得ない。
また、Cの予約語に「eps」と言う単語はない。
つまり、そのプログラムを書いた人物が考えた識別子であって、
「eps」が何を意味するかなど、その人物にしか分からない。
0209デフォルトの名無しさん
2006/01/16(月) 13:20:260210デフォルトの名無しさん
2006/01/16(月) 15:53:26から内容を読み込むことってC言語でできますか?
fopen("*/aaa","r");
↑ではさっぱりでした。識者の皆様ご教授おながいします。
0211デフォルトの名無しさん
2006/01/16(月) 15:56:340212デフォルトの名無しさん
2006/01/16(月) 15:56:380213デフォルトの名無しさん
2006/01/16(月) 16:02:40ノシ
0214デフォルトの名無しさん
2006/01/16(月) 16:09:290215デフォルトの名無しさん
2006/01/16(月) 16:11:40ファイル名を列挙する関数なりWin32APIを当たってみたら?
0216デフォルトの名無しさん
2006/01/16(月) 16:18:24Linux(fedora core3)で行っているので、
findfirstfileやfindNextDirは試してみたら使えませんでした。
windowsならすぐできそうだとは踏んでいるんですが、linuxで行いたいのです。
0217デフォルトの名無しさん
2006/01/16(月) 16:19:300218デフォルトの名無しさん
2006/01/16(月) 16:19:410219デフォルトの名無しさん
2006/01/16(月) 16:25:090220デフォルトの名無しさん
2006/01/16(月) 16:25:30これは盲点でした。どうもです。
スレ違いなようなので以上で失礼します。
ノシ
0221デフォルトの名無しさん
2006/01/16(月) 16:36:260222デフォルトの名無しさん
2006/01/16(月) 16:56:12C 以外だと、シェルのコマンドライン展開を 「 言語仕様 」 として備えている
言語があるのか?
0223デフォルトの名無しさん
2006/01/16(月) 17:11:470224デフォルトの名無しさん
2006/01/16(月) 17:12:220225デフォルトの名無しさん
2006/01/16(月) 17:20:39シェルがプログラミング言語であると思ってるような文章だな。
0226デフォルトの名無しさん
2006/01/16(月) 18:09:290227デフォルトの名無しさん
2006/01/16(月) 18:19:46その構造体の変数を作り、
sscanfの可変個引数の部分にその変数の各メンバを指定する。
0228デフォルトの名無しさん
2006/01/16(月) 18:19:51記述や考え方はそう変わらんよ。人間が命令して機械が従う。
同じことだ。
0229デフォルトの名無しさん
2006/01/16(月) 18:22:450230デフォルトの名無しさん
2006/01/16(月) 18:37:330231デフォルトの名無しさん
2006/01/16(月) 18:49:570232デフォルトの名無しさん
2006/01/16(月) 18:54:15シェルの操作は対話式のインタープリタ環境と何も変わらん
0233デフォルトの名無しさん
2006/01/16(月) 21:41:26インタープリタがプログラミング言語ではないなら
機種によっては機械語もプログラミング言語ではないな
0234デフォルトの名無しさん
2006/01/16(月) 21:46:530235222
2006/01/16(月) 22:26:55シェルがプログラム言語じゃない ってな主旨ではないの。
>>221 の 「 Cではメタキャラクタの展開は行わない 」 って表現は、
「 メタキャラクタの展開は、シェルの仕事だ 」 としたほうが適切ではないか、って
主旨だったの。
みんな、私のために喧嘩するのはやめてぇぇぇぇ。
♪わたしぃのためぇに、あらそわなぃぃでぇ もうこれいじょう〜
0236デフォルトの名無しさん
2006/01/17(火) 00:17:350237デフォルトの名無しさん
2006/01/17(火) 00:38:09プログラムが実行された時に領域確保されるのか、
その関数が初めて実行されたときに領域確保されるのか、
どっちでしょうか。
0238デフォルトの名無しさん
2006/01/17(火) 00:42:26特に定められてはいないが,ほとんどは前者のほうだろうな。
0239デフォルトの名無しさん
2006/01/17(火) 00:46:110240デフォルトの名無しさん
2006/01/17(火) 00:50:32出ないんですけどどうすればコンパイルできますか?
0241デフォルトの名無しさん
2006/01/17(火) 00:53:090242デフォルトの名無しさん
2006/01/17(火) 00:57:00ilink32.cfg
path
0243デフォルトの名無しさん
2006/01/17(火) 00:57:52でもそもそも関数外の static について >>237 のような疑問は
起こらないと思う
0244デフォルトの名無しさん
2006/01/17(火) 00:58:22打ったらOBJ開けません出てきた
0245デフォルトの名無しさん
2006/01/17(火) 01:00:32readme.txtくらい嫁
0246デフォルトの名無しさん
2006/01/17(火) 01:01:060247デフォルトの名無しさん
2006/01/17(火) 01:05:160248デフォルトの名無しさん
2006/01/17(火) 01:06:46メモリーアドレスという意味なら、コンパイルかリンクされたとき。但し、
共有ライブラリーはプログラムをロードしたときにリンクされるから、
プログラムをロードしたときと言えなくもない。
仮想メモリー(スワップ領域)は、普通はプログラムをロードしたときに
確保されるが、足りなくても見込みで突っ走ってしまうシステムもあった
ような気がする。
物理メモリーは、実際に変数がアクセスされるまでには確保されるが、
いつになるかはシステムの気まぐれで分からない。その関数が初めて
実行されたときというのも有りうる。
0249デフォルトの名無しさん
2006/01/17(火) 01:07:47PATHにc:borland\bcc32\binとか無かったらパスが通ってない。
そしてすれ違い
0250デフォルトの名無しさん
2006/01/17(火) 01:08:36ここで、聞くよりテンプレ見れ
http://pc8.2ch.net/test/read.cgi/tech/1135127048/
0251デフォルトの名無しさん
2006/01/17(火) 01:10:31スレ違いな答え方だな
いつの時点からアクセスが保証されるのかを
規格から引用すれば1行で済むことだ
0252デフォルトの名無しさん
2006/01/17(火) 01:14:33ilink32.cfg 両方ともちゃんと入ってるし
path も通ってます。三日くらいテンプレ見ててわからないのできたんですが・・
0253デフォルトの名無しさん
2006/01/17(火) 08:26:41> メモリーアドレス
……
関数内のstatic変数から出てくる単語じゃないよね?
0254デフォルトの名無しさん
2006/01/17(火) 15:43:25そこで、8ビットづつ読み込んでその8ビットをある7ビットに変換します。
7ビットに変換してもそれを1バイトとすることで計8バイトになると思うのですが
1バイト区切りではなく、7ビットを8回ということで計56ビットで7バイトにするということは
可能なのでしょうか?
また、普通ならば7ビットに変換してもそれを1バイトとすることで計8バイトにするような
実装を行うのでしょうか?
どうぞよろしくお願いします
0255デフォルトの名無しさん
2006/01/17(火) 15:49:080256デフォルトの名無しさん
2006/01/17(火) 15:56:24> 1バイト区切りではなく、7ビットを8回ということで計56ビットで7バイトにするということは可能なのでしょうか?
そのようにプログラムを作れば可能だけど、ビットシフトやビットマスクを駆使することになるから、効率は落ちるし面倒くさい。
> また、普通ならば7ビットに変換してもそれを1バイトとすることで計8バイトにするような実装を行うのでしょうか?
よほどスペースがシビアでなければ、そう実装するのが一番分かりやすいし高速だと思う。
配列やポインタを使って情報を取り出したければ、最低でも1バイト区切りでしか移動できないから、
そう実装するのが一番現実的。
0257デフォルトの名無しさん
2006/01/17(火) 16:10:29ありがとうございました。大変わかりやすくて助かりました。
0258デフォルトの名無しさん
2006/01/17(火) 16:16:03254に書いたある内容に付け加えです。
254ではある変換を用いて8ビット→7ビットにしましたが、
今度はある変換の逆をして7ビットづつ読み込んで7ビット→8ビットにしたとすると
7バイトを8バイトになりますがこちらも実装として可能でしょうか?
1」バイトずつ読み込むというのは知ってるのですがどうかお願いいたします
0259デフォルトの名無しさん
2006/01/17(火) 16:32:040260魚チョコ
2006/01/17(火) 16:36:490261デフォルトの名無しさん
2006/01/17(火) 17:22:17だいたいのPC環境のコンパイラなら多分64ビットだろう。
(環境によって違うのが嫌なら Java で long 使え)。
0262デフォルトの名無しさん
2006/01/17(火) 17:54:310263デフォルトの名無しさん
2006/01/17(火) 17:58:420264デフォルトの名無しさん
2006/01/17(火) 18:13:18(a * b) * c;と左側から解釈されるか
a * (b * c);と右側から解釈されるかの違い
0265デフォルトの名無しさん
2006/01/17(火) 18:15:50たとえば、
i = j = a + b + c + d + e;
便宜的に括弧を付けると、
加算演算子(+)は、左から右に結合するので、
( ( ( ( a + b ) + c ) + d ) + e )
となる。
代入演算子(=)は、右から左に結合するので、
( i = ( j = ( ( ( ( a + b ) + c ) + d ) + e ) ) )
となる。
0266デフォルトの名無しさん
2006/01/17(火) 18:59:11なるほどー、よく分かりました。
0267デフォルトの名無しさん
2006/01/17(火) 23:52:26と書いてあるページを見たんですがこれは何のためでしょうか?
// define.h
typedef int* IntPtr;
// test.h
void Test() { IntPtr p; }
// main.c
#include "define.h" // test.hではなくこっちでinclude
#include "test.h"
Test();
0268デフォルトの名無しさん
2006/01/17(火) 23:53:00main() { int a = 0xff; fuga((unsigned)a); }
の a についてなんですが、キャストすべきですか? ビットパターンは同じだから
キャストはいらないとかたまに考えたりしてます
0269デフォルトの名無しさん
2006/01/17(火) 23:55:03ゲームを作りたくて、kbhitを使いたいのですが
コンパイルするとconio.hというファイルは、ないという
エラーがでてしまいます。下手な説明でわかりにくいかもしれませんが
どなたかわかる人教えてください。
0270デフォルトの名無しさん
2006/01/18(水) 00:04:24コンパイラに無いと言われたなら無いんだろ
他の方法使え
0271デフォルトの名無しさん
2006/01/18(水) 00:05:57それはおかしい。
そのサイトを晒してくれ。
0272271
2006/01/18(水) 00:07:140273デフォルトの名無しさん
2006/01/18(水) 00:08:39test.hがdefine.hを必要とするならば
どう考えてもtest.hでもインクルードすべきだろう
インクルードガードさえしてれば問題ないんだし
0274デフォルトの名無しさん
2006/01/18(水) 00:21:42どうすりゃいいんだ。
0275デフォルトの名無しさん
2006/01/18(水) 00:22:00コンパイラの出力アセンブリを見てみると分かる。
0276267
2006/01/18(水) 00:29:29webサイトなんですがやめときます。
>>273
#ifndefなどで2重インクルード防止をしていない場合はtest.hで
includeするとエラーが出る場合があるからダメって事ですかね。
0278デフォルトの名無しさん
2006/01/18(水) 02:45:21ヘッダの依存関係を明示させるためとか言う説を聞いたことがある。
0279デフォルトの名無しさん
2006/01/18(水) 06:16:05同じファイルが何度も読み込まれてコンパイル時間に影響を
及ぼす、みたいな話はきいたことある。
0280デフォルトの名無しさん
2006/01/18(水) 06:47:50#define ON 1
#define BLKSZ 24
typedef struct { int flg;int st; } mbox;
main(){
if( mg[4/BLKSZ][8/BLKSZ].flg == ON )
この配列の要素4/BLKSZと8/BLKSZは、どこの数字を指すのでしょうか?
0281訂正
2006/01/18(水) 06:52:47#define BLKSZ 24
#define CMAX 16
typedef struct { int flg;int st; } mbox;
main(){
mbox mg[CMAX][CMAX];
if( mg[4/BLKSZ][8/BLKSZ].flg == ON )
配列の要素[4/BLKSZ]と[8/BLKSZ]の値が分数になります。
配列の要素は整数しか扱ったことがないので、これはどういう領域を指しているのでしょうか?教えて下さい
0282デフォルトの名無しさん
2006/01/18(水) 07:08:120283デフォルトの名無しさん
2006/01/18(水) 07:10:49小数点は切捨てで良いのでしょうか?
0284デフォルトの名無しさん
2006/01/18(水) 07:24:43死ねばええやん。
0286284
2006/01/18(水) 07:36:21>>282=285
偽者乙。
死ねばええやん。
age
0287デフォルトの名無しさん
2006/01/18(水) 07:38:500288デフォルトの名無しさん
2006/01/18(水) 07:42:250289デフォルトの名無しさん
2006/01/18(水) 07:46:01>>282 名前: デフォルトの名無しさん [sage] 投稿日: 2006/01/18(水) 07:08:12
ためしてみりゃええやん。
>>285 名前: 284 [sage] 投稿日: 2006/01/18(水) 07:32:47
×>>282
○>>283
だったorz
コイツ テライタスwwキショスギ
さらしage
0290デフォルトの名無しさん
2006/01/18(水) 09:08:32if文で真の整数を入力したのに、実行して10を入力しても{}の中の文がスルーされてしまいます。
#include <stdio.h>
int main()
{
int res;
printf("整数を入力汁。\n");
scanf("d",&res);
if (res == 10){
printf("10が入力されますた。\n");
printf("10が選択されますた。\n");
}
printf("処理を終了します。\n");
return 0;
}
なぜだか分かりません。
どこか間違えてるのでしょうか?
0291デフォルトの名無しさん
2006/01/18(水) 09:13:120292290
2006/01/18(水) 09:14:37ただ、scanf("d",&res); の%が抜けてただけでした。
おさわがせしました。
0294デフォルトの名無しさん
2006/01/18(水) 11:49:20多分整数の割り算だと小数点は切り捨てされる
0295デフォルトの名無しさん
2006/01/18(水) 13:16:27> ”ヘッダーファイルを直接的にインクルードしてはいけない”
> と書いてあるページを見たんですがこれは何のためでしょうか?
> // define.h
> typedef int* IntPtr;
> // test.h
> void Test() { IntPtr p; }
> // main.c
> #include "define.h" // test.hではなくこっちでinclude
> #include "test.h"
よくわからんが、作りが変だからジャネーの?
test.hのTest()は明らかにdefine.hのIntPtrを必要としている。
つまり、test.hはdefine.hに依存しているのにそれが明示されていない
test.hはdefine.hを#includeすべき
# ヘッダ中でincludeすべきないという馬鹿は標準関数のヘッダを見てから物を言おうな
この作りだと例えば
// main.c
#include "test.h"
#include "define.h"
とヘッダの#includeの順番を変化させただけでコンパイルができなくなる
上記の例に限って言えば作りがアホすぎる
ヘッダの依存関係なんてgccなら-M使え
0296デフォルトの名無しさん
2006/01/18(水) 15:51:00Cで任意のファイルの任意の位置に、
任意のデータを挿入したい場合はどうすればよいのでしょうか?
挿入したい位置までreadでファイルを読み込んで、
writeでそこに書き込もうとしたところ、
挿入されず上書きされてしまいました。
上書きではなく挿入にするモードがあったりしますか?
あればかなり楽なのですが・・・
0297デフォルトの名無しさん
2006/01/18(水) 15:54:340298296
2006/01/18(水) 16:33:54そうですか・・・残念です。
では具体的にはどうすればよいのでしょうか?
もし宜しければお願いします。
0299デフォルトの名無しさん
2006/01/18(水) 16:55:55rでもなく、wでもなく、aじゃん。
0300デフォルトの名無しさん
2006/01/18(水) 17:00:170301デフォルトの名無しさん
2006/01/18(水) 17:00:261.メモリ上で挿入処理し、ファイルに上書き
2.別ファイルにさも挿入した様に書き込み、元ファイル削除+別ファイルをリネーム
お好みでどうぞ。
0302296
2006/01/18(水) 17:18:07ありがとうございます。
出来るだけ高速に処理したいので、
1.のメモリ上で処理してファイルに書き込むという方法でやってみようと思うのですが、
その場合、ファイル全体の大きさと同じだけのバッファ領域を用意する必要があるのでしょうか?
0303デフォルトの名無しさん
2006/01/18(水) 17:19:07同じだけ確保できないなら細切れにして読み込めばいいだけじゃ?
0304デフォルトの名無しさん
2006/01/18(水) 17:25:480305デフォルトの名無しさん
2006/01/18(水) 17:28:09好きなように汁。
因みにファイルを上書きすると、もし途中でエラーになった場合は
元のファイルが壊れた状態で残るわけだが、それはおk?
0306296
2006/01/18(水) 17:45:27>>305
ありがとうございます。
エラーの場合の元のファイルの状態については大丈夫です。
挿入したいデータは一つではないので、
元ファイル読み込み→バッファA→新ファイル書き込み
を細かい単位で繰り返していき、
挿入したいデータの場所にきたら
挿入したいデータを格納しているバッファ→新ファイル書き込み
という流れでやってみようと思います。
ただこれだと今度は挿入したいデータを格納するバッファ領域を
挿入したいデータの総サイズと同じサイズだけ用意しなくてはならないと思うので、
ファイル全体と同じだけ確保するのに比べれば大分少ないとは思いますが、
メモリの消費量がちょっと心配です・・・。
0307デフォルトの名無しさん
2006/01/18(水) 17:59:55の配列要素の平均値を表示させるプログラムを
条件:変数aveを使用、平均値のみ小数点第1位まで表示で解く
問題をやっているのですが、答えまでの道筋が全く見えません。
答えじゃなく、どなたかヒント下さい・・・。
0308デフォルトの名無しさん
2006/01/18(水) 18:05:21データが'\0'ならループ終了
aveを要素数('\0'を除く)で割る(ここで、四捨五入等の処理を)
0309デフォルトの名無しさん
2006/01/18(水) 18:07:00(ター峰ータって、回文ダタノカ 打ってみてビクーリ)
0310デフォルトの名無しさん
2006/01/18(水) 18:09:260311デフォルトの名無しさん
2006/01/18(水) 18:11:270312デフォルトの名無しさん
2006/01/18(水) 18:35:00平均も判らないなら、消防からやり直した方がいいよ。
0313デフォルトの名無しさん
2006/01/18(水) 19:55:10てかマジでやめた方がいいよ。算数レベルじゃん・・・。
絶対挫折するから
0314デフォルトの名無しさん
2006/01/18(水) 21:02:040315デフォルトの名無しさん
2006/01/18(水) 21:34:050316デフォルトの名無しさん
2006/01/18(水) 21:36:26文字→EUCコード数値への変換プログラムはできたのですが、
逆(EUCコード数値→文字)ができません・・・
つまり
(164,162) を入力して「あ」に変換するにはどうすればいいのでしょうか?
お願いします。
0317デフォルトの名無しさん
2006/01/18(水) 21:57:130318デフォルトの名無しさん
2006/01/18(水) 22:05:40ノードの作成。先頭&終端を指す奴。次のノードへのポインタ。
これで実装できますか?
0319デフォルトの名無しさん
2006/01/18(水) 22:12:56もういいです。何回か挫折した後聞きに来ますから、
その時は優しくお願いします。
0320デフォルトの名無しさん
2006/01/18(水) 22:21:18君には配列で十分
実装はその後でね。
0321デフォルトの名無しさん
2006/01/18(水) 22:32:28マネージ拡張をONにして、StackTraceクラスを使えば
取得出来たのですが、処理効率が悪く、使い物にならない状況です。
その他の方法で、スタックトレース(又は呼び出し元関数,ファイル等)
を取得出来ないでしょうか?
ちなみに環境は、
Visual C++.NET2003
です。
0322デフォルトの名無しさん
2006/01/18(水) 22:35:52>>1
さようなら
0323デフォルトの名無しさん
2006/01/18(水) 23:18:56誘導先へのアンカー貼れない奴は同レベル
底辺同士いがみあってろ
俺らには関係ない
0324デフォルトの名無しさん
2006/01/18(水) 23:54:55アンカー貼って欲しいなら↓こちらへドゾー
ttp://pc8.2ch.net/test/read.cgi/tech/1066747198/l50
0325デフォルトの名無しさん
2006/01/18(水) 23:57:52元々、変換など必要ない。
数値として表示すると「(164,162)の2バイト」となり、
EUC文字列として表示すると「あ」と表示されるだけ。
0326デフォルトの名無しさん
2006/01/19(木) 03:09:06単方向なら先頭ノードへのポインタ、ノードには次のノードへのポインタを。
双方向ならノードには前のノードへのポインタも必要。終端のポインタはお好みで。
0327デフォルトの名無しさん
2006/01/19(木) 04:20:48\0とか\nみたいな特殊文字に対応していない(印字できない)アスキーコードの文字を
memcpy(buf, "・・・・・" , n);
みたいな具合でメモリに一括で格納したいのですが、可能でしょうか?
それとも
str[0] = 0x0;
str[1] = 0x1;
str[2] = 0x2;
・・・
みたいに個別に代入しなくてはならないのでしょうか。
(わかりにくい質問ですみません)
0328デフォルトの名無しさん
2006/01/19(木) 05:31:20じゃだめ?
0329デフォルトの名無しさん
2006/01/19(木) 07:24:09LPSTR loadStr[256][256];
BOOL LoadFile(char *strFile , LPSTR **sysStr) {
:
}
if(!LoadFile(TEXT("map\\map.txt") , &loadStr)) return FALSE;
2次元配列をLoadFile関数で使用したいのですが、
どこが間違っていますか?
教えてください。
0330デフォルトの名無しさん
2006/01/19(木) 07:25:070331デフォルトの名無しさん
2006/01/19(木) 07:28:32やっと意味が判った。
'\000'(0の部分は八進数文字)か
'\xHH'(Hの部分は十六進文字)で、任意の文字定数を文字列に埋め込める。
桁に制限はないから、実は'\0'もその一種。
ってあれ、この表記の後に、桁に対応する文字を置きたい時はどうすれば良いんだ?
対応する文字じゃなくなるまで文字コード表記し続けるしかない?
0332デフォルトの名無しさん
2006/01/19(木) 07:41:00char [] ≒ char *
char [][] ≠ char **
char [][N] ≒ char *[N]
変数を定義する時は優先順位の関係でかっこが必要。
0333デフォルトの名無しさん
2006/01/19(木) 07:46:44char [][N] ≒ char (*)[N]
0334デフォルトの名無しさん
2006/01/19(木) 15:36:53int main(void) {
double tmp1, tmp2, tmp;
tmp1 = 0.004004004;
tmp2 = tmp1 * tmp1;
tmp = tmp2 - tmp1 * tmp1;
if(tmp >= 0)
printf("tmpは0以上の値: %e\n", tmp);
else
printf("tmpは負の値: %e\n", tmp);
return 0;
}
このソースをコンパイルしてプログラムを実行すると、最終的にtmpには0が格納されて、
標準出力には「tmpは0以上の値: 0〜」と出力されて欲しいところですが、
実際に実行するとなぜかtmpには非常に小さい負の値が格納されていて、
「tmpは負の値〜」と出力されてしまいます。これは何が間違っているのでしょうか。
tmpは0以上の値〜と表示させるにはどこをどのように修正すればよいのでしょうか。
環境は Redhat Linux 9 + gcc-3.2.2-5 です。
0335デフォルトの名無しさん
2006/01/19(木) 15:43:550336デフォルトの名無しさん
2006/01/19(木) 15:47:360337デフォルトの名無しさん
2006/01/19(木) 16:03:02君はMS-DOSの話をしているのかな?
0338デフォルトの名無しさん
2006/01/19(木) 16:14:29ありがとうございます。
0339デフォルトの名無しさん
2006/01/19(木) 16:17:12スレ違い。
環境に合ったスレへドゾー
0340デフォルトの名無しさん
2006/01/19(木) 16:22:42丸め誤差の関係だと思うが、最適化オプション付けてコンパイルすると
最適化によって意図した通りになるかも知れない。gcc では -O 付けたら
できたから。
0341デフォルトの名無しさん
2006/01/19(木) 16:22:43334ですが、誤差とは10進数で表現された小数の中には
2進数でそれを正確に表現できないものがある、という
その時の誤差のことでしょうか?
0342デフォルトの名無しさん
2006/01/19(木) 16:24:39計算時の誤差もあるのでは?
0343デフォルトの名無しさん
2006/01/19(木) 16:30:51334ですが連投すいません。
確かに私の環境でも -O をつけて最適化すると
意図した通りになりました。gccが中で一体
どんな最適化をやったのかは知りませんが不思議です。
>>342
あ〜、確かにそれもあるかもしれませんね。
0344デフォルトの名無しさん
2006/01/19(木) 16:49:570345デフォルトの名無しさん
2006/01/19(木) 18:48:10int main(void)
{
int n,a,b;
printf("数値1:");
scanf("%d",&a);
printf("数値2:");
scanf("%d",&b);
n=1;
while(n<=(a||b)){
if(a%n==0 && b%n==0);
++n;
}
printf("%dと%dの最大公約数は%dです",a,b,n);
return 0;
}
最大公約数を計算させなければいけないんですができません…
条件はwhileを使ってaかbの小さい方になるまで繰り返すこと、
nがaとbを割り切ることが出来るかどうかを剰余の演算子(%)を使ってifの条件にすることです。
while(n<=(a||b)) こんな書き方アリですか?
if(a%n==0 && b%n==0) コードは効果を持たない という警告が出ます。
超初心者なんでお願いします。
0346デフォルトの名無しさん
2006/01/19(木) 18:51:53やるなら
while(n <= a || n <= b)
0347345
2006/01/19(木) 18:58:03if(a%n==0 && b%n==0)は相変わらず警告なんですがどうしたら有効になりますか?
0348デフォルトの名無しさん
2006/01/19(木) 18:59:220349デフォルトの名無しさん
2006/01/19(木) 19:16:29変数mを一個宣言して
m=a; n=b;
while(m != n){
if(m > n)
m=m-n;
else
n=n-m;
}
printf("最大公約数=%d\n",m);
}
差が大きい場合は剰余を使った方がいい。
0350345
2006/01/19(木) 19:42:19349>剰余を使わなければいけないみたいなんです…
今のところ
#include<stdio.h>
int main(void)
{
int n,a,b;
printf("数値1:");
scanf("%d",&a);
printf("数値2:");
scanf("%d",&b);
n=1;
while(n <= a || n <= b){
if(a%n==0 && b%n==0)
++n;
}
printf("%dと%dの最大公約数は%dです",a,b,n);
return 0;
}
正常にコンパイルされているように見えるのですが、実行すると、
数値2を入力した後にまた点滅(?)が出てきます…
もう入力するものはないはずなんですが…
0351デフォルトの名無しさん
2006/01/19(木) 19:44:31どうちがうんですk
0352デフォルトの名無しさん
2006/01/19(木) 20:00:24問題:
符号なし整数nを16進数の文字列s[]に変換する関数ItoH(n,s)を作りなさい。
ヒント:
文字列を逆に入れ換えるライブラリ関数strrevを使うこと。
実行例:
符号なし整数n:165
16進数 :A5
これ、意味が分からなくて沈んでます・・・
出来れば何かヒントを下さい・・・誰か・・・(´;ω;`)
0353デフォルトの名無しさん
2006/01/19(木) 20:00:30VC++ は Windows 用の C++ のコンパイラと Windows 用プログラムを
作るためのツールが一体になったソフトです。
0354デフォルトの名無しさん
2006/01/19(木) 20:03:12#define ItoH(n,s) sprintf((s),"%x",(n))
0355345
2006/01/19(木) 20:04:36int main(void)
{
int n,a,b;
printf("数値1:");
scanf("%d",&a);
printf("数値2:");
scanf("%d",&b);
n=1;
while(n <= a || n <= b){
if(a%n==0 && b%n==0)
printf("%dと%dの最大公約数は%dです\n",a,b,n);
++n;
}
return 0;
}
にしてみました。数値を100と90にした場合、
100と90の最大公約数は1です。
100と90の最大公約数は2です。
100と90の最大公約数は5です。
100と90の最大公約数は10です。
と全ての公約数が表示されます。最大公約数を求めることには成功してますが、
最後の文章だけを表示させるにはどうしたいいのでしょう?
0356351
2006/01/19(木) 20:04:40プログラマの自己紹介みたいなところに
VC++が出来るって書いてるんですけど
0357デフォルトの名無しさん
2006/01/19(木) 20:05:210358デフォルトの名無しさん
2006/01/19(木) 20:06:40はまずそのエラーが直っても最大公約数を求められない。
もう一度考え直してみてわ?
0359デフォルトの名無しさん
2006/01/19(木) 20:08:13そんなプログラムが使えるかwwww
0360デフォルトの名無しさん
2006/01/19(木) 20:43:49即レス�dです!
あの・・・良かったらもうちょっと詳しく・・・とかなりませんか?
嫌ならスルーで結構ですので・・・_| ̄|〇
0361デフォルトの名無しさん
2006/01/19(木) 20:50:28問題文のわからない語句すべてをググることから始めるといいと思う
0362デフォルトの名無しさん
2006/01/19(木) 21:04:28また即レス�dです!
そうですね。自分も聞いてばっかじゃなく調べてみます。
ありがとうございました(´∀`)
0363デフォルトの名無しさん
2006/01/19(木) 21:04:35int main(void)
{
double d;
int i=0;
for(d = 0.0; d != 1.0; d += 0.1){
printf("%d\n",i++);
}
return 0;
}
****************
上記を実行するとループを抜けないのですが
なぜなんでしょうか。。。?
0364デフォルトの名無しさん
2006/01/19(木) 21:07:02コンピュータは浮動小数点数を二進法で表している。
十進法の0.1は2進法で正確に表せないので誤差が生じ、10回足しても1.0丁度にならない。
0365デフォルトの名無しさん
2006/01/19(木) 21:08:08釣りなのか?
0366デフォルトの名無しさん
2006/01/19(木) 21:15:25浮動小数点は 所 詮 は 近 似 値 、誤差とのつきあい方を憶えないと不毛な堂々巡りが死ぬまで続く
0367デフォルトの名無しさん
2006/01/19(木) 21:43:35memcpyなら可能じゃないかな?
strcpyとかならNULLで切られちゃうからそれ以降の値はコピーされないけど
0368デフォルトの名無しさん
2006/01/19(木) 21:45:490369デフォルトの名無しさん
2006/01/19(木) 21:51:430370デフォルトの名無しさん
2006/01/19(木) 21:58:26AAAAA 8 // 909090
SSSSS 6 //676767
TTTT 3 // 21e 90382082
//EEEE 8 // efegeeg
のようなテキストデータがあって
先頭の文字列を取得して2番目の数値を記憶したんですが
上に書いたとおり//でコメントも打たれてる場合があったりスペースが間に
混じってる時もあります。fscanfで読み込んだ場合は1行目のデータは
fscanfで4つの文字列で取れるので//が取れたときは次の文字列を保存しない
流れでデータを保存できるんですが//とコメントがスペースやTABなどが入ってない
場合次の行の保存した文字列がとれなくなります。
どういった方法でうまくとれますでしょうか?
0371デフォルトの名無しさん
2006/01/19(木) 22:11:06ヘッダかなんかに宣言されてる値だけ取りたいみたいな処理なんですかね?
だったら一行取ってきて、"//"を検索してあったらそれ以降はもうコメントなので見なければ良いんじゃない?
なんかよく読んでないからテキトーでスマソ
0372デフォルトの名無しさん
2006/01/19(木) 22:16:34とりあえず俺がCでやるのなら、まずfgetsで行単位に切り出す。
0374sage
2006/01/19(木) 22:27:17#define C CCC
#define D DDD
int main(void)
{
#if B==C
printf("1");
#else
printf("2");
#endif
return 0;
}
--------------------
1が出力されるのですが・・・
どうしてでしょうか。
0375デフォルトの名無しさん
2006/01/19(木) 22:28:030376デフォルトの名無しさん
2006/01/19(木) 22:58:26linuxでやっているのですが、コンパイラに
conio.hがないと言われるので、kbhitと同じような
キー入力を判定するものはないですか?
0377デフォルトの名無しさん
2006/01/19(木) 23:00:04vi ってどうやって作ってるんだろうね
ioctl とか調べてみた?
0378デフォルトの名無しさん
2006/01/19(木) 23:07:130379デフォルトの名無しさん
2006/01/19(木) 23:36:50両方voidなのかな?
0380デフォルトの名無しさん
2006/01/19(木) 23:38:10> #define C CCC
> #define D DDD
CCC、DDDってなんだとおもう?
数値に変えればご希望の動作になると思うけど
0381デフォルトの名無しさん
2006/01/19(木) 23:51:49ioctlとはんでしょうか・・・
ぐぐってみたのですが意味がよくわかりませんでした_| ̄|○
0382デフォルトの名無しさん
2006/01/20(金) 00:00:23linuxスレに逝けばわかるよ
0383デフォルトの名無しさん
2006/01/20(金) 00:01:43プログラムを実行して結果が出てから、最初の方に戻るかどうか選択できるようにしたいんですが。
質問わかりにくくてすいません。
0384デフォルトの名無しさん
2006/01/20(金) 00:05:400385デフォルトの名無しさん
2006/01/20(金) 00:09:14ループさせる。
またはgoto
0386デフォルトの名無しさん
2006/01/20(金) 00:09:240387デフォルトの名無しさん
2006/01/20(金) 00:14:26while(1){
...
判定して break;
}
0388383
2006/01/20(金) 00:23:29がんばってみます。
0389デフォルトの名無しさん
2006/01/20(金) 00:37:32みたいに文字列リテラルを返すのってありなんですか?
0390デフォルトの名無しさん
2006/01/20(金) 00:38:380391デフォルトの名無しさん
2006/01/20(金) 00:40:09ありだが普通はバッファへのポインタを引数で渡して
そこに格納するか、若しくは受け取った側がきちんと
管理するという前提の下で、関数内で動的確保した
領域にセットしてそこへのポインタ返すかだろうな
0392デフォルトの名無しさん
2006/01/20(金) 00:43:520393389
2006/01/20(金) 00:50:09文字列リテラルはプログラムのある領域に埋め込まれるということですが、
普通は使うべきではないですか?
バッファを引数で渡したり、動的確保は処理が冗長になるかなと思ったので
0394デフォルトの名無しさん
2006/01/20(金) 00:52:18関数内よりその関数のコール元でバッファは用意すべき
0395デフォルトの名無しさん
2006/01/20(金) 00:52:23みたいなアフォなことをやらなければ大丈夫
0396デフォルトの名無しさん
2006/01/20(金) 00:55:26どうやって書けばいいのでしょうか?
0399デフォルトの名無しさん
2006/01/20(金) 05:56:47{
int temp=0;
if(num==1) return;
for(int i=num-1;i>0;i--)
if(arr[i]<arr[i-1]){
temp=arr[i];
arr[i]=arr[i-1];
arr[i-1]=temp;
}
babo(&arr[1],num-1);
return;
}
上記の関数は独自に実装したバブルソートのコードでして
arrにソートする配列へのアドレス、numに配列の個数となっています。
それはともかくとして、適当な数が代入された100,000個のint型(符号付き32bit)を上記の関数でソートしますと
なぜか制御が戻ってこないままプログラムが終了してしまいます。(10,000個とかだとソートされるのですが・・)
処理系はBCC5.5.1で、OSはXP(32bit)sp2を使用しています。CPUも32bitです。
原因がわかる方はいますでしょうか・・・
0400デフォルトの名無しさん
2006/01/20(金) 06:03:08無いならないでprintfで表示させるとか考えない?普通。
0401デフォルトの名無しさん
2006/01/20(金) 06:10:10babo(arr,num)
fflush(stdin);
printf("ソートが完了しました");
getch();
などしてもbaboから制御が返ってこないまま終了していまうんですってば
0402デフォルトの名無しさん
2006/01/20(金) 06:13:380403デフォルトの名無しさん
2006/01/20(金) 06:23:442^15個では制御が返ってきます。
2^15個+1、2^15+100個でも制御は返ってきました
0404デフォルトの名無しさん
2006/01/20(金) 07:02:25>>400さんがpirntf使えって言ってるでしょ
0405デフォルトの名無しさん
2006/01/20(金) 07:09:380406デフォルトの名無しさん
2006/01/20(金) 08:56:40お前馬鹿だろ。
baboの中でprintfで終了条件のチェックとかしないでどうすんだよ。
0407デフォルトの名無しさん
2006/01/20(金) 09:33:180408デフォルトの名無しさん
2006/01/20(金) 11:47:44>>407
w
0409デフォルトの名無しさん
2006/01/20(金) 14:09:06strを先頭に戻したい時って
strからずらした分引くしか方法ないですか?
0410デフォルトの名無しさん
2006/01/20(金) 14:12:09char *startでも作って文字入力する前に入れておけ
0411デフォルトの名無しさん
2006/01/20(金) 14:16:400412デフォルトの名無しさん
2006/01/20(金) 14:32:16どうもありがとうございます
なるほど
>>411
なんとなく知りたかっただけなんでw
0413デフォルトの名無しさん
2006/01/20(金) 15:34:34キーボードから打ち込んだ一文字一文字を
判定した上でコンソール上で表示しているわけですが
コンソール画面上に表示されている文字をchar型配列に保存したく思っております
何かよい方法があればご教示下さい
0414デフォルトの名無しさん
2006/01/20(金) 15:51:14普通に保存すれば?
0415デフォルトの名無しさん
2006/01/20(金) 15:57:51今までJavaで仕事をしていたのですが、新しい案件でどうやらCも使うそうなので、
短期間ではありますが勉強したいと思っています。
個人的なお勧めで良いので教えて下さい。
Eclipse+CDTも考えたのですが、C環境ならではの良いフリーソフトがあるのではないかと思いまして。
宜しくお願いいたします。
0416デフォルトの名無しさん
2006/01/20(金) 15:59:540417デフォルトの名無しさん
2006/01/20(金) 16:01:14素早い返信ありがとうございます。
使ってみます。
0418デフォルトの名無しさん
2006/01/20(金) 17:28:25自分自身の間違いなのかわかりませんが、以下のプログラムが思うように動作しません。
#include <stdio.h>
void main(){
int n;
char ch;
printf("数字入力>");
scanf("%d", &n);
printf("文字入力>");
scanf("%c", &ch);
printf("\n");
printf("入力された数値 = %d\n",n);
printf("入力された文字 = %c\n",ch);
}
[実行結果]
数字入力> 10 [return]
文字入力> a [return]
入力された数字 = 10
入力された文字 = a
0419デフォルトの名無しさん
2006/01/20(金) 17:34:320420デフォルトの名無しさん
2006/01/20(金) 17:33:29数字入力> 10
文字入力>
入力された数字 = 10
入力された文字 =
このような形で出てきてしまいます。
例題の載っていたサイトのものをそのままC&Pしても同様の結果になりました。
原因のわかる方、教えて下さい。宜しくお願いします。
0421デフォルトの名無しさん
2006/01/20(金) 17:37:16すみません。
原因が自分にあるために間違っているのであればやりようがあるのですが、
問題のサイトの例題を使っても同様の結果になったので、
例題のサイトが間違っているのか、もしくは環境が影響することはあるのかな?と思い、質問させて頂きました。
0422デフォルトの名無しさん
2006/01/20(金) 17:41:52scanf()を使わない。後、スレ違い。
くだすれC++Builder(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1117225464/
【初心者歓迎】C/C++室 Ver.24【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1135828083/
おまいら!今日からC言語を学んでいくぞー!パート3
http://pc8.2ch.net/test/read.cgi/tech/1134646050/
0423デフォルトの名無しさん
2006/01/20(金) 17:43:300424デフォルトの名無しさん
2006/01/20(金) 17:47:29scanf()がどうとかわからないの当たり前だろうに。ひでぇ住人だ。
これくらいのこと答えてやってもいいんじゃねーの?俺?答えねーよwwww
0425デフォルトの名無しさん
2006/01/20(金) 17:50:52自分で他のところから進めたら、いずれ分かるかもしれないので
しばらく進めていってみます。ありがとうございました。
0426デフォルトの名無しさん
2006/01/20(金) 18:04:360427デフォルトの名無しさん
2006/01/20(金) 18:19:28VC8.0では、既にscanf_s()を推奨している。
0428デフォルトの名無しさん
2006/01/20(金) 18:25:28のどこが間違ってるのか全然分かりません。
0429428
2006/01/20(金) 18:32:25手放せません。なぜあのプログラムがいけないのかという事をお願いします
0430デフォルトの名無しさん
2006/01/20(金) 18:33:51改行コード
0431デフォルトの名無しさん
2006/01/20(金) 18:36:100433デフォルトの名無しさん
2006/01/20(金) 19:00:44> scanf("%d", &n);
> scanf("%c", &ch);
scanf(" %d", &n);
scanf(" %c", &ch);
で期待通りの動きはするだろうが、
scanfの数値チェックでまた嵌りそうな気がする...
0434デフォルトの名無しさん
2006/01/20(金) 19:18:330435デフォルトの名無しさん
2006/01/20(金) 19:23:490436デフォルトの名無しさん
2006/01/20(金) 19:26:36タキオン粒子
0437デフォルトの名無しさん
2006/01/20(金) 19:40:510438デフォルトの名無しさん
2006/01/20(金) 19:41:22太陽スレスレをワープ
0439デフォルトの名無しさん
2006/01/20(金) 20:03:39ザ・パワー
0440435
2006/01/20(金) 20:35:560441デフォルトの名無しさん
2006/01/21(土) 00:35:36バブリーばか
0442デフォルトの名無しさん
2006/01/21(土) 00:43:18ネタ認定されてるけど、いちおう。INT_MAX ULONG_MAX 辺りで調べてみて。
0443デフォルトの名無しさん
2006/01/21(土) 00:58:29計算量の話だろ、バブルソートだぜ2乗増えるんだから返ってこなくてあたりめーじゃん
0444デフォルトの名無しさん
2006/01/21(土) 04:43:43コンソール・windwsアプリケーション共にどのくらいのプログラムを作成する事が出来るんですか?
dosとwinと別で見本とかないでしょうか?
0445デフォルトの名無しさん
2006/01/21(土) 04:50:57全くプログラミングは無知識なんでどういった風に出来るのかが知りたいのでご存知の方がいらっしゃいましたらお願いします。
0446デフォルトの名無しさん
2006/01/21(土) 05:53:13例えばC標準では文字を出力するならprintfだろ
WindowsアプリケーションではMicroSoftが提供している関数郡(API)を使用して
1.ウィンドウの作成 CreateWindow関数
2.メッセージの処理 GetMessage関数
3.文字の出力 TextOut関数
4.終了処理 PostQuitMessage関数
をしなければ成らない
更に言うとWindowsアプリケーションを組む事においてC言語というフィールドはたんなる土壌に過ぎない
0447デフォルトの名無しさん
2006/01/21(土) 10:22:47#include <windows.h>
main()
{
HDC hDC = CreateDC("DISPLAY", NULL, NULL, NULL);
Ellipse(hDC, 0, 0, 640, 480);
DeleteDC(hDC);
}
0448デフォルトの名無しさん
2006/01/21(土) 10:50:36のように○か▲か■か・・以外なら〜というような条件を付ける場合
もうちょっと短く書けないもんでしょうか?
numならいいんですけど変数名が長いと横に長くなっちゃって・・・
0449デフォルトの名無しさん
2006/01/21(土) 11:06:48そういう複雑な条件には,何らかの意味があるはず。
ソケットにまだヘッダが到達していないとか
ユーザー名,住所,パスワードのどれかが記入されていないとか
ネコミミがついていないとか
そういう判定の関数を作って,適切な名前をつけてやればどうよ?
if (! isAvailableNekomimiHeader(state))
みたいな。
0450デフォルトの名無しさん
2006/01/21(土) 11:15:33基本的な事なんだと思いますがそこらへん盲点でした。ありがとうございます。
ビット演算とか使ったりするといいのかなーと思ったんですが、
わかりやすい方がいいですね。
0451デフォルトの名無しさん
2006/01/21(土) 11:17:38数値ならswitchでも使えば?
0452デフォルトの名無しさん
2006/01/21(土) 11:40:51case 1: case 5: case 7: return true;
default: return false;
}
のような感じでしょうか?
Switch使えば本体部分も関数も短くなりますね。
というか全然当たり前っぽいことできてないみたいで・・・
0453デフォルトの名無しさん
2006/01/21(土) 11:43:470454デフォルトの名無しさん
2006/01/21(土) 12:32:250455デフォルトの名無しさん
2006/01/21(土) 13:21:45どれがCじゃないと?
>>453
そういうのを書き出すと2進定数表現が欲しくなるね。
>>448
C99なら関数をstatic inlineにしておくと最適化によって、
条件判断を長々と書くのと変わらない効率が期待できる。
0456デフォルトの名無しさん
2006/01/21(土) 13:34:08スペースの場所でエラーが出てるみたいなんですけど
こうゆうときのパスはどう書けばいいんでしょうか?
0457デフォルトの名無しさん
2006/01/21(土) 13:56:57それで開けると思うけど、ダメならショートネームを使うとかなんとか。
詳しいことは、環境依存OKスレででも聞いてくれ。
0458デフォルトの名無しさん
2006/01/21(土) 13:59:25> どれがCじゃないと?
おそらく、>>452 のことでは内科医? Switch は C の予約語ではない。
>>456
> スペースの場所でエラーが
それ、ほんとか? 家のPCには開発環境がないので確かめられないが、ちょっと考えられないな。
0459デフォルトの名無しさん
2006/01/21(土) 14:06:53うちでは通るよ(VC++6.0・Win2000)
ユーザtaがいないとか、実行ユーザにtaのファイルを見る権限がないとか?
0460デフォルトの名無しさん
2006/01/21(土) 14:18:38windows のロングファイル名に対応していない 標準ライブラリ使ってるとか?
0461デフォルトの名無しさん
2006/01/21(土) 14:36:340462デフォルトの名無しさん
2006/01/21(土) 14:43:500463デフォルトの名無しさん
2006/01/21(土) 15:01:31LSICのことかーーー!!!
0464デフォルトの名無しさん
2006/01/21(土) 15:45:58例えば
AAAAA 10
AAAAAAAAA 20
BBBB 30
なふうにです。
文字列と数値は別々に変数に持ってるんですが
sprintf( a, "%-20s %d", b)でうまくいかないんですが他に何を足せばいいですか?
0465デフォルトの名無しさん
2006/01/21(土) 16:05:000466デフォルトの名無しさん
2006/01/21(土) 16:09:24#include <stdio.h>
int main(void)
{
int data1[10];
int data2[] = { 1, 2, 3, 4, 5 };
double data4[5] = { 1.1, 2.2, 3.3, 4.4};
double data5[5] = { 1.1, 2.2, 3.3 };
return 0;
}
どこがおかしいのかわからない。
0467デフォルトの名無しさん
2006/01/21(土) 16:11:57???printf("");?
0468デフォルトの名無しさん
2006/01/21(土) 16:13:490469デフォルトの名無しさん
2006/01/21(土) 16:41:53「C言語を使って実行すると特定のレジストリを書き換えるプログラムを作れ」
というのが出題されたのですが、どうしたらいいのでしょうか?
0470デフォルトの名無しさん
2006/01/21(土) 16:46:06せんせいにきけ
0471デフォルトの名無しさん
2006/01/21(土) 16:48:400472デフォルトの名無しさん
2006/01/21(土) 16:51:33宿題なんで教えてくれません
0473デフォルトの名無しさん
2006/01/21(土) 16:51:44goto 宿題スレ;
0474デフォルトの名無しさん
2006/01/21(土) 16:53:470475デフォルトの名無しさん
2006/01/21(土) 16:54:390476デフォルトの名無しさん
2006/01/21(土) 16:54:51文字列と数値を別々の変数でもっててそれを一旦文字列に変換して
その文字列を表示させたいのでprintfじゃなくて一度scanfを通して文字列を
作ってから作りたいです。
0477デフォルトの名無しさん
2006/01/21(土) 17:04:42こういうことか?
int n = 10;
char *s = "abc";
char buf[30];
sprintf(buf, "%-20s %d", s, n);
そうでないなら(そうでなくても)日本語がおかしいからコードで書いて味噌。
0478デフォルトの名無しさん
2006/01/21(土) 18:41:19でわたしもうまくいくと思ったんですがうまくいかないんですよ
0479デフォルトの名無しさん
2006/01/21(土) 19:18:17>401を読む限り、printfの入れ方が判らんのかもな
void babo(int *arr,int num)
{
int temp=0; ←コレ不要な
if(num==1) return;
for(int i=num-1;i>0;i--)
中略
}
if(num%5000) printf("num %d\n",num); ←コレを入れてやれ(再帰5000回に1回報告するから)
babo(&arr[1],num-1);
return;
}
mod5000ぐらいで見てれば帰ってくる感じが判るだろ、しかしバブルソートで100万も潜ってくってのもすごいなぁ
今50万でやてみて飽きた。
0480デフォルトの名無しさん
2006/01/21(土) 22:02:31A(0 1 2
1 0 2
2 0 2 )
はどう書きますか?
0481デフォルトの名無しさん
2006/01/21(土) 22:04:30まず
問題の
意味が
わかりま せ
0482デフォルトの名無しさん
2006/01/21(土) 22:08:33分かりません?
分かりまっせ?
0483デフォルトの名無しさん
2006/01/21(土) 22:16:26何がどう巧くいかないのか書けないなら鼬害だな。
0484デフォルトの名無しさん
2006/01/21(土) 23:05:43結果的には
AAA 1
AAAA 2
この文字列と数値があったとしたら文字列のあとに20個の空白が設定された
あとに数値が文字列としてセットされます。
0485デフォルトの名無しさん
2006/01/22(日) 00:21:43他人に自分の意図を正しく伝えられない人が、
コンピュータに正しく処理を伝えられない。
と言ういい見本だな。
0486デフォルトの名無しさん
2006/01/22(日) 00:27:41> 一度scanfを通して文字列を作ってから作りたいです。
これだけで、日本語に不自由していることがよく解るな。
0487デフォルトの名無しさん
2006/01/22(日) 00:41:110488デフォルトの名無しさん
2006/01/22(日) 00:48:310489デフォルトの名無しさん
2006/01/22(日) 00:53:47すべての a[i] (i=0,1,2,...,99)について、a[i]を引数に持つ共通処理を行いたいのです。
ただし、特殊な条件があって、
a[i]==1234の場合は、「前処理A⇒共通処理」を500回、
a[i]==5678の場合は、「前処理B⇒共通処理」を1000回、
繰り返すとします。
そこで、二つのパターンを考えました。
----------------------------------------
// パターンA
int b[10000];// すべて 1 に初期化済みとする
b[1234] = 500;
b[5678] = 1000;
for ( i=0; i<100; i++ ) {
for ( j=0; j<b[a[i]]; j++ ) {
switch ( a[i] ) {
case 1234:
前処理A;
break;
case 5678:
前処理B;
break;
}
共通処理( a[i] );
}
}
0490490
2006/01/22(日) 00:54:39// パターンB
for ( i=0; i<100; i++ ) {
switch (a[i]) {
case 1234:
for ( j=0; j<500; j++ ) {
前処理A;
共通処理( a[i] );
}
break;
case 5678:
for ( j=0; j<1000; j++ ) {
前処理B;
共通処理( a[i] );
}
break;
default:
共通処理( a[i] );
}
}
----------------------------------------
パターンAは、ソースはすっきりしていますが、
繰り返す数を保持するためだけの配列 b が、無駄かつ莫大なメモリを使用しています。
また、「1234」「5678」という直値が二箇所ずつ埋まっているのもいけません。
パターンBは、共通処理の部分が複数箇所存在するため見た目も悪いですし、
ここを変更しようとすると、すべての箇所を書き換えなければなりません。
どうか、良い方法があればご教授ください。
目指しているのは、1に省メモリ、2に高速化です。
0491デフォルトの名無しさん
2006/01/22(日) 01:03:02メモリがどうならパターンBだし、実行時間は自分で実行して計ればいいのでは?
漏れならb[10000]などせずに実行回数を返す簡単なinline関数なりを作るかな
0492デフォルトの名無しさん
2006/01/22(日) 01:05:12パターン1の配列Bをループ回数を入れるint型変数に変えて、
それぞれのパターンでループ回数を入れればいいんジャマイカ?
# どうして先ず配列にしたのか、理解に苦しむ。
0493デフォルトの名無しさん
2006/01/22(日) 01:06:320494デフォルトの名無しさん
2006/01/22(日) 01:11:50まず、これではなぜダメなのかを知りたい。
for (i = 0; i < 100; i++) {
switch (a[i]) {
case 1234:
for (j = 0; j < 500; j++) preprocess_A();
break;
case 5678:
for (j = 0; j < 1000; j++) preprocess_B();
break;
}
common_process(a[i]);
}
0495デフォルトの名無しさん
2006/01/22(日) 01:15:12どこが「見た目が悪い」んだ?
0496デフォルトの名無しさん
2006/01/22(日) 01:16:17typedef struct {
void (*pf)(void);
int data;
} HOGE;
HOGE hoge[] = { { func, 1 }, ... };
int main(void)
{
hoge[0].pf();
return 0;
}
のように関数ポインタを構造体メンバとして使うと、mainのところで
「プロトタイプ宣言のない関数の呼び出し」という警告が出ます(BCC5.5.1)
この警告が出るのは何故でしょうか?
0497デフォルトの名無しさん
2006/01/22(日) 01:18:021234の時は「前処理Aと共通処理を500回、
5678の時は「前処理Bと共通処理を1000回、
それ以外の時は「共通処理」を1回だろ?
0498497
2006/01/22(日) 01:19:47×1234の時は「前処理Aと共通処理を500回、
5678の時は「前処理Bと共通処理を1000回、
○1234の時は「前処理Aと共通処理」を500回、
5678の時は「前処理Bと共通処理」を1000回、
閉じ忘れた…orz
0499デフォルトの名無しさん
2006/01/22(日) 01:28:01> hoge[0].pf();
優先順位を考えると
(hoge[0].pf)();
じゃね?
0500デフォルトの名無しさん
2006/01/22(日) 01:33:15(hoge[0].pf)(); としても
(*hoge[0].pf)(); としても警告は消えませんでした
まあコンパイルは通るので実行はできるのですが、気になったもので
0501デフォルトの名無しさん
2006/01/22(日) 01:39:07って言うか、ほぼそのソースで警告でないが?
# ちなみに環境はBCB5
0502デフォルトの名無しさん
2006/01/22(日) 01:45:42ちゃんと見てみたら関数ポインタの引数のvoidが消えてました…
おさわがせしましたorz
0503494
2006/01/22(日) 01:49:59thanks, 問題読み違えてた。
>>489
それならパターン2だろ。共通の処理を関数に切り分けていれば、
共通処理の内容が変更になっても問題ないはず。
0504490
2006/01/22(日) 02:20:50なるほど、その通りかもしれません。
パターンAで回数を返す部分をインラインにすれば、ソースはすっきりしますし、保守性も良いですね。
>>492
ということは、jのループの前に、ループ回数を決めるための条件判断が必要ですよね?
さらに、Jのループ内でも前処理を決定するための条件判断がいるわけで、無駄じゃないですか?
bを配列にしたのは、ループ内での条件判断を一回にするためです。
>>493
…すみません、気づきませんでしたが、どう違うんでしょうか?
>>495
ソース内に、同じ処理を行う部分が複数箇所存在するのは、可能な限り避けるべきだと思います。
「共通処理」というのが単一の関数ならまだ良いですが、もしこの処理が数十行に渡るものだったりすると大変なことになります。
変更する場合にはすべての箇所に変更が必要ですし、保守性も悪すぎるので…。
>>498
その通りです^^
>>494
上で書いた>>495さんへの回答で指摘した問題点は「パターンBで【共通処理】を関数に切り分ける」
ということで、確かに解決するのですが…。
その共通処理が重い(処理速度ではなく、重要度が)場合や、後始末が必要になる場合
(例えば、メモリをアロケートしたり、スタックを操作したり、ファイルアクセスをしたり)、
複数箇所に存在させるのがどうかなーと思っています。
例えば、application_main() とか screen_draw() とか、check_keyboard() とか wait_vsync() とか、
ソース中に何箇所も書きたくない関数ってあると思うんですけど、
「共通処理」は、結構それに近いものがあったりするので…。
0505デフォルトの名無しさん
2006/01/22(日) 02:23:07共通処理が数十行にまたがるなら、これもまた更に別関数に分けるべき。
0506デフォルトの名無しさん
2006/01/22(日) 02:24:45これじゃ単なる言葉遊びじゃないか
0507デフォルトの名無しさん
2006/01/22(日) 02:26:58次の選択肢からどれか1つのみ重要視するものを選べ。
1. 省メモリ
2. 実行スピード
3. コードの保守性
4. コードの見た目
5. その他
0508デフォルトの名無しさん
2006/01/22(日) 02:30:02質問の仕方がまずかったかと
0509490
2006/01/22(日) 02:35:593⇒1⇒2⇒4 でしょうか。
現状、条件が追加されたり、ソースの変更が頻繁に行われているため、そのような順位にしました。
ただし、極端に大量のメモリを使うのは、いくら保守性が良くてもNGです。(>>489パターンAも厳しいです)
また、保守性が良いコードは、それほど見た目も悪くないと思うので、3がよければ4は特に意識しなくても良いかと。
0510デフォルトの名無しさん
2006/01/22(日) 02:42:17だったらやはり>>505のようにcommon_processに共通処理を「全部」移した上で
次のようにするのが良いのではないだろうか。少なくとも保守性の観点から言えば。
for (i = 0; i < 100; i++) {
switch (a[i]) {
case 1234:
for (j = 0; j < 500; j++) {
preprocess_A();
common_process(a[i]);
}
break;
case 5678:
for (j = 0; j < 1000; j++) {
preprocess_B();
common_process(a[i]);
}
break;
default:
common_process(a[i]);
}
}
0511デフォルトの名無しさん
2006/01/22(日) 02:48:00なんか変な設計だなぁ
0512490
2006/01/22(日) 03:27:55----------------------------------------
// プリプロセス
void preprocess_A();
void preprocess_B();
typedef void (*ppfunc)(); // プリプロセス関数型
int preprocess( int a, ppfunc *p )
{
int lp; // ループ回数
switch ( a ) {
case 1234:
*p = preprocess_A;
lp = 500;
break;
case 5678:
*p = preprocess_B;
lp = 1000;
break;
default:
*p = NULL;
lp = 1;
}
return lp;
}
// 続く↓
0513490
2006/01/22(日) 03:28:41main()
{
int i,j,loop;
ppfunc p; // プリプロセス関数ポインタ
for ( i=0; i<100; i++ ) {
int loop = preprocess( a[i], &p );
for ( j=0; j<loop; j++ ) {
if ( p ) p(); // プリプロセスが必要な場合のみ
common_process( a[i] );
}
}
}
----------------------------------------
保守性を高め、common_process を一箇所にして、無駄なメモリをなるべく使わずに書いてみました。
処理速度の低下も最低限に抑えたつもりですが、いかがでしょうか。
0514デフォルトの名無しさん
2006/01/22(日) 04:48:40つもりになっているようだが、可読性を著しく
落としてるな。
言語レベルで十分な道具が用意されているオブジェクト
指向言語でやるのならともかく、C言語でそこに
こだわっても高確率で良い結果にはならない。
どうしても気になるならC以外で実装したほうがいい。
0515デフォルトの名無しさん
2006/01/22(日) 05:27:23サンプルプログラムしか見たことがないのかい?w >>514
preprocess と common_process を完全に分けたり、
main() では細かい条件判断をしないのは、少しでもプログラムをかじった人間なら当然だな。
この設計ならば、条件や仕様が追加されても、main()は一切変更の必要がないし、
preproを書く人間とcommonを書く人間が別人でも関係ない。
ただ、速度を重視するなら、a[i] はポインタでアクセスしたほうが良い。
0516デフォルトの名無しさん
2006/01/22(日) 05:34:160517デフォルトの名無しさん
2006/01/22(日) 05:46:07int main(void)
{
int na,nb;
puts("二つの整数を入力してください。");
printf("整数A:");scanf("%d",na);
printf("整数B:");scanf("%d",nb);
printf("それらの平均は%fです。\n",(na+nb)/2.0);
return(0);
}
上記を実行して、整数二つ目を入力した後、エンターキーを押すと
>問題が発生したため、exeを終了します。ご不便おかけして申し訳ありません。
と出てきます。何が原因なんでしょうか? Borland C++ Compiler、Cpad for Borland C++ compiler、
勉強に使っている本 のどれが原因かわかりません。
0518デフォルトの名無しさん
2006/01/22(日) 05:49:060519デフォルトの名無しさん
2006/01/22(日) 05:51:400520デフォルトの名無しさん
2006/01/22(日) 05:53:190521デフォルトの名無しさん
2006/01/22(日) 06:02:400522デフォルトの名無しさん
2006/01/22(日) 06:44:29・宣言したてのint型の値に使えるアドレスを設定してくれていないコンパイラ
・明らかに勘違いしている部分を強調表示してくれないエディタ
・自分は正しいと信じて止まないバカにも分かりやすいように記述されていない本
どれでもお好きなものをお選びください
0523517
2006/01/22(日) 07:16:50#include<stdio.h>
int main(void)
{
int na,nb;
puts("二つの整数を入力してください");
printf("整数A:");scanf("%d",&na);
printf("整数B:");scanf("%d",&nb);
printf("それらの平均は%fです。\n",(double)(na+nb)/2);
return(0);
}
これなら実行できました。
0524デフォルトの名無しさん
2006/01/22(日) 07:50:180525517
2006/01/22(日) 08:00:34052617
2006/01/22(日) 08:07:410527517
2006/01/22(日) 08:16:430528デフォルトの名無しさん
2006/01/22(日) 10:39:46アドバイスはあまりにも時代遅れで頭が悪いと思う
0529デフォルトの名無しさん
2006/01/22(日) 10:47:58for(i=0;i<100;i++){
switch(a[i]){
case 1234:
cnt=500,fnc=pre1();
break;
case 5678:
cnt=1000,fnc=pre2();
break;
defualt:
cnt=1,fnc=none;
break;
}
/* 以下略 */
こんな雰囲気でどう?
fncは関数ポインタ型で、デフォルト時に何もしない関数を入れておけばifも不要になる。
0530490
2006/01/22(日) 14:18:03なるほどー。確かにメインはかなりすっきりしますねー。
ただ、処理速度の面では、
空の関数を呼ぶよりも、関数ポインタのヌルチェックをするほうが、
おそらく数倍速いのではないかと。
0531デフォルトの名無しさん
2006/01/22(日) 15:18:40実測せずに速度云々ぬかすな、ボケ!
0532デフォルトの名無しさん
2006/01/22(日) 15:24:37手段に没頭して目的が達成できない、
絶対一緒に仕事したくないタイプ
0533デフォルトの名無しさん
2006/01/22(日) 15:26:40どう考えても、「ポインタのNULLチェックして前処理関数を呼ぶ」ロジックを500回や1000回繰り返すより、
「何もしない関数を呼んで戻ってくる」処理1回の方が頻度低くね?
0534デフォルトの名無しさん
2006/01/22(日) 15:28:410535デフォルトの名無しさん
2006/01/22(日) 15:38:44が分かっていないのでは?
0536デフォルトの名無しさん
2006/01/22(日) 15:42:17500回や1000回も無駄なif文を呼ぶ処理時間より、
if文1回と関数コール1回の速度差の方が小さいだろ?
0537デフォルトの名無しさん
2006/01/22(日) 15:46:44「ロジックを500回や1000回繰り返す」とは言っていないような。
0538デフォルトの名無しさん
2006/01/22(日) 16:16:51なんだ、過去レスもまともに読めないだけか…
0539デフォルトの名無しさん
2006/01/22(日) 16:20:300540デフォルトの名無しさん
2006/01/22(日) 16:25:20>>489
0541デフォルトの名無しさん
2006/01/22(日) 17:06:01宿題以来では無いのでこちらに書き込みます。
そこで依頼した内容は
1,2,3,4,5,6,7,8,9を一つずつ使ってできる9桁の数(例えば294618375など)をyとする。
また、xを正の整数とする。
そこで、y=x*x が成り立つyとxの値をそれぞれ求め、
y=????????? x=?????
y=????????? x=?????
y=????????? x=?????
上記のような形式で値を出力するプログラムを書け。
です。
そしてその時そのスレの209さんにお答えしてもらった内容を
http://www.uploda.org/uporg292766.txt.html
ここにアップしました。
自分で考えてみたのですが、どのように処理を行っているのかよく分かりませんでした。
先生に内容の事で質問をされた時に困らないよう理解しておきたいので、どなたか解説していただけないでしょうか?
C言語はほとんど初心者のような者です。
どうかよろしくお願いいたします。
0542デフォルトの名無しさん
2006/01/22(日) 17:08:320543デフォルトの名無しさん
2006/01/22(日) 17:09:570544デフォルトの名無しさん
2006/01/22(日) 17:24:57他人に宿題を頼む様な人には、
どんな説明をされても理解出来ないから安心汁!
0545デフォルトの名無しさん
2006/01/22(日) 18:16:12main の中では
whileループの中で
1)x=1から始めてxの値を1つづつ増やしつつ xの2乗を次々に作り出している
2)その値を取りあえずyに入れて、条件に合致しているかどうか checkしてんだよ
0546デフォルトの名無しさん
2006/01/22(日) 19:25:12単なる茶々なんだけど....
> 1)x=1から始めて
なんでそんな無駄なことをしているのであろう?
(int)sqrt(123456789) <= x <= (int)sqrt(987654321) のレンジだけ調べれば
良い話ではないのかい?
0547デフォルトの名無しさん
2006/01/22(日) 19:45:07全探索領域の1/10だけどね。
0548デフォルトの名無しさん
2006/01/22(日) 20:20:39545です、あのソース読んだけど、さほど無駄ではないぞ
sqrtなど使う必要なしな点でも、546氏のよりあのソースの方を俺は好むね
今のPCでは知らんが昔ならsqrtなど使うより全然速いよインクリメントと整数乗算だけだから。
(547の指摘どおりで1/10だけの効率化のために無駄なコードと関数呼び出しはダサイとおも)
0549デフォルトの名無しさん
2006/01/22(日) 21:01:32> sqrtなど使う必要なしな点でも
> 546 が言ってるのはこんなんでええんちゃうのか?
int
main(void){
int y, x, f, i, r, t;
for (x = 11111;/* sqrt(123456789) > 11111 */
x < 31623; /* sqrt(1000014129); eg 31622*31622 = 999950884 */
++x) {
t = y = x * x;
f = 0;
for (i = 0; i < 9; ++i) {
r = t % 10;
t /= 10;
if (r == 0 || (f & (1 << r)))
break;
f |= (1 << r);
}
if (t == 0)
printf("y=%d x=%d\n", y, x);
}
return 0;
}
0550デフォルトの名無しさん
2006/01/22(日) 21:24:23そんなの普通に「小町平方数」でググればすぐ判るだろ?
一体何が判らないんだ?
0551541
2006/01/22(日) 21:32:37545さんのお答えと自分で調べてみたので大体は理解できました。
ですが2つ気になる点があるのですが質問よろしいでしょうか?
while文についてなんですが、ソース内22行目
while(1)
とありますが、この(1)はどういった働きをするのでしょうか?
while文の()の中は継続条件式を入れる、と習ったので不思議に思いました。
また、もう1つの質問は、ソース内15行目
z /= 10
の部分です。 /= とはどのような処理なのでしょうか?
色々と申し訳ございません。
0552デフォルトの名無しさん
2006/01/22(日) 21:41:17勉強しなおせ
while(1)は継続条件式が常時「1」即ち「真」よって永久ループ
/=は代入演算子の一種で、右辺で左辺を割った結果を左辺の変数に代入する
0553デフォルトの名無しさん
2006/01/22(日) 21:43:58つ[初心者スレ]
0554デフォルトの名無しさん
2006/01/22(日) 21:45:27今は当然、今後も一切。
0555デフォルトの名無しさん
2006/01/22(日) 21:47:09c:\documents and settings\miki\デスクトップ\e03g0009\donotmodify\StdAfx.h(17): fatal error C1083: include ファイルを開けません。
'd3dx9.h': No such file or directory
このエラーはどういう意味でしょうか?
0556デフォルトの名無しさん
2006/01/22(日) 21:48:03'd3dx9.h'なんてファイルは無い
0557デフォルトの名無しさん
2006/01/22(日) 21:48:43> while文の()の中は継続条件式を入れる、と習ったので不思議に思いました。
1 も立派な条件式 (式の定義に関しては, JIS とか ANSI とかの定義参照)
C は式の結果が 0 か 0 でないかで条件判定をする
> z /= 10
z = z / 10 の短縮表現.
他の伝統的な言語とか関数型言語では副作用として忌嫌われる演算子
0558551
2006/01/22(日) 21:54:07お答えいただい方、有難うございます。
そして数々の初心者発言、申し訳ございませんでした。
皆様にご迷惑にならないよう後の事は自分で考えます。
0559デフォルトの名無しさん
2006/01/22(日) 21:59:19少しは脳みそ使って考えろよ。
0560デフォルトの名無しさん
2006/01/22(日) 23:18:380561デフォルトの名無しさん
2006/01/22(日) 23:25:35BCC Devしか使った事ないけどDOSコマンドも覚えてたほうがいいかな?
0562デフォルトの名無しさん
2006/01/22(日) 23:26:48またそれをできなくするようなコンパイル時に暗号化みたいな事が出来るのかな
0563デフォルトの名無しさん
2006/01/22(日) 23:44:460564デフォルトの名無しさん
2006/01/22(日) 23:45:40アセンブリコードにまでは可能だが、C言語までは完璧には絶対出来ない。
出来るソースは可読性ゼロだしな
0565デフォルトの名無しさん
2006/01/22(日) 23:47:09resTHX
そうですか、じゃあ安心して公開しまくれますね
って、盗まれるような技術持ってないか
0566デフォルトの名無しさん
2006/01/22(日) 23:48:24手作業でCのソースに落とす人をも含めての話ならば、不可能。
0567566
2006/01/22(日) 23:49:050568デフォルトの名無しさん
2006/01/22(日) 23:50:470569デフォルトの名無しさん
2006/01/22(日) 23:51:180570デフォルトの名無しさん
2006/01/22(日) 23:51:500571デフォルトの名無しさん
2006/01/22(日) 23:54:270572デフォルトの名無しさん
2006/01/22(日) 23:55:58元に戻すことは出来ない。何をしているかを正確に知ることは可能。
それすらも防止することは、OSがそのような機能をサポートしていない
限り不可能。
0573デフォルトの名無しさん
2006/01/23(月) 00:00:08まぁ技術は盗むものって言いますしね
0574デフォルトの名無しさん
2006/01/23(月) 00:17:540575デフォルトの名無しさん
2006/01/23(月) 00:26:49解説書籍によってはあるものやないものがあるのですが0を返さない事によって不都合が起こるのですか?
0576デフォルトの名無しさん
2006/01/23(月) 00:31:05C言語には必要
C++ならば不要
というのが一般的な解答になるけど
0577デフォルトの名無しさん
2006/01/23(月) 00:37:38CとC++での違いだったんですね、すっきりしました
ありがとうございました
0578デフォルトの名無しさん
2006/01/23(月) 01:55:36関数に構造体を引数で渡すとき、親構造体と
その親構造体の下の階層の変数なり構造体なり
を一緒に渡すのってどうなんでしょうか。
表現が冗長になってしまうんですけど、深い階層の
メンバを頻繁に使う場合、記述が長くなってしまうの
が嫌なのでやってしまうのですが。
例えば次のようなプログラムです。
内容はかなり適当ですが。
0579デフォルトの名無しさん
2006/01/23(月) 01:56:07struct Struct3{
int var2;
};
struct Struct2{
struct Struct3 struct3;
};
struct Struct1{
int var1;
struct Struct2 struct2;
};
void foo(struct Struct1 *,struct Struct3 *,int);
int main(){
struct Struct1 struct1;
struct1.struct2.struct3.var2 = 3;
foo(&struct1,&struct1.struct2.struct3,10);
printf("var1 = %d\n",struct1.var1);
return 0;
}
void foo(struct Struct1 * s1,struct Struct3 * s3,int num){
s1->var1 = s3->var2 * num;
return;
}
0580デフォルトの名無しさん
2006/01/23(月) 01:56:38C99も不要だよ。
0581デフォルトの名無しさん
2006/01/23(月) 02:00:51とりあえず、main関数の始まりがvoid mainになっていたら、省略可。
int mainとかだと書かなければならない。
それと、MSのVS.NETやVC++.NETを使ってコンパイルする時に、voidもintも付けずに、ただのmainで始めた場合も不要。
俺は、最初はvoid mainで書いていたけど、最近はint mainで書いてる。
わかり辛くってスマソ。
0582デフォルトの名無しさん
2006/01/23(月) 02:59:46ヒント: #define
0583デフォルトの名無しさん
2006/01/23(月) 05:10:25馬鹿?
>>579
何が不満なのか判らんが、
foo()にs3のポインタを渡すのがいやならこうすれば?
void foo(struct Struct1 * s1,int num){
struct Struct3 * s3 = & s1->struct2.struct3;
s1->var1 = s3->var2 * num;
return;
}
0584デフォルトの名無しさん
2006/01/23(月) 06:11:04本当に必要性がなくてそういうことをするんだと
たぶん関数化が甘いせいだな
0585582
2006/01/23(月) 08:07:36馬鹿?
>>579
何が不満なのかよく判ります。
foo()にs3のポインタを渡すのがいやならこうすれば?
void foo(struct Struct1 * s1, int num){
#defineS3_VAR2(s1->struct2.struct3.var2)
s1->var1 =S3_VAR2 * num;
return;
}
0587582
2006/01/23(月) 14:15:59http://orange.sakura.ne.jp/~misaki/data/rizel020417_02.jpg
0588デフォルトの名無しさん
2006/01/23(月) 14:36:080589デフォルトの名無しさん
2006/01/23(月) 15:22:37詳しく
0590デフォルトの名無しさん
2006/01/23(月) 16:27:30とりあえずsrandを0で初期化してrandから乱数をもらってるんですが、それだけの使い方を知っていれば大丈夫ですか?
srandの「種値」ってのが良く分からない・・。
1で初期化したら0より上の乱数を呼び出すということですか?
0591デフォルトの名無しさん
2006/01/23(月) 16:29:16不覚にも抜いた
0592575
2006/01/23(月) 16:53:38main()+return 0
int main()+return 0
main(void)
main(void)+return 0
int main(void)+return 0
調べてみたらこれだけのmain文と戻り値の組み合わせがあったんですが、一般的に多く使われているのはどれでしょうか?
私は今までmain()だけでやっていましたが戻り値が必要と知ってmain()+return 0を使うようになったけど(void)とかまた意味不明なものが・・。
0593デフォルトの名無しさん
2006/01/23(月) 17:07:000594デフォルトの名無しさん
2006/01/23(月) 17:07:37rand の乱数は、ある漸化式の値をちょっと変えて返している。
その漸化式の初項を与えるのが srand だ。
>>592
int main(void) + return 0;
が一番良い。
0595デフォルトの名無しさん
2006/01/23(月) 17:10:53この瞬間から最初に目があった奴と100回Cして視ね
0596デフォルトの名無しさん
2006/01/23(月) 17:19:15594じゃだめなの?
0597デフォルトの名無しさん
2006/01/23(月) 17:23:55この瞬間から最初に目があった奴と100回Cして視ね
0598デフォルトの名無しさん
2006/01/23(月) 17:46:21C99対応のコンパイラなら堂々とint main(void)を使っても良い。
仮引数のvoidはその関数が引数を取らないことを表す。
プロトタイプ宣言時に仮引数が空()のときには引数の情報がないことを表す。(つまり適当に引数を与えてその関数を呼べる)
ただ規格を見ると関数定義時に仮引数が空()のときは(void)と同じ扱いと読める。
0599デフォルトの名無しさん
2006/01/23(月) 17:49:560600デフォルトの名無しさん
2006/01/23(月) 18:26:02int main( int argc, char **argv, char **env )
+
return
0601デフォルトの名無しさん
2006/01/23(月) 18:31:08これ?
ttp://www.pc-moe.com/rizeru/
0602デフォルトの名無しさん
2006/01/23(月) 18:41:51なるほど・・。
なんかまだ良く分からない言葉とかでてますがとりあえずint main(void)+return 0でやってみたいと思います。
0603デフォルトの名無しさん
2006/01/23(月) 19:01:03/* static A; */
void fun(void) {
int a;
a = A;
}
グローバル変数Aは、初期化されていないですが、
A は staticを付加すれば、初期化されることにな
るでしょうか?
0604デフォルトの名無しさん
2006/01/23(月) 19:15:23参考書でこれ使ってるのは結構あるけど
0605デフォルトの名無しさん
2006/01/23(月) 19:22:48おまえさん、参考書以外で main をそんなに見かけるのか?
0606デフォルトの名無しさん
2006/01/23(月) 19:24:46void main は処理系独自に許容されてるプロトタイプだからな。
まあ、これ使えない処理系知らないけど。
どの処理系でも使える事が保証されてるのは
int main(int, char**) と int main() だっけ?
でも、処理系独自の拡張は仕様で許容されてたと思う。
処理系独自のプロトタイプを使っても
警告だのエラーだのを出さなくても仕様には背いてないってことだと思う。
例えば環境変数用の引数を入れるとか、void main とか。
ただ、そのコードがどの処理系でも通るという保証は無い。
>>605
このスレとか。
0607デフォルトの名無しさん
2006/01/23(月) 19:25:12scanfで1,2,3以外の数字を入力するとエラーを吐いて入力時に戻る設定
数字以外の文字を入力するとエラー文章が永久的にリピート
こういう文字を阻止させる場合はどうやればいいの?
ちなみにエラーの判断基準は
if(p==1||p==2||p==3)でok
elseでエラー
*pはプレイヤーの手を入力
0608デフォルトの名無しさん
2006/01/23(月) 19:28:340609デフォルトの名無しさん
2006/01/23(月) 19:41:25おまえさん、「処理系定義: implementation defined」という用語の存在とその意味の社会的な位置づけをしっかり憶えたほうがいい
0610デフォルトの名無しさん
2006/01/23(月) 19:51:370611デフォルトの名無しさん
2006/01/23(月) 20:31:060612デフォルトの名無しさん
2006/01/23(月) 20:35:18ってことは607みたいにscanfで文字列を入力したらおかしくなるのは仕方ないことになるのか・・?
0613デフォルトの名無しさん
2006/01/23(月) 20:35:240614デフォルトの名無しさん
2006/01/23(月) 20:36:09>>612
get系でええですお
0615デフォルトの名無しさん
2006/01/23(月) 20:40:46put,getはprintf,scanfが使えれればいいかと流しておいたらこんなところで使う時が。
0616デフォルトの名無しさん
2006/01/23(月) 20:50:190617デフォルトの名無しさん
2006/01/23(月) 20:51:560618デフォルトの名無しさん
2006/01/23(月) 21:02:230619デフォルトの名無しさん
2006/01/23(月) 21:05:34おせーて
0620607
2006/01/23(月) 21:20:29getsでもだめでした。
printf("グー=1 チョキ=2 パー=3\n");
scanf("%d",&p);
if(p==1||p==2||p==3)
{
中略
}
else
{
printf("エラー\n1〜3を入力してください。\n");
}
とやってるけど文字を入力したらエラー文章のリピートになってしまう。。
0621デフォルトの名無しさん
2006/01/23(月) 21:28:34有料です
0622デフォルトの名無しさん
2006/01/23(月) 21:28:57人の話を聞けや
0623デフォルトの名無しさん
2006/01/23(月) 21:33:130624デフォルトの名無しさん
2006/01/23(月) 21:39:40本当の目的は、文字列→数値の変換です。しかしいきなりatofやstrtodだと、
意味不明文字列、例えば"1.u2" "hoge"なんかを 1 や 0 と解釈されてしまいます。
これがイヤなのです。
まず「数値として解釈できる文字列」か「そうではない」かを判断しようと思ってます。
自作できないこともないでしょうが、正直とても面倒です。
便利な既存ルーチンなど無いでしょうか?
0625デフォルトの名無しさん
2006/01/23(月) 21:45:50始まる前に終わってる
0626デフォルトの名無しさん
2006/01/23(月) 21:49:19isdigit
0627デフォルトの名無しさん
2006/01/23(月) 21:53:47strが「(double型の)数値として解釈できる文字列」のとき、そしてそのときにのみ
sscanf(str, "%lg %c", &dest, &dummy)
は1を返す。destはdouble型, dummyはchar型。
0628デフォルトの名無しさん
2006/01/23(月) 21:57:05strtodの2番目の引数を使えばよい。
ここには変換に使われなかった部分の先頭へのポインタがセットされる。
そいつが'\0'を指していなければ文字列の全てが
数値への変換に使われなかったということでアウトにすればよい。
char s[];
char *p;
double d;
d = strtod(s, &p);
if (*p != '\0')
//アウト
0629デフォルトの名無しさん
2006/01/23(月) 21:57:100630624
2006/01/23(月) 22:06:46>>627
感動しました。こういうdummyの技は思ってもみませんでした。
>>628
なるほどです、2番目の引数はこういう使い方をするんですね。
0631デフォルトの名無しさん
2006/01/23(月) 22:49:53あとは結局自分で書く羽目になる
役立たずの標準ライブラリめ
0632デフォルトの名無しさん
2006/01/23(月) 23:10:060633デフォルトの名無しさん
2006/01/23(月) 23:14:140634デフォルトの名無しさん
2006/01/23(月) 23:24:52(君に理解できる解決策は)ない
0635デフォルトの名無しさん
2006/01/23(月) 23:31:340636デフォルトの名無しさん
2006/01/23(月) 23:32:370637デフォルトの名無しさん
2006/01/23(月) 23:39:050638デフォルトの名無しさん
2006/01/23(月) 23:45:170639620
2006/01/24(火) 00:07:37じゃんけんゲームの次はどんなプログラム作ってみるべきだと思いますか?
Cでどこまでのプログラムが出来るかも分からないけどフリーソフトでローグっていうダンジョン型RPGのソースみたら目が点になった。。
ソースファイル.cが10数個あるし、cファイルっていっぱい繋げて使うもんなんだね。。
0640デフォルトの名無しさん
2006/01/24(火) 00:10:08リバーシとか。
0641デフォルトの名無しさん
2006/01/24(火) 00:18:100642デフォルトの名無しさん
2006/01/24(火) 00:18:50やろうと思えば。
0643デフォルトの名無しさん
2006/01/24(火) 00:21:090644デフォルトの名無しさん
2006/01/24(火) 00:21:45いっきにレベルアップした感がありますが
目標をそこにしていろいろ勉強してみる。
0645デフォルトの名無しさん
2006/01/24(火) 00:24:09>>620の問題は残ったけどじゃんけんゲーム自体は出来ましたよ。
とは言ってもDOS窓でprintf・scanf・if・whileを組み合わせただけの誰にでも出来る奴ですが。。
オセロにはほぼ遠いレベル。
0646デフォルトの名無しさん
2006/01/24(火) 00:29:35すっげ
0647デフォルトの名無しさん
2006/01/24(火) 02:00:18アルゴリズムを取ればいいですか?
0648デフォルトの名無しさん
2006/01/24(火) 02:08:440649デフォルトの名無しさん
2006/01/24(火) 02:08:530650デフォルトの名無しさん
2006/01/24(火) 02:18:10それ答えになってないじゃん
そのアルゴリズムを聞いてるんだけど
0651デフォルトの名無しさん
2006/01/24(火) 02:22:320652デフォルトの名無しさん
2006/01/24(火) 02:30:360653デフォルトの名無しさん
2006/01/24(火) 02:43:16早く教えてください
0654デフォルトの名無しさん
2006/01/24(火) 03:07:572次元の数値データを読み込むときに
while (fscanf(fd, "%s %s", a, b) != EOF){
data1[i] = atoi(a);
data2[i] = atoi(b);
i++;
}
ってやって読み込ませるようにできたんですけど、データがカンマ区切り
でもatoi()するとカンマは外されるんですね。便利だなぁって思うのです
けど、この方法で何か問題はあるでしょうか?C言語始めたばかりでちょ
っと自信がないのでよろしくお願いします。
0655デフォルトの名無しさん
2006/01/24(火) 03:09:56リファレンスで、atoi調べろ。
0656デフォルトの名無しさん
2006/01/24(火) 03:10:01while i=1,i<=10000,i++
____while j=1,j<=10000,j++
________a[j*i]=1
んでa[1〜10000]=falseが素数(あと1も)
それをfalseになるやつだけ別の配列にいれなおせばいい気がする
質問
別のプロセス上メモリのアドレスを指定して読み込むにはどうしたらいいですか?
(ぶっちゃけCじゃなくてもいいんだけど)
今はすぺしゃるねこまんまでダンプしているんですが100万ファイルとかできるとフリーズしまくり
0657デフォルトの名無しさん
2006/01/24(火) 03:11:200658デフォルトの名無しさん
2006/01/24(火) 09:12:35他のプロセスって、そりゃOS依存だろう。
0659デフォルトの名無しさん
2006/01/24(火) 09:14:12たとえば a が char a[10]; と宣言されていたとして、
そこに10文字の空白なしの塊が来たら死亡。
0660デフォルトの名無しさん
2006/01/24(火) 09:19:550661デフォルトの名無しさん
2006/01/24(火) 09:32:32リアルで使うな
0662デフォルトの名無しさん
2006/01/24(火) 09:34:48突っ込み所満載だな(w
0663デフォルトの名無しさん
2006/01/24(火) 09:40:06後ろのメモリに入っているものが問題だ。
運よくすき間が空いていればいいが、変数だったら内容が破壊される。
場所がスタックならリターンアドレスを破壊するかも知れない。
10文字丁度ではなく11文字以上だと何が起こるかわからない。
gets()と同様にセキュリティーホールになりうる。
0664デフォルトの名無しさん
2006/01/24(火) 10:35:44誰かこの問題が解ける方がいたらお願いします。
0665デフォルトの名無しさん
2006/01/24(火) 10:44:01なんでダメなのかご教授を・・・
よくわからないけどgetsとかもダメなんだよね?
>>663
大体一緒に文字列何個か宣言してるとお亡くなりになるよねw
0666デフォルトの名無しさん
2006/01/24(火) 10:45:00盤面出りゃ可なんだからそれでいいやん
0667664
2006/01/24(火) 10:52:430668デフォルトの名無しさん
2006/01/24(火) 11:08:54API叩け言うならやらない
どっちにしろ宿題スレにテンプレに従って書き込まないとやらない
0669デフォルトの名無しさん
2006/01/24(火) 11:34:03661 みたいな感情的な毛嫌いを見習う必要は全くない
仕事では、【ダメかどうか判断できないものを使うな】
売った物に責任を持つことがプロとアマのはっきりした違いだが
今のおまえさんにとって、仕事で使えそうなものはあるか?
0670デフォルトの名無しさん
2006/01/24(火) 11:37:20学生ですが
0671デフォルトの名無しさん
2006/01/24(火) 11:39:33宿題が自分で出来ないなら、
留年するかやめてしまえ。
0672デフォルトの名無しさん
2006/01/24(火) 11:56:00オセロ ゲーム盤の表示だけ、教えてやる。 これで 「 可 」 は get。
#include <stdio.h>
int main()
{
int i;
for(i =0 ; i < 8 ; i++) printf("口口口口口口口口\n");
return 0;
}
0673デフォルトの名無しさん
2006/01/24(火) 12:27:52コケたら自分にごめんで済む場面では
使っちゃいかんものなど1つもない
0674デフォルトの名無しさん
2006/01/24(火) 12:35:43ども理由わかりました
0675デフォルトの名無しさん
2006/01/24(火) 12:42:02>>661 の内容だけでは
感情的かどうかなど
判断できませんが。
0676デフォルトの名無しさん
2006/01/24(火) 12:47:230677デフォルトの名無しさん
2006/01/24(火) 12:48:540678デフォルトの名無しさん
2006/01/24(火) 12:55:04何を今更
0679デフォルトの名無しさん
2006/01/24(火) 13:02:21少なくとも論理的ないしは科学的には見えないよな
どんな立場から、観測・考察を経て「使うな」という結論を導いたのかを示していない
0680デフォルトの名無しさん
2006/01/24(火) 13:44:550681デフォルトの名無しさん
2006/01/24(火) 13:50:32昨日C言語始めたばっかりなんで、やり方がしょぼかったらごめんね。
#include <stdio.h>
void main(void){
int a[1000];
a[0]=2;
for(int i=3,count=1;count<1000;i=i+2){
for(int j=count-1;;j--){
if(i%a[j]==0){
break;
}
else if(j==0){
a[count]=i;
count++;
break;
}
}
}
printf("1000番目は[ %d ]\n",a[999]);
}
0682デフォルトの名無しさん
2006/01/24(火) 13:55:250683デフォルトの名無しさん
2006/01/24(火) 13:58:170684デフォルトの名無しさん
2006/01/24(火) 14:01:250685デフォルトの名無しさん
2006/01/24(火) 14:04:010686デフォルトの名無しさん
2006/01/24(火) 14:06:34♪ /,ィ形斗‐''' ´  ̄`''‐- 、 フン♪
//ミ/ ヽ ♪
, - 、!({ミ/ ヽ
/ 、ヽ⊂!´/ '''''' '''''' 「i「i}i、 フン♪
/冫┐ i'´.l (●), 、(●) ,{ ノ
 ̄ l l l ,,ノ(、_, )ヽ、,, ーゝ 'ヽ、 ♪
! l ', `ヒェェェイ ' /ヽ \
l ヾ,、 `ニニ´ / -‐、‐ヽ >
t /` ー- 、___,ォュ'´ ヽ、 /
` ー-! 、`ーi 「´ , -‐'´
0687デフォルトの名無しさん
2006/01/24(火) 14:08:030688デフォルトの名無しさん
2006/01/24(火) 14:19:20たぶん通らないだろうね(w
0689デフォルトの名無しさん
2006/01/24(火) 15:27:24>>681のでは無駄な計算がある。さあ俺に頼むんだ
0690デフォルトの名無しさん
2006/01/24(火) 15:40:28最初に3まで入れてからやれば楽だったんだけどね。
0691デフォルトの名無しさん
2006/01/24(火) 15:46:590692デフォルトの名無しさん
2006/01/24(火) 17:15:23単刀直入に、CUIでできるんですか?
マスを表示したりすることまではなんとかできそうなんですが
例えばこのコマを選択とかいうのはCUI画面内で表示されている縦横の枡の中からこれというコマを選択することは可能なんですか?
それともオセロゲーム作成ってCOMvsCOMのを作成ってことなのかな
0693デフォルトの名無しさん
2006/01/24(火) 17:17:110694デフォルトの名無しさん
2006/01/24(火) 17:18:010695デフォルトの名無しさん
2006/01/24(火) 17:22:32なるほど・・時間かかりそうなオセロになりそうですね;
>>694
あるんですか、調べてみます。
そもそもオセロはCUIよりGUI向きとか関係ないですか?
0696デフォルトの名無しさん
2006/01/24(火) 17:26:08面倒だし
そりゃユーザはGUIのがやりやすいけどさ
中身は関係ないよ
0697654
2006/01/24(火) 17:28:42>scanf()とかfscanf()とかはお勉強のための関数であって
>リアルで使うな
まだ学生です。自分のデータだけ処理しているのなら大丈夫
ですよね。配列は実際のデータの10倍くらいにしてます。
a[500], b[500], data1[5000], data2[5000];
仕事用だと、大量のデータに対処するための処理をする必要
があるんですね。
0698デフォルトの名無しさん
2006/01/24(火) 17:28:44まだCUIで文字表示、文字入力、計算、じゃんけんまでしか作れてませんが。。
0699デフォルトの名無しさん
2006/01/24(火) 17:31:17CPUの思考考えるの大変じゃないか・・
○×ゲームくらいにしてみては?
0700デフォルトの名無しさん
2006/01/24(火) 17:34:02まぁ目標ということで頑張ろうと思ってますが○×はよさそうですね・・。
CPUの思考ってのもありますし、先にこっちやってみます。
0701デフォルトの名無しさん
2006/01/24(火) 19:00:53アレには素直に感動した。
弱い思考ルーチンはそんなに難しくない。挟める場所を挟めば良いだけだから。
それを、角をとった方が有利とかの判断や、数手後を先読みさせると面倒になる。
0703デフォルトの名無しさん
2006/01/24(火) 19:26:37実は簡単なゲーム(オセロとかそういったの)を作成したいのですが、
C++じゃないと作れないのでしょうか?
0704デフォルトの名無しさん
2006/01/24(火) 19:36:360705デフォルトの名無しさん
2006/01/24(火) 19:42:09作れないのかと聞かれたから、作れる、と答える。
ただし、C言語の標準関数だけでは、作れない、と思ったほうがいい。
そうとうの勉強を積むか、ライブラリを捜してやるようになる。
0706デフォルトの名無しさん
2006/01/24(火) 19:43:500707デフォルトの名無しさん
2006/01/24(火) 19:46:07盤面を画面に表示するなら GUI か ESC シーケンスあたりを憶える必要があるけど
「先手2九歩」みたいに棋譜を入力/表示するだけなら ISO9899 の標準関数だけで十分
0708デフォルトの名無しさん
2006/01/24(火) 19:47:02厚紙とペン、それに鋏があれば作れます。
0709デフォルトの名無しさん
2006/01/24(火) 19:53:24http://www.google.co.jp/search?q=7%E8%A1%8C%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
0710デフォルトの名無しさん
2006/01/24(火) 19:54:06相手も必要です。
0711デフォルトの名無しさん
2006/01/24(火) 20:05:58C++の標準関数だけでもCと同じでは?
表示部分を簡単に作っていいのならどちらも簡単。
表示で懲りたいならいっそのこと CGI にしちゃって表示はブラウザに
任せてそれでネットワーク対戦できるように作れば思考ルーチンが
要らなくて楽だ。
0712デフォルトの名無しさん
2006/01/24(火) 20:24:43するときのために、C言語を勉強してるのですが
どれくらいのレベルまで勉強しとくべきなのでしょうか?
それとも、資格を目指して勉強して行った方が良いの
でしょうか。
最近、勉強してて、勉強すればするほど、どこまで勉強
すれば良いのか、ライブラリに用意されてる関数についても
その関数がどんな処理をしてるかを覚えても、その関数
はどういう構造で成り立ってるかまで覚える必要があるのか
とか、それとも理解できていて、わすれたら辞書引きすれば
良いのかとか、わかんなくなってきました。
0713デフォルトの名無しさん
2006/01/24(火) 20:29:29就職のために資格試験は有効
というのはプログラマには当てはまらない
自作のプログラムを資格代わりに提出する方が効果的
プログラマは身体が資本だが大丈夫か?
あと、人生相談はスレ違いな!
0714デフォルトの名無しさん
2006/01/24(火) 20:36:42そもそもCに資格なんかあったっけ?
0715デフォルトの名無しさん
2006/01/24(火) 20:36:54どんな物事でも知れば知るほど分からないことも増えるものだ。
これは葉っぱを食べている虫のようなもので、食べれば食べる
ほど穴が広がって行くのと同じだ。
もしそう感じることができず、自分は全てを知ったと感じた時は
要注意。それは表面の一部をなめただけの時に起こる錯覚だ。
0716デフォルトの名無しさん
2006/01/24(火) 20:41:44マ板か就職板で聞いた方がよさそう
スキルは上下となりのレイヤーがわかってないと孤立する
例えば C でどんな分野のソフトを開発するにも、
実際にデモできるような成果物を作るときに色々でてくるのが上のレイヤーで、
C のすぐ下のレイヤーというと OS、アセンブラ、デジタル回路とかね
自助努力はもちろん必要不可欠だけど、個人でできる範囲にも限界はあって研修や OJT で憶えることもある
金と時間にもよるけど、例えばおいらみたいに働きながら夜学でじっくり臥薪嘗胆とかもありだよ
0717デフォルトの名無しさん
2006/01/24(火) 22:20:55そうすか
とりあえずオセロを作るにはまずはCの基礎を分かっとかないとダメですよね?
0718デフォルトの名無しさん
2006/01/24(火) 22:35:150719デフォルトの名無しさん
2006/01/24(火) 22:37:01使えるならどうしたらいいでしょうか?
0720デフォルトの名無しさん
2006/01/24(火) 22:40:23板違い。
電波・お花畑
http://etc3.2ch.net/denpa/
0721デフォルトの名無しさん
2006/01/24(火) 22:42:15じゃね?
0722デフォルトの名無しさん
2006/01/24(火) 23:01:15#include <afx.h>
0723デフォルトの名無しさん
2006/01/24(火) 23:04:03これ完璧じゃね?
0724デフォルトの名無しさん
2006/01/24(火) 23:08:26クラスはC++の機能だからどうしようもない。
C++を使え。でもC++だからと言って自分もクラスを作ってOOPにする必要はどこにもない。
0725デフォルトの名無しさん
2006/01/24(火) 23:22:36DLLにでもして呼び出したらいんじゃね?
0726デフォルトの名無しさん
2006/01/24(火) 23:23:48こんなことまで人に聞くようなやつが職場にきたら大迷惑なので
そのまま療養し続けてください
0727デフォルトの名無しさん
2006/01/24(火) 23:59:43Cだけでも余裕で作れる
全部理解する必要すらない
0728デフォルトの名無しさん
2006/01/25(水) 00:22:57質問です。
(char*)Str->data と(char*)(Str->data) は同じですか、違いますか?
0729デフォルトの名無しさん
2006/01/25(水) 00:33:59同じ。()は無意味
0730デフォルトの名無しさん
2006/01/25(水) 00:34:020731デフォルトの名無しさん
2006/01/25(水) 00:35:320732デフォルトの名無しさん
2006/01/25(水) 01:32:16別に>>703はvsCOMとは言ってないし。
トランプと違って二人用で同じ画面でやっても全く問題ないゲームだしね。
0733デフォルトの名無しさん
2006/01/25(水) 11:07:32printf("%le\n", d);
とすると、
2.96e-57 fedora core3のgcc
2.96e-057 VS.Net
となったのですが、printfで指数部の桁数を自分で指定することはできますか?
例えば
2.96e-000057
こんな風に出す方法はありますか?
よろしく
0734デフォルトの名無しさん
2006/01/25(水) 12:22:10マンページやinfo、MSDNをとくと眺めてなければ諦めろ。
つーか、それだけならsprintf()で変換した結果を加工するとか。
0735デフォルトの名無しさん
2006/01/25(水) 20:33:53mallocで確保したメモリ領域を、pthread_createで作った別のスレッド(同一プロセス内)で解放(free)するのは
問題でしょうか?
ちなみに、Linux+gccの環境で考えているんですが、環境依存の場合は、該当するスレを教えて欲しいです。
(UNIXスレとかで大丈夫ですか?)
0736デフォルトの名無しさん
2006/01/25(水) 20:39:480737お願いします。
2006/01/25(水) 20:51:22さっき 別のところで ことわられたので。
0738デフォルトの名無しさん
2006/01/25(水) 20:52:240739デフォルトの名無しさん
2006/01/25(水) 20:56:29十二指腸は何のためにあるのですか?
0740デフォルトの名無しさん
2006/01/25(水) 20:58:41http://ja.wikipedia.org/wiki/%E5%8D%81%E4%BA%8C%E6%8C%87%E8%85%B8
0741デフォルトの名無しさん
2006/01/25(水) 21:41:32void *型の3×3の2次元配列の領域を確保してデータのアドレスを格納したくて下のような
コードを書いたんですけど動きません。
こういう場合は、どうすればいいのでしょうか?
void *** arg;
arg = (void***)malloc(sizeof(void*)*3*3);
arg[0][0] = ptr;
0742デフォルトの名無しさん
2006/01/25(水) 21:49:22書き込みたいのですが、実際やってみると30000にならない
ので、困ってしまいます。(3万バイトから数十バイトほど多くなる)
原因はなんでしょうか?
#include <stdio.h>
#include <io.h>
main(void)
{
FILE *fp; //ファイルポインター
int i;
unsigned char data[30001];//0〜255のデータがランダムに入ってます。
fp = fopen( "data.txt", "w" );//開く
for(i = 0; i < 30000;i++)
fprintf(fp,"%1.1c",data[i]);//書き込み
fclose( fp );//閉じる
}
0743デフォルトの名無しさん
2006/01/25(水) 21:52:570744デフォルトの名無しさん
2006/01/25(水) 21:55:530745デフォルトの名無しさん
2006/01/25(水) 22:00:320746デフォルトの名無しさん
2006/01/25(水) 22:04:270747デフォルトの名無しさん
2006/01/25(水) 22:08:34size_t m = 3;
size_t n = 3;
void **arg;
arg = malloc(sizeof(void *) * m * n);
arg[0 * m + 0] = ptr;
0748デフォルトの名無しさん
2006/01/25(水) 22:12:04C言語で数を連結して数字として認識させることは
できるでしょうか?
具体的には1、1,0,1を一文字づつ入力して連結、
(1011)=11として扱えるような連結演算子は
ないのでしょうか?
0749デフォルトの名無しさん
2006/01/25(水) 22:19:101×10^3 +
0×10^2 +
1×10^1 +
1×10^0
0750デフォルトの名無しさん
2006/01/25(水) 22:20:47while( ch= fgetc(stdin), ch!=EOF){
buf[index--] = ch;
}
printf("%d\n", strtol( &buf[index+1], 0, 2 ) );
というような話かい?
0751デフォルトの名無しさん
2006/01/25(水) 22:33:19すみません、べき乗を使わずに数をつなげて数字として認識させることは
できないのでしょうか?
0752デフォルトの名無しさん
2006/01/25(水) 22:39:02できます
0753デフォルトの名無しさん
2006/01/25(水) 22:40:38申し訳ありませんがそのための演算子などを
教えていただけないでしょうか?
0754デフォルトの名無しさん
2006/01/25(水) 22:43:12ビットシフト演算子などがある。
しかし750の方法で問題がある?
0755デフォルトの名無しさん
2006/01/25(水) 22:43:370756デフォルトの名無しさん
2006/01/25(水) 22:47:12ビットシフト!それがあった!
簡単なことに気づきませんでした・・・
ありがとうございました!
0757デフォルトの名無しさん
2006/01/25(水) 23:29:340758デフォルトの名無しさん
2006/01/25(水) 23:31:070759デフォルトの名無しさん
2006/01/25(水) 23:31:130760デフォルトの名無しさん
2006/01/25(水) 23:38:30基本から勉強し直すといいよ。
0761デフォルトの名無しさん
2006/01/25(水) 23:56:40おまえさんの身近に二次元配列が ** だなどという毒電波をまき散らす高レベル放射性廃棄物の存在が強く予見される
まずは宇宙服とガイガーカウンターが必要だ
0762デフォルトの名無しさん
2006/01/26(木) 00:35:40voidポイント型のサイズを3×3して、
9個分のサイズを作ろうとしているのか?
だとしたら、重症だなぁ…
0763デフォルトの名無しさん
2006/01/26(木) 00:43:30そこまでは問題ないのでは。
0764デフォルトの名無しさん
2006/01/26(木) 01:23:17最初にsrand(0);で初期化?しないといけないんでしょうか?
srandを消しても動くには動くのですが・・。
またたまにsrand(time(NULL))とありますがどういう意味なんですか?
0765デフォルトの名無しさん
2006/01/26(木) 01:25:050766デフォルトの名無しさん
2006/01/26(木) 01:28:330767デフォルトの名無しさん
2006/01/26(木) 01:32:22int i;
arg = (void***)malloc(sizeof(void***)*3);
for(i=0;i<3;i++)
arg[i] = (void**)malloc(sizeof(void**)*3);
arg[0][0] = ptr;
これでOKだよな?実際に動かしてないのでこれでOKと言い切れないヘタレですまん
0768デフォルトの名無しさん
2006/01/26(木) 01:34:47srand(time(NULL))は
srand(0)やsrand(1)だと、何度実行しても同じ結果になるので、
不確定要素の時間で初期化して、同じ結果にならないようにしてる。
0769デフォルトの名無しさん
2006/01/26(木) 01:34:59マルチスレッドスレで質問するといい。
0770デフォルトの名無しさん
2006/01/26(木) 01:44:19レスどうもです。
前レスで調べろと言われたので調べてみたんですが全くそのとおりでした。
rand関数は実行毎に同じ乱数を出力するのでsrandでseed値を設定してやって毎回違う乱数を出させるようにすると言う事ですね。
それで実行毎に違ったsrandのseed値を与えるために現在時刻を使うtime(NULL)を指定するのが一般的だということですね。
そしてtime(NULL)の意味は暦時刻から年月日を除いた時間だけを返すということですね。
0771デフォルトの名無しさん
2006/01/26(木) 01:51:48> そしてtime(NULL)の意味は暦時刻から年月日を除いた時間だけを返すということですね。
1970年1月1日00:00:00から何秒目かを返す。
0772デフォルトの名無しさん
2006/01/26(木) 01:55:540773デフォルトの名無しさん
2006/01/26(木) 01:58:150774デフォルトの名無しさん
2006/01/26(木) 02:21:13「unsigned char」ってどんな役割を果たすんでしょうか?
0775デフォルトの名無しさん
2006/01/26(木) 03:04:54マルバツゲーム難しすぎる・・。
マップは表示できたけど、printfで表示しただけだからあとでマルやバツに書き換えできなかった・・。
もっと初歩的なものを探して出直します・・。
0776デフォルトの名無しさん
2006/01/26(木) 03:08:540777デフォルトの名無しさん
2006/01/26(木) 03:10:21主に文字列じゃくてバイナリデータを1バイト単位で扱いたい時に使います。
0778デフォルトの名無しさん
2006/01/26(木) 03:17:15{
int x,y;
printf(" a b c\n");
for(x=0;x<3;++x){
printf("%d ",x+1);
for(y=0;y<3;++y){
printf("- ");
}
printf("\n");
}
}
こうやったけどただの絵
0779デフォルトの名無しさん
2006/01/26(木) 03:21:33盤面を周りの壁を含め5*5の配列で定義した場合
void show(int board[][5]){
char str[3][3]={"・","○","×"};
char num[3][3]={"1","2","3"};
int i,j;
puts(" 123");
for(i=1;i<4;i++){
printf("%s",num[i-1]);
for(j=1;j<4;j++)
printf("%s",str[board[i][j]]);
puts("");
}
}
mainでboard[5][5]を宣言
0が何もない1が○2が×でshow(board);
0780デフォルトの名無しさん
2006/01/26(木) 03:26:545行目
puts(" ABC");
に変えとけ
0781デフォルトの名無しさん
2006/01/26(木) 03:31:34ふむふむ・・。
charの右側の{}の代入とかの配列の使い方がまだまだ分からない事だらけですね・・。
やっぱしまだ勉強不足のようです。
FEとれてもプログラミングはまったくですな・・
>>780
printfよりputsを今度使えって事ですか?
0782デフォルトの名無しさん
2006/01/26(木) 03:36:510783デフォルトの名無しさん
2006/01/26(木) 03:40:540784デフォルトの名無しさん
2006/01/26(木) 03:41:11あれはn番目の文字列を表示しろってだけ
str[0]には"・"という文字列が入ってる
putsは改行つきの文字列出力
puts("あああ");はprintf("あああ\n");と同じ
ただしprintf("%d",i);みたいなことはできない文字列を出力するだけ
0785デフォルトの名無しさん
2006/01/26(木) 03:48:53あぁなるほど・・。
str[4]にはヌル文字ですね。
str[0][0]には「・」が入るとしてstr[0][1]とstr[1][0]の場合ではどうなるんですか?
putsは分かりました。
文字列だけの表示のや改行時はputs使う事にします。
0786デフォルトの名無しさん
2006/01/26(木) 03:49:450787デフォルトの名無しさん
2006/01/26(木) 03:52:15str[4]には何もハイってねーよ
str[0]に"・"が入ってんの
str[0][0]は"・"って文字列の1文字目が入ってる・が全角だから何が入ってるんだか知らないけど
str[0][0]とstr[0][1]で・になってstr[0][2]には'\0'が入ってるの
0788デフォルトの名無しさん
2006/01/26(木) 04:12:59どっちにしろヌル文字じゃないですね
それでなるほど・・
そういう風に全角文字を代入できるんですね。
0789デフォルトの名無しさん
2006/01/26(木) 07:42:23俺はこの前FE午後590点orz
0790デフォルトの名無しさん
2006/01/26(木) 12:11:27char * foo = "bar";
printf("%s\n", foo);
が
puts("bar");
になるから神経質にならなくてもいいんでね?
0791デフォルトの名無しさん
2006/01/26(木) 12:43:45どう言う最適化をすると、そう言う風になるんだ?
0792デフォルトの名無しさん
2006/01/26(木) 12:49:100793デフォルトの名無しさん
2006/01/26(木) 12:50:150794デフォルトの名無しさん
2006/01/26(木) 12:54:450795デフォルトの名無しさん
2006/01/26(木) 12:55:28VC++はどうだったかな…
0796デフォルトの名無しさん
2006/01/26(木) 14:23:08sizeof (void**) に sizeof (void*) だろ。
0797デフォルトの名無しさん
2006/01/26(木) 15:42:050798デフォルトの名無しさん
2006/01/26(木) 15:53:22純粋なCとしては不要
0799デフォルトの名無しさん
2006/01/26(木) 16:00:380800デフォルトの名無しさん
2006/01/26(木) 17:54:34VC++はCRTのソースを読めば printfもputsも _output()になってるのが判るとおもう
gccは本当にputsなんかにするの?
0801デフォルトの名無しさん
2006/01/26(木) 18:04:47>>790はそれを受けて「コンパイラによっては」って適当なこといっただけかと
0802デフォルトの名無しさん
2006/01/26(木) 18:04:51-O0と-O2で調べてみたけど-O2だとputsになってる。
バージョンは、
gcc (GCC) 3.3 20030304 (Apple Computer, Inc. build 1640)
0803802
2006/01/26(木) 18:09:040804デフォルトの名無しさん
2006/01/26(木) 18:39:24で-Oオプションを付けると_putsになるぞ
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
は-Oオプションを付けても_printfのままだね
少なくともgcc3.xは期待しても良いんじゃないか?
0805デフォルトの名無しさん
2006/01/26(木) 19:03:07C言語(ANSI)で、現在時刻をmsecまで取得する方法を教えて頂けますでしょうか。
0806デフォルトの名無しさん
2006/01/26(木) 19:08:22ない。環境依存。
0807デフォルトの名無しさん
2006/01/26(木) 19:11:32ナイッショ、msecの分解能の標準関数なんて
0808デフォルトの名無しさん
2006/01/26(木) 19:11:54ありがとうございました。
ウーム・・・。
0809デフォルトの名無しさん
2006/01/26(木) 19:26:10GetTickCount、timeGetTime?何それ、俺はそんなAPIは知らないよ
0810デフォルトの名無しさん
2006/01/26(木) 19:31:37printf("\t\n");
とやるとタブではなく空白に展開されてしまうのはどうすればいいんだろう?
タブコードを出力してほしいんだけど…
gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-53)
っす。
0811デフォルトの名無しさん
2006/01/26(木) 19:35:57おまい優しいな
0812デフォルトの名無しさん
2006/01/26(木) 19:43:27コード?
数字を出すなら%d
空白が8つ程出てるのをタブ1つに変えたいんだったらシェルとかコンソールとかの問題だからスレ違い
0813デフォルトの名無しさん
2006/01/26(木) 19:45:15#define htonl(x) (x)
って定義されてるんですけどこれじゃ何も起きないですよね?
意味あるんですか?
0814デフォルトの名無しさん
2006/01/26(木) 19:47:49環境が変わってエンディアンが変わってしまった時(例えばx86からPowerPC)にも、
そのマクロを一箇所書き換えるだけで対応できるようにしてるんだろ。
移植性の問題かと。
0815デフォルトの名無しさん
2006/01/26(木) 19:49:04Appleの中の人って賢いですね。
0816デフォルトの名無しさん
2006/01/26(木) 20:29:400817デフォルトの名無しさん
2006/01/26(木) 20:32:52Macのヘッダファイル見てたからです。
0818デフォルトの名無しさん
2006/01/26(木) 20:40:49あと、今のMacOSはUnixのパクリだから
とスレどころか板違いな発言をしてみる
0819デフォルトの名無しさん
2006/01/26(木) 21:05:33gcc32のコンパイラでは文字'・'は使えないのですか?
エラー表示で不正な文字と出てコンパイルできないのですが、
対処法があるのでしたら、教えていただけませんか?お願いします。
0820デフォルトの名無しさん
2006/01/26(木) 21:08:59for(i=0;i<5;i++){
scanf("%d",a[i]);
printf("a[%d]=%d\n",i,a[i]);
}
これをコンパイルして配列を数字入力しても出力時に入力した数字が出ないのはなぜだと考えられますか?
0821デフォルトの名無しさん
2006/01/26(木) 21:09:27日本語でご質問下さい
0822デフォルトの名無しさん
2006/01/26(木) 21:09:550823デフォルトの名無しさん
2006/01/26(木) 21:10:51scanfの引数が間違ってるよ
0824デフォルトの名無しさん
2006/01/26(木) 21:11:110825デフォルトの名無しさん
2006/01/26(木) 21:11:47あぁ・・とんだ勘違いしてました、ありがとです。
0826819
2006/01/26(木) 21:17:35ボードの代用を作成したいんですが、↓のように
123
1・・・
2・・・
3・・・
2次元配列のboard[5][5]として、[1][1]〜[1][3]、[2][1]〜[2][3]
[3][1]〜[3][3]に・を代入したいのですが、
グローバル変数、str[3][3]={"・","○","×"};と宣言し、
void PrintBoard(char board[][5]){
int i,j;
for(i=1;i <= 3; i++){
for(j=1;j <= 3;j++){
board[i][j] = str[0]; //ここでエラー
printf("%s",board[i][j]);
}
}
}
とするとエラーの場所で�@不正な文字''�A移植性の無いポインタ変換
とでますが、・の文字は使えないんですか?
コンパイラはgcc32です。
0827デフォルトの名無しさん
2006/01/26(木) 21:20:58じゃんけんゲームでボードが必要なのか・・
0829デフォルトの名無しさん
2006/01/26(木) 21:27:59そうなんですか、私は知識不足だったためゲームは一時断念してもっと簡単なプログラム演習さがしてやってます・・。
0830デフォルトの名無しさん
2006/01/26(木) 21:30:50char a[10];
for(i=0;i<5;i++){
scanf("%c",&a[i]);
printf("a[%d]=%c\n",i,a[i]);
}
さっきの文字verになるんですがこれで「a」2回目に「b」として入力すると
a[0]=a
a[1]=
a[2]=b
a[3]=
と出力されるんですがscanfの%cを%sにすると
a[0]=a
a[1]=b
とちゃんと一文字づつ格納されるのですが何が違うのでしょうか?
0831デフォルトの名無しさん
2006/01/26(木) 21:33:08型を勉強し直せ。
話はそれからだ。
0832デフォルトの名無しさん
2006/01/26(木) 21:34:27釣り?
0834デフォルトの名無しさん
2006/01/26(木) 21:39:01いいえ
%cは文字、%sは文字列だと思うけど・・それ以上それ以下だす
0835デフォルトの名無しさん
2006/01/26(木) 21:42:51%cは空白文字も読み込む。
空白文字には改行文字も含まれる。
たとえば%1sとすれば1文字だけ読み込み、なおかつ空白文字は読み込まれない。
0836デフォルトの名無しさん
2006/01/26(木) 21:46:30でいいのでは?
0837デフォルトの名無しさん
2006/01/26(木) 21:53:34確かに" %c"にすると大丈夫なんですが、意味が理解できない;
a[0]でaの入力の時にエンターを押したのが空白文字としてa[1]に出力されたということでいいのかな
そして" %c"は空白文字をscanfで読み込まないようにする設定ということで
0838デフォルトの名無しさん
2006/01/26(木) 22:04:34リファレンス読んでも理解できなかったと?
0839デフォルトの名無しさん
2006/01/26(木) 22:10:49何でここ最近、基本的な質問が多いのですか?(特にscanfとか)
もう冬休みは終わったはずですよね?
0840デフォルトの名無しさん
2006/01/26(木) 22:14:29ゆとり教育の弊害
0841デフォルトの名無しさん
2006/01/26(木) 22:16:18scanfは基本的なようでかなり奥が深い。
それでいて使いこなせるようになるべきかというとそうでもなかったりする正直結構厄介な存在。
0842デフォルトの名無しさん
2006/01/26(木) 22:20:520843デフォルトの名無しさん
2006/01/26(木) 22:22:56とりあえず、「何に使うのこの関数」的存在。
0844デフォルトの名無しさん
2006/01/26(木) 22:36:14n = atoi(buff);
これでなんか問題ある?
0845デフォルトの名無しさん
2006/01/26(木) 22:37:450846デフォルトの名無しさん
2006/01/26(木) 22:47:13数値でない文字列が入力されたときと0が入力されたときの判断が付かない
入力がない場合、不定のbuffをatoiしている。(fgetsの戻り値を見ていない)
1234.567と入力されたときにnに1234と入力されるのは仕様として良いのか?
buffのサイズと型、nの型は妥当か?(これは言いがかりか)
どう見ても問題だらけのコードです。ありがとうございました。
0847デフォルトの名無しさん
2006/01/26(木) 23:15:47ありがとう。
0848デフォルトの名無しさん
2006/01/27(金) 00:41:20> printf("\t\n");
> とやるとタブではなく空白に展開
するのは, termios(4) で printf とは何の関係もない.
% stty raw
とか, やっても space になるか?
% ./a.out | od
とか, やってみそ.
0849デフォルトの名無しさん
2006/01/27(金) 02:11:081 になる もっとも小さな正整数 Y を求めるプログラムを書いてください。
たとえば, P=55, X=31 なら 31×16 を 55 で割った余りは 1 ですから,Y=16 となりま
す。
(1) Y を求める方法をユークリッドの互除法をもちいてプログラミングせよ
大学1年生です。わからないので教えて下さい。よろしくお願いします。
0850デフォルトの名無しさん
2006/01/27(金) 02:17:09LSI C-86 ver 3.30 試食版 ていうコンパイラをとったんですが
説明通りにしても「`lcc`は、内部コマンドまたは外部(ry」と表示されて
いっこうにコンパイルしてくれません。
同じ事をこれで三回くりかえしているんですが出来ません。
もちろん再起動もしました。でもやっぱりこの表示がでるので困っています
以前このような状況になった人はいませんか?いるのならご教授願いますm(__)m
0851デフォルトの名無しさん
2006/01/27(金) 02:17:530852デフォルトの名無しさん
2006/01/27(金) 02:21:14宿題くらい自分でやれよ。
#include <stdio.h>
#include <mathex.h>
void main(void)
{
int P = 55;
int X = 31;
int Y = 16;
int ret;
ret = euclid(P, 1, &X, &Y);
printf("Y=%d\n", Y);
}
0853デフォルトの名無しさん
2006/01/27(金) 02:24:13「ご教授」じゃなくて「ご教示」だろ。C言語以前に日本語
の勉強をしてから出直してくるように。
0854デフォルトの名無しさん
2006/01/27(金) 02:26:31フリー版のVisual C++使った方がラクやでぇ
0855デフォルトの名無しさん
2006/01/27(金) 02:37:32euclid関数の存在を知らないとは何者?専門学生?大学生?
0856デフォルトの名無しさん
2006/01/27(金) 02:46:040857デフォルトの名無しさん
2006/01/27(金) 03:21:58ここはC言語の質問をするスレです。まず確認しておきたいことは、あなたが
ユークリッドの互除法について知っているか否かです。これはC言語とは関係
ないものなので、ここでお答えするものではありません。
質問の仕方としてはユークリッドの互除法のアルゴリズムをあなた自身が提示
し、それをCではどう実装するのかということになると思いますよ。
0858デフォルトの名無しさん
2006/01/27(金) 03:45:10理系の学部でもプログラミングはやらないって棒板で言ってるけど
0859デフォルトの名無しさん
2006/01/27(金) 07:21:42卒業単位に関係ないだけで
まぁそんなヤツはこんなところに丸投げはしながな
0860デフォルトの名無しさん
2006/01/27(金) 07:30:41化学科や数学科のことでも言っているのかな?
それぞれ専攻ごとに実践的な基礎体験はするべきでしょう
電算機が専門のくせにアセンブラや同期式回路がわかんねえ奴を排出したきゃ別だけど
0861デフォルトの名無しさん
2006/01/27(金) 07:52:15LSICは捨てるべき。
ましてあんたのレベルならプログラミング以前から始める方がよさそうだが。
0862デフォルトの名無しさん
2006/01/27(金) 08:10:10BCBフリーにしろ
0863デフォルトの名無しさん
2006/01/27(金) 09:46:56W大の化学科はFortran必修だよ。
0864デフォルトの名無しさん
2006/01/27(金) 09:59:14情報科はC言語必修だよ。
0865デフォルトの名無しさん
2006/01/27(金) 10:05:31>宿題くらい自分でやれよ。
とか言いながら得意げに答えるなよ。
>>1 すら読まない莫迦が冗長するだろうが。
0866デフォルトの名無しさん
2006/01/27(金) 10:24:010867デフォルトの名無しさん
2006/01/27(金) 13:26:18SWAPという並び替えの関数とバブルソートの関数をつかってプログラミングをつくる
のが条件です。あとwhile文は使わずにfor文だけをつかいたいです。
どなたかこの問題を解いて下さいませんか?宜しくお願いします。
0868デフォルトの名無しさん
2006/01/27(金) 13:28:440869デフォルトの名無しさん
2006/01/27(金) 14:36:46FILE *in = fopen("hogehoge.dat","rb");
でバイナリ読み込みモードで開くとします
(環境はリトルエンディアンです)
このdatファイルには
64 10 00 33 23 10
と6バイトで構成されているとします。
例えばfscanf関数で現在位置から3バイトだけを読み込みたいとする場合、
フォーマットはどの様に指定すればいいでしょうか?
Win32APIの場合はReadFile関数に読み込むバイト数が指定できるので便利なのですが、、、
0870デフォルトの名無しさん
2006/01/27(金) 14:38:270871デフォルトの名無しさん
2006/01/27(金) 14:39:570872デフォルトの名無しさん
2006/01/27(金) 14:40:00ありがとうございます、すみませんでした
0873デフォルトの名無しさん
2006/01/27(金) 14:46:47int Ack(int x, int y)
{
if (!x) return y+1;
if (!y) return Ack(x-1, 1);
return Ack(x-1, Ack(x, y-1));
}
こんなんだっけ?うろ覚えだけど
0874デフォルトの名無しさん
2006/01/27(金) 14:53:44Cygwinで実行したプログラムの出力結果をファイルに保存するにはどうしたらいいでしょうか?
0875デフォルトの名無しさん
2006/01/27(金) 14:56:270876デフォルトの名無しさん
2006/01/27(金) 16:18:47リダイレクトは?
0877デフォルトの名無しさん
2006/01/27(金) 17:07:20例えば、
int nullpo[6][7][8];
で
int j;
に nullpo[4][3][1]
↑この3をjに代入する。といった形です。
0878デフォルトの名無しさん
2006/01/27(金) 17:10:000879デフォルトの名無しさん
2006/01/27(金) 17:11:16int hoge[4][3][2]と宣言された変数において
hoge[4][0]
hoge[4][1]
hoge[4][2]
はint型の要素を二つもつ配列への先頭アドレス
hoge[0]
hoge[1]
hoge[2]
hoge[3]
はint型のポインタの要素が3個の配列への先頭アドレス
多分
0880デフォルトの名無しさん
2006/01/27(金) 17:26:400881デフォルトの名無しさん
2006/01/27(金) 17:26:51>>879理解するのがちょっと難しいので質問変えますね。
int hoge[10][10];
を宣言して、
int hoge[x][y]
の時のxを求めるにはどうすれば良いのでしょうか?
0882デフォルトの名無しさん
2006/01/27(金) 17:29:000883デフォルトの名無しさん
2006/01/27(金) 17:29:37APIでしかそういうのは扱えないかと。
0884デフォルトの名無しさん
2006/01/27(金) 17:30:17標準のCじゃダメですか
どうもありがとうございました
0885デフォルトの名無しさん
2006/01/27(金) 17:33:01本当にありがとうございました。
0886デフォルトの名無しさん
2006/01/27(金) 17:37:15パーミッションの都合で俺の知識だけじゃアクセスできないけど
0887デフォルトの名無しさん
2006/01/27(金) 18:17:44そこで課題が与えられたのですが、非常に難しく(私にとって)困惑しております。そこで、皆様にご指導を仰ぎたいと思い、おじゃました次第です。
課題の内容は、
0888デフォルトの名無しさん
2006/01/27(金) 18:19:19#include <string.h>
#define NameLength 6
#define NumberLength 13
#define PrefixLength 5
#define MaxLine 8
void get_prefix(char number[], char prefix[])
{
int i;
for (i = 0; i < PrefixLength; i++) prefix[i] = number[i];
}
main(){
static char name[MaxLine][NameLength + 1],
number[MaxLine][NumberLength + 1];
char prefix[PrefixLength];
FILE *fp;
int k;
if((fp = fopen("telbook","r")) == NULL){ /*ファイルが存在するか*/
printf("Cant open the telbook\n");
exit(1);}
for(k = 0; k< MaxLine; k++){
fscanf(fp, "%s %s", &name[k], &number[k]);}
fclose(fp);
for (k = 0; k < MaxLine; k++){
get_prefix(number[k],prefix);
if (strncmp(prefix, "(011)",PrefixLength) == 0)
printf("No.%d %s (TEL: %s)\n", k, name[k], number[k]);}}
0889デフォルトの名無しさん
2006/01/27(金) 18:20:21�@名前を六文字以外にも対応できるようにする。
�A市外局番を三桁以外でも対応できるようにする。
です。
データ元のファイルの内容は、
kimura (055)321-5600
ishida (011)777-6511
tanaka (025)111-3456
fujita (011)661-1234
sasaki (099)123-8888
yasuda (055)333-3456
fukuda (011)661-1111
suzuki (033)456-5555
大変申し訳ないのですが、お教え頂ければ幸いです。
よろしくお願いいたします。
0890デフォルトの名無しさん
2006/01/27(金) 18:20:430891887-889
2006/01/27(金) 18:21:32ゴメス
0892デフォルトの名無しさん
2006/01/27(金) 18:47:41�@名前を六文字以外にも対応できるようにする。
#define NameLength 6
の6を増やす。10とか
�A市外局番を三桁以外でも対応できるようにする。
#define PrefixLength 5
の5を増やす。10とか。
void get_prefix(char number[], char prefix[])
{
int i;
for (i = 0; i < PrefixLength; i++) {
prefix[i] = number[i];
if ( prefix[i] == ')') break;
}
prefix[i+1] = '\0';
}
途中の1行を
if (strcmp(prefix, "(011)") == 0)
もしくは
if (strcmp(prefix, "(0111)等3桁以外の番号") == 0)
�B次から宿題スレに書き込むようにする。
0893デフォルトの名無しさん
2006/01/27(金) 18:57:05他人の見るだけでも勉強になるなぁ
0894デフォルトの名無しさん
2006/01/27(金) 19:06:46増やすだけ、と思ったけど
3桁以外も対応しなきゃならんのでいろいろ弊害がでるっぽいね。
電話帳の全部の桁が一緒ならstrncmpでもいいんだろうけど、、、。
0895デフォルトの名無しさん
2006/01/27(金) 19:38:21マニュアルにはfreeしたポインタに対して再びfreeをした場合の動作は定義されてないと書いてありますが、
reallocについては書いてないので…。
0896デフォルトの名無しさん
2006/01/27(金) 19:40:430897デフォルトの名無しさん
2006/01/27(金) 19:49:15http://www.linux.or.jp/JM/html/LDP_man-pages/man3/realloc.3.html
> ptr が NULL の場合には malloc(size) と等価である。
> size が 0 の場合には free(ptr) と等価である。
> NULL 以外の場合、 ptr は以前に呼び出された malloc(), calloc(), realloc() の
> いずれかが返した値でなければならない。
つまり、freeされたポインタをreallocで使用するのは未定義動作
p = realloc(NULL, 0); // 合法:malloc(0)と同じ
p = realloc(NULL, size); // 合法:malloc(size)と同じ
p = realloc(ptr, 0); // 未定義動作:free(ptr)と同じ
p = realloc(ptr, size); // 未定義動作
0898デフォルトの名無しさん
2006/01/27(金) 19:51:23getcharとかputcharとかも怪しい。
0899デフォルトの名無しさん
2006/01/27(金) 20:31:09実際にコードを書いてどういう挙動なのかを
研究してみる気すらないんだよな。
問題解決能力なさ杉。
0900デフォルトの名無しさん
2006/01/27(金) 20:41:03でもそのバグから宇宙が生まれた。
0901デフォルトの名無しさん
2006/01/27(金) 20:51:21あるある
0902デフォルトの名無しさん
2006/01/27(金) 20:56:15ねーよwwww
0903デフォルトの名無しさん
2006/01/27(金) 20:57:570904デフォルトの名無しさん
2006/01/27(金) 21:00:510905デフォルトの名無しさん
2006/01/27(金) 21:04:30p = realloc(ptr, 0); // 未定義動作:free(ptr)と同じ
p = realloc(ptr, 0); // 未定義動作:free(ptr)と同じ
0906デフォルトの名無しさん
2006/01/27(金) 21:11:08選択してF1でヘルプ即表示って便利杉
0907デフォルトの名無しさん
2006/01/27(金) 21:22:180909デフォルトの名無しさん
2006/01/27(金) 23:30:46C言語で、
main関数内で、int da[10][10]を定義します。
kansuという関数をつくり、その中でda[10][10]を読み込みたいのですが、
int main(void){
int da[2][2]={{1,2,3},
{1,2,3},
{1,2,3}};
kansu(da);
return(0);
}
int kansu(int da[][]){
printf("%d",da[2][2]);
return(0);
}
とすると、print文の所でエラーが起きてしまいます。理由がわかる方おられたら知恵を貸してください。お願いします。
0910デフォルトの名無しさん
2006/01/27(金) 23:40:32引数を配列にする場合要素数かかなくても許されるのは1次元だけ
0911デフォルトの名無しさん
2006/01/27(金) 23:41:25> print文の所でエラーが起きてしまいます。
嘘 付 く な ! ボ ケ !
0912デフォルトの名無しさん
2006/01/27(金) 23:42:46> main関数内で、int da[10][10]を定義します。
定義してないし。
0913デフォルトの名無しさん
2006/01/27(金) 23:42:58色いろ間違っているが、肝だけ。
int kansu(int da[][]) は無理。
やるならint kansu(int da[][10]) 。
0914デフォルトの名無しさん
2006/01/27(金) 23:43:150915デフォルトの名無しさん
2006/01/27(金) 23:44:250916デフォルトの名無しさん
2006/01/27(金) 23:46:000917デフォルトの名無しさん
2006/01/27(金) 23:48:35駄目だよ。
0918デフォルトの名無しさん
2006/01/27(金) 23:50:22うんダメだった
つ〜か今実験して初めて知った
2次元配列ってポインタだとこうゆう扱いになってたのか・・・って考えてみりゃあたりまえか
0919デフォルトの名無しさん
2006/01/27(金) 23:50:22(*arryr)[] と **arryr は別物
0920デフォルトの名無しさん
2006/01/27(金) 23:50:33実際のプログラムは
int main(void){
int data[9][9]={{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9}};
kakunin(data);
return(0);
}
int kakunin(int data[][]){
int i,j;
for(i=0;i<9;i++){
for(j=0;j<9;j++){
printf("%d",data[i][j]);
}
return(0);
}
return(0);
}
といったようなプログラムでprint文でエラーが起きてしまいます・・・。
0921デフォルトの名無しさん
2006/01/27(金) 23:51:570922デフォルトの名無しさん
2006/01/27(金) 23:52:13int da[3][3]={
{1,2,3},
{1,2,3},
{1,2,3}
};
kansu(da);
return(0);
}
int kansu(int *da){
printf("%d",da[2][2]);
return(0);
}
0923デフォルトの名無しさん
2006/01/27(金) 23:52:270924デフォルトの名無しさん
2006/01/27(金) 23:53:30エラるんだけど
0925デフォルトの名無しさん
2006/01/27(金) 23:54:39int main(void){
int data[9][9]={
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9}
};
kakunin(data);
return(0);
}
int kakunin(int *data){
int i,j;
for(i=0;i<9;i++){
for(j=0;j<9;j++){
printf("%d",data[i][j]);
}
> return(0);
> }
> return(0);
> }
> といったようなプログラムでprint文でエラーが起きてしまいます・・・。
0926デフォルトの名無しさん
2006/01/27(金) 23:54:59理解してやる分には問題無。
間違って覚えてやるのは大問題。
0927デフォルトの名無しさん
2006/01/27(金) 23:58:18受け側は916の通り。
呼び出し側はkansu(&da[0][0]);とでも。
実引数がda[3][3]で仮引数の方をpとすると、
p[0]==da[0][0]、p[1]==da[0][1]、p[2]==da[0][2]、p[3]==da[1][0]、…
2次元目の数は、1次元目の±1がintで3個分ずれるというだけの話。
kansu(int p*, int len)とでもすれば、[x][y]はp[x*len+y]でアクセスできる。
0928デフォルトの名無しさん
2006/01/27(金) 23:58:47ポインタずらしながら出力でもすればぁ?
>>926
あ、いいの?
連続したアドレスに入るのはもしかしたらたまたまなのかもとか思った
てかポインタで渡したらda[i][j]みたいな使い方できないのは気のせい?
0929デフォルトの名無しさん
2006/01/27(金) 23:58:48そもそも、引数で配列を『直接』渡すことは出来ない。
0930デフォルトの名無しさん
2006/01/27(金) 23:59:51int p* ってなんや、オレ。
int* pな。
0931デフォルトの名無しさん
2006/01/28(土) 00:00:33どうもなるほど
今まで2次元以上は引数配列のままでだったから知りませんでした
これもゆとり教育の・・・
0932デフォルトの名無しさん
2006/01/28(土) 00:00:44> てかポインタで渡したらda[i][j]みたいな使い方できないのは気のせい?
気のせいじゃない。
0933デフォルトの名無しさん
2006/01/28(土) 00:02:43そっかよかった
ヤベ・・ポインタ勉強しようかな
このまま企業の勉強会突入するの不安になってきた
0934デフォルトの名無しさん
2006/01/28(土) 00:02:49> 引数配列
オレ用語使うな
0935デフォルトの名無しさん
2006/01/28(土) 00:04:16いや正確な言い方しらんのでw
0936デフォルトの名無しさん
2006/01/28(土) 00:04:56ポインタなんて難しいものじゃない。
単にプログラム上で使用するオブジェクトを指し示す値だ。
問題は、
何 を 指 し て い る か ?
だ。
0937デフォルトの名無しさん
2006/01/28(土) 00:06:37とりあえず、何のことか説明汁!
0938デフォルトの名無しさん
2006/01/28(土) 00:07:200939デフォルトの名無しさん
2006/01/28(土) 00:10:32確かに・・・
>>937
関数宣言の時に2次元以上の配列引数にしたいとき
fanc(float mat[][MAX]);
とかの方法でしかやったことなかったってだけです
fanc(float *mat);
とかはなかったな〜と
0940デフォルトの名無しさん
2006/01/28(土) 00:12:12> fanc(float mat[][MAX]);
は
fanc(float (*mat)[MAX]);
のシンタックスシュガー。
配列へのポインタが正しい。
0941デフォルトの名無しさん
2006/01/28(土) 00:13:35これぞシュガーレス
0942デフォルトの名無しさん
2006/01/28(土) 00:14:37windowsをダウンしてlinuxでコンパイルしていました。
どうもみなさんありがとうございました。
結局、kakunin(int data[][2])
としたらコンパイルできました。
実際は、9×9のナンプレ(数独)をとくプログラムの一部分でして、
今のヒントを参考にしてまたプログラムを練り直します。
ありがとうございました。
0943デフォルトの名無しさん
2006/01/28(土) 00:16:59> kakunin(int data[][2])
kakunin(int data[][9])
だろ?
0944デフォルトの名無しさん
2006/01/28(土) 00:17:52ワロタ(w
0945デフォルトの名無しさん
2006/01/28(土) 00:18:18そうです。汗
打ち間違えました↓
0946デフォルトの名無しさん
2006/01/28(土) 00:22:52聞いたことない言葉(゚Д゚;)
0947デフォルトの名無しさん
2006/01/28(土) 00:24:55hoge[n]
が
*(hoge+n)
のシンタックスシュガーだって事も知らないクチかい?
0948デフォルトの名無しさん
2006/01/28(土) 00:26:220949デフォルトの名無しさん
2006/01/28(土) 00:26:35つまり、分かりやすさを上げるといった目的で
本来の書き方とは違った書き方をする構文のこと
0950デフォルトの名無しさん
2006/01/28(土) 00:28:21"0123456789"[1]
*("0123456789"+1)
0951デフォルトの名無しさん
2006/01/28(土) 00:28:440952デフォルトの名無しさん
2006/01/28(土) 00:32:350953デフォルトの名無しさん
2006/01/28(土) 00:34:450954デフォルトの名無しさん
2006/01/28(土) 00:40:55知りませんでした
そうなってたんだ
>>949
どうもありがとうございます
0955デフォルトの名無しさん
2006/01/28(土) 00:46:10それなら>>940の
fanc(float (*mat)[MAX]);
は
fanc(float *((*mat)+MAX));
とも書けるっていうこと?
0956デフォルトの名無しさん
2006/01/28(土) 00:46:59宣言と参照は別
0957デフォルトの名無しさん
2006/01/28(土) 00:47:28アホデスカ?
0958デフォルトの名無しさん
2006/01/28(土) 00:50:35知りませんでした。ありがとうございます。
>>957
ごめんなさい。勉強してきます。
0959デフォルトの名無しさん
2006/01/28(土) 00:52:160960デフォルトの名無しさん
2006/01/28(土) 01:18:470961デフォルトの名無しさん
2006/01/28(土) 01:20:35> fanc(float (*mat)[MAX]);
の引数の宣言の「float (*mat)[MAX]」は、
「float (*)[MAX]」型の「mat」と名称の仮引数の宣言となる。
型名には演算子は入らない。
0962デフォルトの名無しさん
2006/01/28(土) 01:20:59ttp://kmaebashi.com/programmer/hoge.html
0963デフォルトの名無しさん
2006/01/28(土) 01:21:37http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BF%E6%A7%8B%E6%96%87%E5%A4%89%E6%95%B0
0964デフォルトの名無しさん
2006/01/28(土) 01:22:25ttp://www.puni.net/~mimori/rfc/rfc3092.txt
0965デフォルトの名無しさん
2006/01/28(土) 01:39:50学校でC言語の基礎程度は教わりました。
今「Microsoft Visual C++ .NET Standard Version 2003」か「Borland C++Builder 6 Personal」にしようと思っているのですが大丈夫そうでしょうか。
教えてください。
0966デフォルトの名無しさん
2006/01/28(土) 01:40:250967デフォルトの名無しさん
2006/01/28(土) 01:42:37作りたい分野の資料を読んで、VCかBCBどちらでかかれているかで決める。
0968sage
2006/01/28(土) 01:42:410969デフォルトの名無しさん
2006/01/28(土) 01:43:530970デフォルトの名無しさん
2006/01/28(土) 01:44:11不足を感じたら、有料版を買うなりBCBに乗り換えるなりすればいいかと。
0971デフォルトの名無しさん
2006/01/28(土) 01:49:38もう一度ちゃんと資料を調べなおして考えてみることにします。
sageミスってすいません。
0972デフォルトの名無しさん
2006/01/28(土) 02:10:060973デフォルトの名無しさん
2006/01/28(土) 02:21:250974デフォルトの名無しさん
2006/01/28(土) 02:22:12日立の陶業開発環境HEWを薦める。VC++6.0クリソツだし。
0975デフォルトの名無しさん
2006/01/28(土) 02:26:04これを薦める。
Visual C++ 2005 Express Edition 日本語版
ttp://www.microsoft.com/japan/msdn/vstudio/express/visualc/
0976デフォルトの名無しさん
2006/01/28(土) 05:15:37上達するには実際にプログラミングしたほうがいいと思うのですが、どういったことをやればいいんですか?
どういったことができるかも分からないから
printf("hello!\n");とか計算とかぐらいしか思い浮かばない。
結果、同じことの繰り返しで上達しない。
レベル別にプログラミングの演習ができるようなサイトとかないですか?
0977デフォルトの名無しさん
2006/01/28(土) 05:16:380978デフォルトの名無しさん
2006/01/28(土) 06:58:27じゃあ、なんか作れ。
手始めに指定したフォルダの中のファイル一覧を
リストウィンドウで表示して、保存ボタンで一覧をファイルに保存できるツールを作るんだ。
0979デフォルトの名無しさん
2006/01/28(土) 08:22:50>>976がいきなりGUI使えると思うのか?
>>976
浮動小数点の扱い
↓
標準入力からのデータ読みこみ
↓
配列の宣言と文字列の操作
↓
構造体
↓
ポインタ
↓
ファイル操作
を順番にやってみれば?
0980デフォルトの名無しさん
2006/01/28(土) 09:45:24C言語なら俺に聞け! Part 121
http://pc8.2ch.net/test/read.cgi/tech/1138409094/
0981デフォルトの名無しさん
2006/01/28(土) 15:29:23アルゴリズム方面はやってみた?
ソートのほかに、二分木探索、最短最長パスの問題とか。
あとは標準Cライブラリの関数を自分で作ってみる。
GUIプログラムはそのプラットフォームに依存するから、
また言語の上達とは別の次元の知識が必要になるねぇ。
>>979みたいなこともやってないようだったら先にそっちだな。
0982デフォルトの名無しさん
2006/01/28(土) 16:03:44online-judge.uva.es
http://online-judge.uva.es/problemset/
PKU JudgeOnline
http://acm.pku.edu.cn/JudgeOnline/
0983デフォルトの名無しさん
2006/01/28(土) 16:37:220984デフォルトの名無しさん
2006/01/28(土) 16:39:250985デフォルトの名無しさん
2006/01/28(土) 16:47:330986デフォルトの名無しさん
2006/01/28(土) 17:01:07それだよな。
確かにAPIは関係ないかもしれない。
でも、これだけ普及してるWindowsで動作するプログラムも
作れなくて、技術者として一体何を主張できるというのか?って問題だな。
それと、仕事ってだいたいこんなもんだよ。
いきなり言われて、いきなり調べなくちゃならなくて、
はじめてだろうが、そうじゃなかろうが>>978みたいな内容で3日もかけたら
もう仕事まわしてもらえないと思うよ。
C言語を通して、言語の先にあるものも学ばなくちゃな。
0987デフォルトの名無しさん
2006/01/28(土) 17:05:00金欠学生にくそ高いリファレンスを買わせるのも気の毒だ
0988デフォルトの名無しさん
2006/01/28(土) 17:05:41いいわけにならない
つMSDN
0989デフォルトの名無しさん
2006/01/28(土) 17:11:49おまえら学生の時にAPIなんか勉強してたのか?
3日もとかアホかプログラムは所詮才能じゃなくて努力と経験だけだよ
0990デフォルトの名無しさん
2006/01/28(土) 17:21:370991デフォルトの名無しさん
2006/01/28(土) 17:22:14ついでに言えば、プログラミングを手っ取り早く覚えたいならプログラマーとして
就職しちゃえばいい
中小なら全くの初心者でも面接で気合を見せれば受かる
研修期間中にそれはもう み っ ち り としごいてくれるから
やる気さえあればどうとでもなる
0992デフォルトの名無しさん
2006/01/28(土) 17:24:12>努力
これが微塵も感じられないからじゃないか?
0993デフォルトの名無しさん
2006/01/28(土) 17:24:56別に厳しいことを言ってるわけじゃなくて、
「とりあえず、仕事ってどんな風になるの?」(進め方かな?)
っていうことがわからんと自分でどうなっとけばいいのか全然わからんでしょ?
募集要項に「C言語必須」って記述があって「C言語覚えてればOK」だと思いきや実は・・・的な
ことを無くすために必要なことだと俺は思うよ。嫌なら読まなきゃいいし。(どうせよまないだろうし)
ただ、いきなり使うっていってもAPIだって、ある程度パターンがあるからね。
このAPIの使い方は〜と似てるねとか。
だから、色んなAPI触ってある程度パターンを体で覚えておくと
いきなり仕事を振られてもそんなにあわてることなく対処できる。
0994976
2006/01/28(土) 18:13:52なにやら話が盛り上がってますね
>>979
ポインタ、ファイル操作辺りはまだやってないのでそちらのほうをやってみます
>>980
乙
>>981
あぁソートはまだやってないです、やってみたいと思います。
ちなみにアルゴリズムってなんですか?汗
基本の考え方というかとき方みたいなものですか?
GUIについては一通りCUIを覚えてからやろうと思ってます。
仕事をするにはこれぐらいできないと困るとありますが、それって新規卒だと研修とかであると思いますが・・
0995デフォルトの名無しさん
2006/01/28(土) 18:19:26アッヒャッヒャ!ヽ(゚∀゚)ノアッヒャッヒャ!
0996デフォルトの名無しさん
2006/01/28(土) 18:23:31正しく動くならな
0997デフォルトの名無しさん
2006/01/28(土) 18:24:56もちろん動かんってオチ
しかも2日かけて
どうやら延々と古今東西やってたらしい
0998デフォルトの名無しさん
2006/01/28(土) 18:28:07お前も辞めたほうが正解だぞ
0999デフォルトの名無しさん
2006/01/28(土) 18:29:08質問なんてしにこねぇでさっさと入門書のサンプル写せよ馬鹿w
1000デフォルトの名無しさん
2006/01/28(土) 18:31:57まあ3年でやめます
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。