C言語なら俺に聞け! Part 119
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/12/20(火) 20:24:08質問する前には最低限検索を。
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 118
http://pc8.2ch.net/test/read.cgi/tech/1133696815/
0002デフォルトの名無しさん
2005/12/20(火) 20:26:530003デフォルトの名無しさん
2005/12/20(火) 20:29:19お前には聞いてやらん。
0004デフォルトの名無しさん
2005/12/20(火) 21:01:21char a[5][5]={"ああああ","いいいい","うううう"};
と書くと長すぎるといわれるのですが、何処がおかしいのでしょう?
(実際は1行12文字程度の文字列で、コンパイル時に文字列が長すぎると怒られます)
0005デフォルトの名無しさん
2005/12/20(火) 21:03:22"ああああ"は8byte(+\0)
0006デフォルトの名無しさん
2005/12/20(火) 21:05:40"aaaa","bbbb","cccc"
0007デフォルトの名無しさん
2005/12/20(火) 21:09:32char str[5] = "ああああ";
はあふれるだろう。
0008デフォルトの名無しさん
2005/12/20(火) 21:14:350009デフォルトの名無しさん
2005/12/20(火) 21:17:470010デフォルトの名無しさん
2005/12/20(火) 22:12:120011デフォルトの名無しさん
2005/12/20(火) 23:11:27これでいいのに・・・
0012デフォルトの名無しさん
2005/12/20(火) 23:11:32どう考えるとそんな発想が出てくるんだ?
0013デフォルトの名無しさん
2005/12/20(火) 23:12:42それはポインタの配列であって、
二次元配列では無いだろう。
>> 二次元配列に文字列を代入するにはどうすれば良いのでしょうか?
0014デフォルトの名無しさん
2005/12/20(火) 23:18:190015デフォルトの名無しさん
2005/12/20(火) 23:26:180016デフォルトの名無しさん
2005/12/20(火) 23:30:140017デフォルトの名無しさん
2005/12/20(火) 23:31:48char (*a)[5]={"ああああ","いいいい","うううう"};
2)
char (*a)[9]={"ああああ","いいいい","うううう"};
3)
char *a[]={"ああああ","いいいい","うううう"};
1)はコンパイルエラー
2)と3)は別物
0018デフォルトの名無しさん
2005/12/20(火) 23:35:28これって意図した通りに動くの?
"ああああ"と"いいいい"が連続的に配置されている保証あるの?
0019デフォルトの名無しさん
2005/12/20(火) 23:35:46char (*a)[5]={"ああああ","いいいい","うううう"};
2)
char (*a)[9]={"ああああ","いいいい","うううう"};
3)
char *a[]={"ああああ","いいいい","うううう"};
4)
char a[5][9]={"ああああ","いいいい","うううう"};
5)
char *a[3]={"ああああ","いいいい","うううう"};
6)
char *a[9]={"ああああ","いいいい","うううう"};
上の中から同じものを選べ
0020デフォルトの名無しさん
2005/12/20(火) 23:36:57UnicodeのウィンドウにIMEを使って文字を入力する時、
入力された文字をWM_IME_COMPOSITIONやWM_IME_CHARを使わずにWM_CHARで正確に
文字が取得できますでしょうか??
ちなみにOSはWindows2000です。XPだと取れるっぽいのですが、Windows2000だと
私の環境はだと、とれないっぽいのですが、みなさんいかがでしょうか??
スレ違いなら、他で質問します。
0021デフォルトの名無しさん
2005/12/20(火) 23:37:51alignmentの問題があるからな
0022デフォルトの名無しさん
2005/12/20(火) 23:38:040023デフォルトの名無しさん
2005/12/20(火) 23:39:28http://pc8.2ch.net/test/read.cgi/tech/1133798345/
0024デフォルトの名無しさん
2005/12/20(火) 23:41:31確信犯(誤用)だろ
0025デフォルトの名無しさん
2005/12/21(水) 00:33:08エンコードは? もしutf8 だとアジアの文字はだいたいは3バイトだぞ。
日本はアジアだ。しかもアジアの一番東にある極東だ。わかったか。
0026デフォルトの名無しさん
2005/12/21(水) 06:42:25#include<stdio.h>
#include<math.h>
int main(void){
int x;
0.9075=1500/(1500+x);
printf("x=%d",x);
return 0;
}
0027デフォルトの名無しさん
2005/12/21(水) 06:45:530028デフォルトの名無しさん
2005/12/21(水) 06:52:450029デフォルトの名無しさん
2005/12/21(水) 07:04:40>>28
トンクスです
ttp://www5.airnet.ne.jp/tomy/cpro/sslib6.htm
ここを参考に少しやってみようと思います
0030デフォルトの名無しさん
2005/12/21(水) 07:06:020031デフォルトの名無しさん
2005/12/21(水) 08:47:15数学的に解く過程をそのまま実装すればいい。
0032デフォルトの名無しさん
2005/12/21(水) 08:57:05http://www2.ee.knct.ac.jp/el/E3/E305/pointer09.htm
この場合たまたま連続した領域に割り当てられているが
処理系に依存しており連続することを前提にプログラムしてはならない。
わかったか
0033デフォルトの名無しさん
2005/12/21(水) 11:16:470034デフォルトの名無しさん
2005/12/21(水) 11:18:470035デフォルトの名無しさん
2005/12/21(水) 11:19:35プロの棋譜をそのまま実装すればいい
0036デフォルトの名無しさん
2005/12/21(水) 11:27:19限界まで先読みするように作ればいい。
遅い場合は先読みを減らせばいい。(弱くなるが)
0037デフォルトの名無しさん
2005/12/21(水) 11:29:31じゃぁ、ライブラリ関数使わないで数学的にCで書いてみてw
0038デフォルトの名無しさん
2005/12/21(水) 11:30:280039デフォルトの名無しさん
2005/12/21(水) 11:33:46>この CPU に関して言えば、読み出しと書き込みで値が異なるのは
>当り前にある様です。
その CPU に限らず、I/O ポートならば当たり前です。なので、
>b=0 をやったあと、0 はレジスタに残ってるのに、わざわざ b を
>読み出してきてその値を a に代入するということをやっていました。
標準 C では、「代入式は、代入後の左オペランドの値を持つ」と
規定されています。このケースだと、左辺が volatile ですから
読み直してから a に代入、というのは解釈としては正しいでしょう。
>volatile だとこうなる方が普通なんでしょうか。
というか、そうなるように指示するための volatile キーワードです。
0040デフォルトの名無しさん
2005/12/21(水) 11:46:23数学的に解く過程をそのまま実装すればいい。
0041デフォルトの名無しさん
2005/12/21(水) 13:25:120042デフォルトの名無しさん
2005/12/21(水) 13:40:040043デフォルトの名無しさん
2005/12/21(水) 14:46:050044デフォルトの名無しさん
2005/12/21(水) 14:49:560045デフォルトの名無しさん
2005/12/21(水) 15:20:02fopenで開いて
fseek(fp, 10L, SEEK_SET);で
ファイルのカーソル位置を10Byte目に持ってきて
EOF(ファイル終端)を書込んで、
fclose()したいのだけど、
方法がわかりません。
(fclose後、ファイルサイズは、10Byteになっていて欲しい。
どなたか方法をご存知の方教えていただけないでしょうか?
0046デフォルトの名無しさん
2005/12/21(水) 15:29:12n次元配列(n≧2)は、規格上の用語として存在する
0047デフォルトの名無しさん
2005/12/21(水) 15:29:230048デフォルトの名無しさん
2005/12/21(水) 15:41:22・標準関数だけでは、ファイルサイズを切り詰めることはできない。
・EOFを書き込むと言う概念自体も間違い。
大抵の環境では、ファイル操作のための関数が用意されているので該当環境プログラミングスレか、
環境依存OKのスレで聞き直してみるといい。
0049デフォルトの名無しさん
2005/12/21(水) 15:44:32他のメンバ関数は0に初期化されますか?
0050デフォルトの名無しさん
2005/12/21(水) 15:53:01メンバにひとつづつ代入すると
その度に他の変数が初期化されるような仕様は
誰も好まないと思いますが。
>他のメンバ関数は0に初期化
…Σ( ゚Д゚)関数!?
0051デフォルトの名無しさん
2005/12/21(水) 16:03:38わかった\(^^^)/
0052デフォルトの名無しさん
2005/12/21(水) 16:19:12何で右向きながら左に驚いてんだ?
意味不明。w
0053デフォルトの名無しさん
2005/12/21(水) 16:29:41truncate() と ftruncate() という関数を調べなさい。
もしこれがない環境だった場合は新しいファイルに元のファイルの
先頭10バイトを書いてクローズ後に元のファイル名にリネームしなさい。
0054s
2005/12/21(水) 16:47:54「氏名を教えて→」(入力待ち)
「年齢を教えて→」(入力待ち)
「あなたは○○才の△△さんですね」
入出力のC言語のプログラムを教えてください。
急いでます。
0055デフォルトの名無しさん
2005/12/21(水) 16:52:30詩ね
0056デフォルトの名無しさん
2005/12/21(水) 16:53:590057デフォルトの名無しさん
2005/12/21(水) 16:55:02>54
ちゃんと授業は受けろよ
30分の勉強で書けるレベルの問題だぞ
教科書見れば簡単にわかる、急いで読め
0058s
2005/12/21(水) 16:55:38C言語ならなんでも聞いて良いのではないのですか?
0059デフォルトの名無しさん
2005/12/21(水) 17:00:290060デフォルトの名無しさん
2005/12/21(水) 17:02:14printf("Tellmeyouryears")
printf("Youare--")
0061s
2005/12/21(水) 17:03:260062デフォルトの名無しさん
2005/12/21(水) 17:03:460063デフォルトの名無しさん
2005/12/21(水) 17:06:240064デフォルトの名無しさん
2005/12/21(水) 17:11:21{
int b;
char a;
hyoji(氏名を教えて→):
nyuryoku($s\n.a):
hyoji(年齢を教えて→):
nyuryoku($d\n.b):
nyuryoku(あなたは$d才の$sさんですね.a*10.b):
}
0065デフォルトの名無しさん
2005/12/21(水) 17:14:04for(i=0;i<3;i++)
{
y[i]=rand();
printf("y=%d\n",y[i]);
}
for(i=0;i<3;i++)
{
y2[i]=rand();
printf("y2=%d\n",y[i]);
}
のように書くとy[0]=y2[0] y[1]=y2[1]・・・のように
yとy2の値が全部同じになってしまいます。
これはどう書けば値が変わってくるのでしょう?
srand(time(NULL))を使うのでしょうか?
0066デフォルトの名無しさん
2005/12/21(水) 17:18:12それでは何をどうしようと同じになる。
0067デフォルトの名無しさん
2005/12/21(水) 17:18:27y2[i]=rand();
printf("y2=%d\n",y[i]); ←y2[i]
イージーミス
0068デフォルトの名無しさん
2005/12/21(水) 17:19:48すみません、自分はアホでした。
ありがとうございます。
0069SOS
2005/12/21(水) 17:45:27自分はまったく授業出てなくて‥
電子機器以外持込可なんですがなにを持ち込めばいいですかね?
0070デフォルトの名無しさん
2005/12/21(水) 17:48:210071SOS
2005/12/21(水) 17:50:040072デフォルトの名無しさん
2005/12/21(水) 17:54:07諦めるか今から一夜漬け
0073デフォルトの名無しさん
2005/12/21(水) 17:54:23ちょっとワロタ
0074SOS
2005/12/21(水) 18:00:31わかりましたー
0076デフォルトの名無しさん
2005/12/21(水) 19:09:55基本的なことなら配列、ポインタ、構造体が自分でわかる
ようにまとめたノートとか作っとけば?
0077教えてください!!
2005/12/21(水) 19:22:16標準入力から入力した文字列の順序をさかさまにして標準出力へ表示するCプログラムを10分で作成せよ。たとえばabcと入力するとcbaと出力する。
0078デフォルトの名無しさん
2005/12/21(水) 19:24:09puts("出力: cba");
0079デフォルトの名無しさん
2005/12/21(水) 19:25:00こっちこい。
C/C++の宿題を片付けます 56代目
http://pc8.2ch.net/test/read.cgi/tech/1135125328/
0080デフォルトの名無しさん
2005/12/21(水) 19:27:40#include <stdio.h>
#include <string.h>
void rev_string(char str[],unsigned len)
{
unsigned i;
char temp;
for(i=0;i<len/2;i++){
temp=str[i];
str[i]=str[len-i];
str[len-i]=temp;
}
}
int main(void)
{
char str[100];
unsigned len;
printf("文字列を入力してください:");
scanf("%s",str);
len=strlen(str);
rev_string(str,len-1);
printf("%s",str);
putchar('\n');
return 0;
}
0081デフォルトの名無しさん
2005/12/21(水) 23:52:51#include<stdio.h>
char *str_chr(const char *,int);
int main(){
char str[10],*p;
char uletter[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
printf("英大文字を入力");
scanf("%s",str); //str[10]="B"=0x24としてみる
p=str_chr(uletter,str[0]); //str[0]=B=66=0x24
if(p != NULL) puts(p); //puts=int puts(const char 文字列へのポインタ)
return (0);
}
char *str_chr(const char *str,int c){
printf("%d\n",c);
printf("%d\n",*str);
for(;*str;str++){ //*str=str[0] str=*strの先頭アドレス
if(*str==c) return((char *)str); //*str=str[0]=A==0x23 c=str[0]=B=66=0x24
}
return (NULL);
}
自分なりに注釈//を付けてみたんですが
上のプログラムで、(*str==c)の部分は結局
数値を比較してるととらえて良いんでしょうか
0082デフォルトの名無しさん
2005/12/21(水) 23:59:30'A'も0x23も1バイトの数値と言えば数値
0083デフォルトの名無しさん
2005/12/21(水) 23:59:50strlenはどうなのよ?
あと、仕様的にもらった配列書き換えちゃう関数はあんまり感心しないんだけど……
void rev_string(const char *src, char *dest, unsigned int len)
がベストっぽ
0084デフォルトの名無しさん
2005/12/22(木) 00:02:32struct StudentA{
int id;
int english;
int math;
int chem;
};
struct StudentB{
int id;
int subject[3];
};
int compA(const void *a,const void *b){
return ((struct StudentA *)a)->english - ((struct Student A *)b)->english;
}
void main(){
int key;
struct StudentA seitoA[5];
struct StudentB seitoB[5];
qsort(seitoA,5,sizeof(struct StudentA),compA);
key=2; /* 例えば */
qsort(seitoB,5,sizeof(struct StudentB),compB);
}
englishの値によってseitoAを並び替える比較関数compAは作れるんですが、
subject[key]の値によってseitoBを並び替える比較関数がうまく作れません。
教えていただけないでしょうか。
0085デフォルトの名無しさん
2005/12/22(木) 00:29:49int i, diff;
for (i = 0; i < 3; i++) {
diff = ((struct StudentB *)a)->subkey[i] - ((struct StudentB *)b)->subkey[i];
if (diff != 0) return diff;
}
return 0;
}
008685
2005/12/22(木) 00:35:02○subject
ね
コンパイルしていないから
0087デフォルトの名無しさん
2005/12/22(木) 02:52:46「keyをグローバル変数として持つ」くらいしか思い付かんな。
qsort自作するならどうとでもなるが…。
0088デフォルトの名無しさん
2005/12/22(木) 03:12:35>>85をコピって
int key; <---外部変数
int compB(const void *a,const void *b){
return ((struct StudentB *)a)->subject[key] - ((struct StudentB *)b)->subject[key];
}
0089デフォルトの名無しさん
2005/12/22(木) 06:16:40int key;
compare(int key): key(key) {}
int operator ()(const struct StudentB& lhs, const struct StudentB& rhs) {
return lhs.subject[key] - rhs.subject[key];
}
};
int main()
{
int key = 2;
std::sort(seitoB, seitoB+sizeof(seitoB)/sizeof(seitoB[0]), compare(key));
}
とか。
スレ違い(C++)だし、試してないけど。
0090デフォルトの名無しさん
2005/12/22(木) 09:08:08ついでに qsort() でもないね。
009184
2005/12/22(木) 09:19:18レスありがとうございます。
やはり、外部変数かqsortつくるって感じですか。
keyを外部変数にしてしまおうと思います。
ありがとうございました。
0092デフォルトの名無しさん
2005/12/22(木) 11:56:49一般的に、全件データがそろった状態で渡されるよりも一件ずつ渡されることの方が多いから
代入ソートを作っておくと意外と便利だったりするし。
0093デフォルトの名無しさん
2005/12/22(木) 12:00:16C の質問に
C++ で答える阿呆がいる
0094デフォルトの名無しさん
2005/12/22(木) 12:10:490095デフォルトの名無しさん
2005/12/22(木) 13:15:33execvp(argv[0], argv);
というものを書き換えるとすれば、どれが可能になるのでしょうか。
A : execvp(&argv[0][0], argv)
B : execvp(argv[0], argv[0])
C : execvp(argv[0][0], argv)
D : execvp(argv[0], &argv[0])
よろしくお願いします。
0096デフォルトの名無しさん
2005/12/22(木) 13:27:160097デフォルトの名無しさん
2005/12/22(木) 14:10:11argv の宣言も書け。
0098デフォルトの名無しさん
2005/12/22(木) 15:29:00現在 fprintf(fp,"%lf,%lf\n",delta,n); このようにCSV形式でデータを保存しているのですが
これをエクセルのXLS形式で保存したいのですがどのようにすればできますでしょうか?
もし方法があるのでしたらどうかお教えください。
当方の環境
使用OS:windows2000
コンパイラ:BorlandC++
009998
2005/12/22(木) 15:37:52fprintf(fp,"%lf\t,%lf\n",delta,n);
としたらできました。
0100デフォルトの名無しさん
2005/12/22(木) 15:51:40カンマ区切りの場合はあらかじめエクセルを立ち上げておいて
メニューから開かないといけない(しかもファイルメニューの開く
から開きにいくとやはりカンマ区切りは開けないので注意)
0101デフォルトの名無しさん
2005/12/22(木) 15:55:000102デフォルトの名無しさん
2005/12/22(木) 16:05:23アフォ?
0103デフォルトの名無しさん
2005/12/22(木) 16:30:50スレ違いだボケ!
0104デフォルトの名無しさん
2005/12/22(木) 16:34:03しかし逆にXLSファイルを右クリックの新規作成からXLSファイルを作製したところ
データを読み込む方法がわかりません。
なにかしら方法がありましたらお教えください。
新規に作成したXLSファイルは以下のような二列のデータ形式です。 "|" はセルの分け目です。
1 | 0.2
2 | 0.3
0105デフォルトの名無しさん
2005/12/22(木) 17:06:23おまいは人の話を聞かない人だろう?
0106デフォルトの名無しさん
2005/12/22(木) 17:26:15http://www.attain-sys.com/vc/excel/vc_excel.html
0107デフォルトの名無しさん
2005/12/22(木) 17:51:32int func(int **array)
{
(int*)a=(int*)malloc(1);
((int*)a)[0]=100;
return 0;
}
と引数にアドレスを受けて、そこにメモリを割り当ててるのですが
return 0;が処理されて制御が戻る時に、この割り当てられたメモリも破棄されてしまうのでしょうか・・・
0108デフォルトの名無しさん
2005/12/22(木) 17:53:34aはarrayです
0109デフォルトの名無しさん
2005/12/22(木) 17:55:25されない
メモリの解放は自己責任で行う
0110デフォルトの名無しさん
2005/12/22(木) 17:55:34free(a);
が必要。
exit();やmain()の終了時ならOSが破棄してくれるが
関数単体なら必要なくなった時点でfreeしとけ。
あと、malloc呼んだあとの戻り値はNULLぽになることがあるからチェックは必須な。
0111デフォルトの名無しさん
2005/12/22(木) 18:01:52上記と併せて
void main()
{
int *hoge;
func(&hoge);
printf("%d",hoge[0]);
free(hoge);
}
としますと、
((int*)a)[0]=100; で代入されたにも関わらずなぜか意図しない数値が出力されてしまいます
ただfunc関数内で代入をした後にprintf("%d",hoge[0]);を処理しますと、きちんと100されるのですが
因みに処理系はBCC5.5です
何か可笑しいでしょう
0112デフォルトの名無しさん
2005/12/22(木) 18:03:44>>107の時点で気になってはいたのだが、
malloc(1)だと1バイトしか確保されない
malloc(sizof(int))に
0113112
2005/12/22(木) 18:04:28○sizeof
0114デフォルトの名無しさん
2005/12/22(木) 18:05:18すみません冗長にならないように簡潔に記述してミスしちまいましたorz
>>110
ガッ
0115デフォルトの名無しさん
2005/12/22(木) 18:31:040116デフォルトの名無しさん
2005/12/22(木) 18:32:460117デフォルトの名無しさん
2005/12/22(木) 19:04:51int main(){
char* mondai[10]={"a","b","c","d","e","f","g","h","i","j"};
char* kotae[10]={"A","B","C","D","E","F","G","H","I","J"};
int nyuuryoku;
int mondaisuu;
int seikaisuu=0;
int ransuu;
char seikai[2];
char toi[2];
for(mondaisuu=1;mondaisuu<11;mondaisuu++){
srand(time(NULL));
ransuu=rand()%10;
strcpy(seikai,kotae[ransuu]);
strcpy (toi,mondai[ransuu]);
switch(ransuu=rand()%2){
0118デフォルトの名無しさん
2005/12/22(木) 19:05:29printf("問%d%sといえば\n",mondaisuu,toi);
printf("�@%s �A%s\n",seikai,kotae[rand()%10]);
scanf("%d",&nyuuryoku);
if(nyuuryoku==1){printf("正解です。\n");seikaisuu++;}
else{printf("間違いです。\n");}
break;
case 1:
printf("問%d%sといえば\n",mondaisuu,toi);
printf("�@%s �A%s\n",kotae[rand()%10],seikai);
scanf("%d",&nyuuryoku);
if(nyuuryoku==2){printf("正解です。\n");seikaisuu++;}
else{printf("間違いです。\n");}
break;
}
}
printf("10問中%d問正解でした。",seikaisuu);
return 0;
}
0119デフォルトの名無しさん
2005/12/22(木) 19:12:24有難うございます、ポインタについて勉強します
0120デフォルトの名無しさん
2005/12/23(金) 00:04:26double hoge = 100;
とかにしといて,127とかと&演算させるとき・・・
(int)(hoge) & 127;はコンパイル通るのに
hoge & (double)100;は通らないんだけど,これなんで?
0121デフォルトの名無しさん
2005/12/23(金) 00:15:09浮動少数点型の&演算子はサポートされていないからでは。
どうしてもそうしたいときは、ポインタ経由でバイナリデータ列とみなしてやる。
0122デフォルトの名無しさん
2005/12/23(金) 00:25:53ありがとう。
試してみます。
0123構造体
2005/12/23(金) 02:45:37先日、構造体配列を入力する関数をつくりました。
その後行数が長いのでプログラムを分割
しようとしましたが、そこでエラーが出てしまいました。
簡単にしたサンプル示しますので悪いところおせーてちょ。
0124構造体
2005/12/23(金) 02:47:58void Sample(int a,model b[]);
---サブルーチン(sample.c)---------
void Sample(int a,model b[]){
aとbの表示など;
}
----メインプログラム(main.c)-----
#include<stdio.h>
#include"sample.h"
typedef struct{
int a;
char name[10];
} model;
main(){
int x;
model dog[30];
xとdogの入力;
Sample(x,dog);
}
---------------------------
癖などあると思いますが、がしがしダメだししてください。
よろしくおねがいします!
0125デフォルトの名無しさん
2005/12/23(金) 02:49:35分けたsample.cは放置されてるとかいうオチじゃないだろうな?
0126デフォルトの名無しさん
2005/12/23(金) 03:10:530127デフォルトの名無しさん
2005/12/23(金) 07:02:28正:ヘッダの使い方についての質問
0128デフォルトの名無しさん
2005/12/23(金) 08:20:20+sample
-main.cpp
-sub.h
sub.h
#include <stdio.h>
void Sample(int a,model b[]){
aとbの表示など;
}
main.cpp内容
#include <stdio.h>
#include "sub.h"
....
もし
+sample
-main.cpp
+header
-sub.h
の様にヘッダーが置いてあったら
#include "\sub.h"
0129デフォルトの名無しさん
2005/12/23(金) 08:21:090130構造体
2005/12/23(金) 09:17:47そういえばエラーの詳細や、コンパイラについて書いてなかったにきづき
急いで来ましたが、ちょっとおそかったですね><
大変申し訳ないのですが、本日家にいまして
正確にエラーについてかけないのですが、
コンパイラはgccをSolarisで使っております。
gcc -o main.exe main.c sample.c
としたところ
sample.c内の入力に用いている構造体変数が宣言されてない
とのことでした。
そこで、構造体の宣言の位置などに問題があると予想し、
質問させていただきました。
とりあえず、ヘッダに構造体の宣言を書き込むという方法を
試してみます!いままで自分の中でサブルーチンはメインの子供
というイメージから変数の宣言は全部メインで行っていたので
おもいつきませんでした。
そこでアドバイスの他にこんな解決法を考えてみました。
1.構造体の宣言のみを書いたヘッダを用意する。
2.ヘッダやメインの両方で宣言して、重複してしまってもOKみたいな機能
(こんなのあったような?なかったらスマソw)を利用する。
全部試してみたいと思います!
いろいろ書籍やネットを探したのですが、なかなかベストフィットする記述が
なかったので質問させていただきました。助言を下さった方あり。
また、こんな場合はこれ!みたいな定石があったらおせーてください。
長文スマソ
0131デフォルトの名無しさん
2005/12/23(金) 12:38:130132デフォルトの名無しさん
2005/12/23(金) 15:34:04#define READ_H
とりあえず標準のヘッダの中身を覗いてみろ。いろいろ参考になるから。
#endif /* READ_H */
0133デフォルトの名無しさん
2005/12/23(金) 18:35:31#include <stdlib.h>
struct A {
int a;
int ab[20];
};
struct B {
char b;
int c;
};
int main( void ) {
struct A *pa = (struct A*)malloc(sizeof(struct A));
struct B *pb;
int i = 0;
pa->a = 10;
for (;i < 20; ++i)
pa->ab[i] = i + 1;
pb = (struct B*)pa; // pb には pa のアドレスが代入される ★
printf("%d\n",pb->b);
printf("%d\n",pb->c);
free(pa);
}
これがまずいというのはわかるのですが、この動作が予想できた人の考えが知りたいのです。
★の部分でアドレスを代入している訳ですが、pb->c で struct A a.ab[0] と同じ結果が出る理由がよくわかりません。
イメージとしては、struct A の全メンバを struct B に詰め込む感じなのでしょうか? それならば、アドレスを
代入する時点でエラーになりそうなのですが。
えっと…もしかしてアロー演算子はメンバ名に依存せず、型のサイズで評価対象を決めていたりするんでしょうか
訳がわかりませんね すみません、とにかくそんな状態なんです。ポインタについてはもう理解し終えたと勘違いしていた
手前、どこをどう読み直せば良いのかも検討がつきません。長文失礼します ご教示お願いします
0134デフォルトの名無しさん
2005/12/23(金) 18:45:10マルチ氏ね
0135デフォルトの名無しさん
2005/12/23(金) 18:49:28メモリレイアウトに沿ってメモリー上のデータが参照されているだけ。
アラインメントが恐らくデフォルトで4バイトだからそのような動作をする。
0136デフォルトの名無しさん
2005/12/23(金) 19:45:19どのようにすればいいでしょうか?
isalphaなどの関数が使えないので困ってます
0137デフォルトの名無しさん
2005/12/23(金) 19:51:04それを先頭につけた後、
struct B {
char b;
char c;
char d;
char e;
int f;
};
とやり、struct B の中身を全部見たら、>>135さんの言っていることが実現
出来たっぽいです。おぼろげながら理解しました。マルチすみませんでした。m(_ _)m
レスありがとうございます
0138137修正
2005/12/23(金) 19:55:14○書き込みより自分なりに理解
0139デフォルトの名無しさん
2005/12/23(金) 21:02:03おまえがクロスやってみせろ
0140デフォルトの名無しさん
2005/12/23(金) 21:07:03これが職業か?
それを恩着せがましく、マルチだから、答えんとか俺には理解できん。
0141デフォルトの名無しさん
2005/12/23(金) 21:45:240142デフォルトの名無しさん
2005/12/23(金) 21:52:07体裁が整っていようとも答える気をそぐような質問には答えない漏れ
えぇ事故厨ですとも
0143デフォルトの名無しさん
2005/12/23(金) 21:52:13http://pc8.2ch.net/test/read.cgi/tech/1124256027/263
【初心者歓迎】C/C++室 Ver.24【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1131691023/868
C言語なら俺に聞け! Part 119
http://pc8.2ch.net/test/read.cgi/tech/1135077848/133
0144デフォルトの名無しさん
2005/12/23(金) 21:54:34>double型の変数に文字が入力されたら
この表現が一体全体どんな状況を指しているのか理解できないので、
その状況を表すソースの断片を沿えて初心者スレ辺りにでも書き直してみてください。
この辺かな?
はきだめC/C++下級者の質問箱
http://pc8.2ch.net/test/read.cgi/tech/1124256027/
0145デフォルトの名無しさん
2005/12/23(金) 21:55:58scanf?
0146デフォルトの名無しさん
2005/12/23(金) 22:02:50逆だ逆。職業じゃないからこそマルチとか平気でやる
ムカつく野郎はどんどん煽ってやるんだよw
0147デフォルトの名無しさん
2005/12/23(金) 22:04:43そんな感じでいいんじゃねぇ。俺も気の向いた質問には答えるし、気の向かなかったら
答えない。だから、別にマルチだろうが別に気にせん。
0148デフォルトの名無しさん
2005/12/23(金) 22:09:22だから、ここは所詮2chんなわけでほぼなんでもありの世界。
それで、マルチぐらいでいちいちこっちが腹たててたら、自分が損するような。
まぁ、ムカつくやつ煽ってストレス解消してもありだと思う。
でも、そんな事すると、自分の人間としての底が見えたような気がして、俺はやめとく。
0149デフォルトの名無しさん
2005/12/23(金) 22:12:13っていうなら、
マルチうざいって言う奴ぐらいいいじゃない
って
0150デフォルトの名無しさん
2005/12/23(金) 22:14:320151デフォルトの名無しさん
2005/12/23(金) 22:18:06ここは技術スレ
ネットニュースと Web 掲示板の区別もつかないアフォは場違いなんだよ
0152デフォルトの名無しさん
2005/12/23(金) 22:20:560153デフォルトの名無しさん
2005/12/23(金) 22:21:440154デフォルトの名無しさん
2005/12/23(金) 22:22:090155デフォルトの名無しさん
2005/12/23(金) 22:22:390156デフォルトの名無しさん
2005/12/23(金) 22:22:53敗北宣言乙
0157デフォルトの名無しさん
2005/12/23(金) 22:24:300158デフォルトの名無しさん
2005/12/23(金) 22:26:23違いがあるのでしょうか?遺伝アルゴリズムに自己抑制機能をつけたものが免疫アルゴリズムになるのでしょうか?
知ってる人がいたら誰か教えてください・・・。
0159デフォルトの名無しさん
2005/12/23(金) 22:33:22149>>
確かにその通りですが、なぜ、マルチポストでいちいち腹を立てるのかそれがいまだに
理解できなくて、聞いたわけです。
150>>だから、そもそもマルチが良いか悪いかなんてどうです。
0160デフォルトの名無しさん
2005/12/23(金) 22:33:570161デフォルトの名無しさん
2005/12/23(金) 22:35:43クロスポストをやってみせれる奴がいない時点で答えでてるだろ
質問者がどこで何をしてるかいちいち調べて噛みつくようなストーカーは放置が基本だし
0162デフォルトの名無しさん
2005/12/23(金) 22:35:450163デフォルトの名無しさん
2005/12/23(金) 22:39:15んなやついんの?
0164デフォルトの名無しさん
2005/12/23(金) 22:40:09おまえ
0165デフォルトの名無しさん
2005/12/23(金) 22:42:470167デフォルトの名無しさん
2005/12/23(金) 22:56:00馬鹿には高尚過ぎて理解できなかったかな。
んなやついんの?っていえばそういうだろうなって予想したわけだよ。
いちいち調べなくたって複数のスレ見てんだからマルチの行動はわかるっつーの。
0168デフォルトの名無しさん
2005/12/23(金) 22:59:13あんたの巡回リストを共有してる人にしか関係ねー「マルチ」の定義は
おかしな俺用語で話す・・・ あ、おまえ沢村だな
0169158
2005/12/23(金) 23:02:05他の場所で聞いてきます
0170デフォルトの名無しさん
2005/12/23(金) 23:05:01それがいいと思う。ここWin32API版だからね。
0171デフォルトの名無しさん
2005/12/23(金) 23:08:140172デフォルトの名無しさん
2005/12/23(金) 23:09:120173デフォルトの名無しさん
2005/12/23(金) 23:10:400174デフォルトの名無しさん
2005/12/23(金) 23:11:450175デフォルトの名無しさん
2005/12/23(金) 23:11:50fseek と ftell
0176デフォルトの名無しさん
2005/12/23(金) 23:16:32long getfilesize(FILE *fp)
{
long result_offset;
long current_offset;
current_offset = ftell(fp);
if (fseek(fp, SEEK_END, 0) == -1) {
return -1;
}
result_offset = ftell(fp);
if (fseek(fp, SEEK_SET, current_offset) == -1) {
return -1;
}
return result_offset;
}
0177デフォルトの名無しさん
2005/12/23(金) 23:17:470178デフォルトの名無しさん
2005/12/23(金) 23:37:56fstatがいいんじゃない?
FILEをファイルディスクリプタに変換する必要があるけど。
0179デフォルトの名無しさん
2005/12/23(金) 23:43:36fstatは標準関数でない以上このスレで扱うものではない。
0180デフォルトの名無しさん
2005/12/24(土) 00:22:380181デフォルトの名無しさん
2005/12/24(土) 00:31:59そのまんま。システムを呼ぶことです。
システム(OS)のサービスを利用するために、システム(OS)が提供する
関数を呼ぶこと。
例)子プロセスを起動するためにfork関数をコールする
0182クリスマス・いう゛
2005/12/24(土) 00:58:030183デフォルトの名無しさん
2005/12/24(土) 01:24:16スレ違いというか板違いというか気違い
0185デフォルトの名無しさん
2005/12/24(土) 07:32:04#define PATHNAME "X.TXT"
この、PATHNAMEを使って
"X.TXT"
と、
L"X.TXT"
の両方を生成したいのですが、##が効きません。どう書けばよいのでしょうか?
dwResCnt = GetFullPathNameA(PATHNAME, BUFSIZE, pathname, &filename);
dwResCnt = GetFullPathNameW(L ## PATHNAME, WBUFSIZE, wpathname, &wfilename);
0186デフォルトの名無しさん
2005/12/24(土) 07:49:38#define PATHNAME _TEXT("X.TXT")
じゃないのか
0187デフォルトの名無しさん
2005/12/24(土) 07:53:52それだと、UNICODEのdefineで、決まっちまうだろ。
0188デフォルトの名無しさん
2005/12/24(土) 09:34:38これでいちおうくっつくみたいだけど・・・
#define LSTR(x) L ## #x
何か気持ち悪いな
0189デフォルトの名無しさん
2005/12/24(土) 10:00:18int (*func)(int);
の違いってなに?
0190デフォルトの名無しさん
2005/12/24(土) 10:02:260191デフォルトの名無しさん
2005/12/24(土) 10:04:26関数へのポインタって、上の記述でもOKなんですか?
0192デフォルトの名無しさん
2005/12/24(土) 10:41:450193デフォルトの名無しさん
2005/12/24(土) 11:01:180194デフォルトの名無しさん
2005/12/24(土) 11:18:21本当にありがとうございました
0195デフォルトの名無しさん
2005/12/24(土) 12:21:32とっても奥深くやりがいがあるんですけど集中力が持ちません
どうしましょうか・・・
>>195は即座に氏ね!!スレ違い以外でお願いします
0196デフォルトの名無しさん
2005/12/24(土) 12:22:39自殺乙
>>62
あぼ〜んしとくか?
0197デフォルトの名無しさん
2005/12/24(土) 12:23:46マシンに向かうより数学の勉強だな
∴スレ違い
0198デフォルトの名無しさん
2005/12/24(土) 12:34:20配列の要素数を数万以上にするとエラーが発生してしまうのですが、
要素数を数十万単位にする方法はないでしょうか?
0200デフォルトの名無しさん
2005/12/24(土) 12:40:12グローバル変数として、配列を確保
0201デフォルトの名無しさん
2005/12/24(土) 12:45:23そ、そんな手があったのか…。
しかし今からグローバルにすると、これまでのソースを変えないと・・・ぐふっ
0202デフォルトの名無しさん
2005/12/24(土) 12:47:25じゃあ、malloc
0203デフォルトの名無しさん
2005/12/24(土) 12:49:01・配列を static か malloc にする (互換性に問題あり)
・オプションでスタックサイズを変更 (教科書的に正しい、ただし処理系特有のオプションが必要)
後者についてはこちらでどうぞ
http://pc8.2ch.net/test/read.cgi/tech/1131443284/
0204デフォルトの名無しさん
2005/12/24(土) 12:51:160205デフォルトの名無しさん
2005/12/24(土) 12:53:0364bit環境の話だろ
0206デフォルトの名無しさん
2005/12/24(土) 12:55:43そうなんですか。答えて下さってありがとうございました。
0207デフォルトの名無しさん
2005/12/24(土) 15:13:49前者のほうが教科書的だと思うが。
0208デフォルトの名無しさん
2005/12/24(土) 15:14:58教科書的の意味を理解していない気がする・・・
0209デフォルトの名無しさん
2005/12/24(土) 15:36:07○ malloc する
・最もスタンダードな方法。
・メモリが足りない場合のエラー処理は必須だが、
プログラム内で挙動を制御できる。
・配列を確保できるメモリが足りなくても、とりあえず起動はできる。
(もちろん、配列以外のメモリすら足りない場合は起動できないが)
○スタックサイズの変更
・ソースを書き換えずに解決できるため、新しくバグを増やす危険性は少ない。
・スタックサイズがどれだけ必要かある程度計算する必要がある。
・別コンパイラへの可搬性が少し悪い。
・起動時にスタックが確保できなければ起動できないという問題がある。
○ 配列を static にする
・配列がただ一個しか存在しなくなるので、それでもいい場合のみ。
・起動時にデータが確保できなければ起動できないという問題がある。
一応 malloc がオススメ。
0210デフォルトの名無しさん
2005/12/24(土) 15:47:16何バイトから static にする必要がでるかが処理系依存かつ不明瞭、static 固有の問題点を抱える
>>209
>・起動時にスタックが確保できなければ起動できないという問題がある。
起動はできる
スタック溢れの検出方法が一般化されいないのは auto 固有の問題点
(だからと言って常に malloc を優先的に使うことを推奨したくないが)
>・起動時にデータが確保できなければ起動できないという問題がある。
資源の不足を早期に検出できることは問題か
0211デフォルトの名無しさん
2005/12/24(土) 15:54:17本来、スタックサイズは必須の要件であって
デフォルト値すらうろ覚えの傾向がもしあるなら
それは正すべき誤りと考える
02121
2005/12/24(土) 16:21:17問1と2の解答を入力して、その解答を正答と照らし合わせ、正誤を○×で表して正解数を表示するものです。
一応書き上げてみたんですが、テストすると正誤とは全然違った○×の羅列が出てきます。
どこが間違ってるのか、眺めて考えてみたんですがわからなくてノД`)
アドバイス頂ければ幸いです。↑の問題に関してだけでなくここはこう書くと良い、とかもあれば是非。
#include<stdio.h>
main()
{
char a[11],b[11],c[]={"アイウエオ"},d[]={"カキクケコ"},i,x;
i=0;
x=0;
printf("問1の解答を連続した片仮名で入力して下さい。\n");
scanf("%s",&a);
printf("続いて問2の解答を連続した片仮名で入力して下さい。\n");
scanf("%s",&b);
printf("採点をします。\n\n");
printf("問1 模範解答 %s\n",c);
printf("あなたの解答 %s\n ",a);
for(i=0;i<5;i++){
if(a[i]==c[i]){
printf("○");
x++;
}
else
printf("×");
}
02132
2005/12/24(土) 16:22:09x=0;
printf("\n\n問2 模範解答 %s\n",d);
printf("あなたの解答 %s\n ",b);
for(i=0;i<5;i++){
if(b[i]==d[i]){
printf("○");
x++;
}
else
printf("×");
}
printf(" %d/%d",x,i);
return 0;
}
0214デフォルトの名無しさん
2005/12/24(土) 16:30:130215デフォルトの名無しさん
2005/12/24(土) 16:30:20> if(a[i]==c[i]){
おかしくね?
0216デフォルトの名無しさん
2005/12/24(土) 16:33:16とりあえず半角カナにしてみれ
全角文字は if(a[i]==c[i]) のような1バイト比較ではなく2バイト比較が必要だ
0217デフォルトの名無しさん
2005/12/24(土) 16:36:04zzzzz
続いて問2の解答を連続したアルファベットで入力して下さい。
ssssx
採点をします。
問1 模範解答 zzzzz
あなたの解答 zzzzz
○○○○○ 5/5
問2 模範解答 xxxxx
あなたの解答 ssssx
××××○ 1/5
0218デフォルトの名無しさん
2005/12/24(土) 16:41:550219212
2005/12/24(土) 16:44:54>214
違いますよorz
>215
どこですか?判りませんノД`)
>216
2バイト文字を比較する場合は配列を2ブロック?毎に分けて比較する必要があるって事ですよね?
もう一度教本眺めてきます
0220212
2005/12/24(土) 16:47:39>215は>216と同じ事が言いたかったんでしょうか
文法というか書き方がおかしいのかと勘違いしてました
0221デフォルトの名無しさん
2005/12/24(土) 16:50:100222デフォルトの名無しさん
2005/12/24(土) 16:51:34それ、なんて言う脳内ルール?
0223デフォルトの名無しさん
2005/12/24(土) 16:55:37どこにあるんですか?
0224デフォルトの名無しさん
2005/12/24(土) 16:57:520225デフォルトの名無しさん
2005/12/24(土) 17:14:34C言語にスタックなんて概念、定義されていたっけ?
0226デフォルトの名無しさん
2005/12/24(土) 17:25:08実行環境をどのように調達するかは C の定義に含まれないが
少なくとも使用する環境がスタックを採用しているなら必須と考える
0227デフォルトの名無しさん
2005/12/24(土) 17:26:340228デフォルトの名無しさん
2005/12/24(土) 17:31:28おまいらよりグーグル先生の方が
計り知れないほど使える
0229デフォルトの名無しさん
2005/12/24(土) 17:33:09常識
0230デフォルトの名無しさん
2005/12/24(土) 17:34:05いや、わかんない人のために
アナウンス
0231デフォルトの名無しさん
2005/12/24(土) 17:39:120232デフォルトの名無しさん
2005/12/24(土) 17:50:150233デフォルトの名無しさん
2005/12/24(土) 20:15:17>起動はできる
ごめんよ。起動できるみたいだね。
>資源の不足を早期に検出できることは問題か
何のエラーなのかがユーザに分からないので大問題。
検出はプログラム内部で行えて、
状況に応じたメッセージを出せるのが望ましい。
>>211
ソース以外の設定まで持ち歩かないといけないと言う点で
可搬性が少し悪いと言ったまでの話。
0234デフォルトの名無しさん
2005/12/24(土) 22:00:37>何のエラーなのかがユーザに分からないので大問題。
物理的な資源の調達に責任を負う立場の者
・組み込みならハードウェア担当者
・PCならパッケージに記載されている必要メモリ量を確認する人
が「分からない」なら技術ではなく人事の問題
あなたの言う「ユーザ」とは
・Hello world などを表示させる練習をしている人
ではないのか?
>ソース以外の設定まで持ち歩かないといけないと言う点で
もとよりポーティングは、コンパイラドライバを起動するコマンド名から異なる環境に持って行く作業であり
繰り返すが auto から malloc へ切り替えるスレッショルドも当然異なる
あなたの言う「最もスタンダードな方法」では何を基準としているのか
0235デフォルトの名無しさん
2005/12/24(土) 23:45:32(m。_。)m オネガイシマス
コンパイルと実行環境はcygwin+GCCです。
main()
{
printf("hoge1");
printf("hoge1\n");
if(fork()){/*親プロセス*/
printf("hoge2");
printf("hoge2\n");
}
else{/*子プロセス*/
printf("hoge3");←出力されてない
printf("hoge3\n");
}
}
実行結果:
hoge1hoge1
hoge2hoge2
hoge3
となってしまいます。
子プロセスで改行なしの標準出力がされません。なぜでしょうか?
調べてみると改行があると出力されるようなのですが・・・
また回避策もお願い致します。
(子プロセスの標準出力を親プロセスとのパイプにつなぐとか・・・)
どうか御教授の方宜しくお願い致します。
0236デフォルトの名無しさん
2005/12/24(土) 23:56:31マルチ シネ
0237デフォルトの名無しさん
2005/12/25(日) 00:10:02その質問なら UNIX 板で聞いた方がいい
自分がクロスできないくせにマルチがどうのと言ってるアフォは無視でいい
0238デフォルトの名無しさん
2005/12/25(日) 00:13:28了解しました
0239デフォルトの名無しさん
2005/12/25(日) 00:16:460240デフォルトの名無しさん
2005/12/25(日) 00:22:19マルチシネ
0241デフォルトの名無しさん
2005/12/25(日) 00:22:590242デフォルトの名無しさん
2005/12/25(日) 00:40:06C言語大好きな俺が明日その関数について調べて、
答えるから、待っててくれ。
まじでC言語が楽しくてたまらないやwwwwwwww
0243デフォルトの名無しさん
2005/12/25(日) 00:44:59顔が引きつってるぞ
0244デフォルトの名無しさん
2005/12/25(日) 01:01:55外は寒いんだし、人肌で暖めるくらいの温かさを持ってあげなよ
0245デフォルトの名無しさん
2005/12/25(日) 01:02:53質問する前にぐぐれw
0246デフォルトの名無しさん
2005/12/25(日) 01:05:400248デフォルトの名無しさん
2005/12/25(日) 01:11:05const CExtControlBar * CExtMiniDockFrameWnd::GetControlBarExt() const
関数の両方にconstがついてるけども、
左側は返り値に対してCONST。
だけども、右側のconstはどういう意味なの?
0249デフォルトの名無しさん
2005/12/25(日) 01:13:50こちらでどうぞ
http://pc8.2ch.net/test/read.cgi/tech/1133007604/
0250デフォルトの名無しさん
2005/12/25(日) 01:16:42どこにクロスの説明があるんだ?
0251デフォルトの名無しさん
2005/12/25(日) 01:24:26スレ違い
0252デフォルトの名無しさん
2005/12/25(日) 01:26:28「ユーザ」はその商品を使う人だろ。
プログラマじゃないよ。
0253デフォルトの名無しさん
2005/12/25(日) 01:28:56ある程度の説明をしてくれよ
クロスクロス言うんだから説明くらいしろよな
すれ違いなんて言って逃げないでさ
0254デフォルトの名無しさん
2005/12/25(日) 01:30:43晒しage
(・∀・)ニヤニヤ
0255デフォルトの名無しさん
2005/12/25(日) 01:31:460256デフォルトの名無しさん
2005/12/25(日) 01:32:35そんな事をやってるヒマがあったら説明しろって
お前に説明できる知識があるならな
0257デフォルトの名無しさん
2005/12/25(日) 01:32:35うぉぉ!!無防備宣言猫じゃん(*´д`*)
0258デフォルトの名無しさん
2005/12/25(日) 01:35:540259デフォルトの名無しさん
2005/12/25(日) 01:36:58無駄口たたかずに説明しろって
0260デフォルトの名無しさん
2005/12/25(日) 01:43:130261デフォルトの名無しさん
2005/12/25(日) 01:44:52お前がチキン野郎なのは理解できたが
寝るのはクロスの説明くらいしてからにしろ
0262デフォルトの名無しさん
2005/12/25(日) 01:45:110263デフォルトの名無しさん
2005/12/25(日) 01:50:140264デフォルトの名無しさん
2005/12/25(日) 01:51:540265デフォルトの名無しさん
2005/12/25(日) 03:30:100266初心者です。
2005/12/25(日) 04:27:53自分は初心者です。初歩的な質問ですいません。
どうか、教えてください。お願いします。
#include<stdio.h>
#include<string.h>
#define ALPHABET 5
int ans[ALPHABET], checked[ALPHABET];
void charge(int i){
int p, q;
if(i==ALPHABET) {
for(q=0; q<ALPHABET; q++)
printf("%c", ans[q]+'A');
printf("\n");
}
else{
for(p=0; p<ALPHABET; p++){
if(checked[p]==0) {
checked[p] = 1;
ans[i] = p;
charge(i+1);
checked[p] = 0;
}
}
}
}
main(){
printf("Aから%d個のアルファベットの順列を表示します。\n",ALPHABET);
memset(checked, 0, ALPHABET*sizeof(int));
charge(0);
return 0;
}
0267デフォルトの名無しさん
2005/12/25(日) 04:29:49とりあえず本でも買って読んでください。
0268デフォルトの名無しさん
2005/12/25(日) 04:41:52>>1読め。
課題なら次のスレへ移れ。ただしテンプレに従わねば無視。
C/C++の宿題を片付けます 56代目
http://pc8.2ch.net/test/read.cgi/tech/1135125328/
0269初心者です。
2005/12/25(日) 04:56:41わかりました。コメントありがとうございます。
0270デフォルトの名無しさん
2005/12/25(日) 17:21:27どなたか教えてください。よろしくお願いします。
0271デフォルトの名無しさん
2005/12/25(日) 17:23:000272デフォルトの名無しさん
2005/12/25(日) 17:24:540273デフォルトの名無しさん
2005/12/25(日) 17:25:260274270
2005/12/25(日) 17:31:15お騒がせしました。
0275デフォルトの名無しさん
2005/12/26(月) 11:04:560276デフォルトの名無しさん
2005/12/26(月) 11:08:08コピー:ファイルを右クリック→コピー→移動先で右クリック→貼り付け
0277276
2005/12/26(月) 11:09:470278デフォルトの名無しさん
2005/12/26(月) 11:18:530279278
2005/12/26(月) 11:19:310280デフォルトの名無しさん
2005/12/26(月) 11:23:45#強いて言えばsystem()があると言えなくはないが。
0281デフォルトの名無しさん
2005/12/26(月) 11:27:48ファイルをコピー・移動すればいい
0282デフォルトの名無しさん
2005/12/26(月) 11:39:23MS-DOSにはたしかコピーするのはないよ。自分でオープンしてやるか、
または system() で copy を使うしかないんじゃないかな。
Windows は API に CopyFile() というのがある。
0283デフォルトの名無しさん
2005/12/26(月) 11:42:350284デフォルトの名無しさん
2005/12/26(月) 11:46:000285デフォルトの名無しさん
2005/12/26(月) 11:54:22それ何に対する答えだ?
0286デフォルトの名無しさん
2005/12/26(月) 12:25:28int21 系列で FILE R/W はあったような気がするがコピーと移動はどうだったかなぁ・・・
0287デフォルトの名無しさん
2005/12/26(月) 12:35:22スレ違い
の一言で十分。
0288デフォルトの名無しさん
2005/12/26(月) 14:22:230289デフォルトの名無しさん
2005/12/26(月) 14:26:02標準は remove だ。しかも削除関数だ。
0290デフォルトの名無しさん
2005/12/26(月) 19:01:130291デフォルトの名無しさん
2005/12/26(月) 19:27:58対象がフォルダとかファイルが1ギガとかでもそれやる気かw
0292デフォルトの名無しさん
2005/12/26(月) 23:31:46マウントされているディスクが違う場合はやるしかないね
0293デフォルトの名無しさん
2005/12/26(月) 23:48:26291氏は同一ディスク内でもそうするのかと聞いているようだが?
別に1ギガが1キロでもファイルのサイズがディスクの残り容量を切っていれば問題ありありだね
ハードリンクやシンボリックリンクができる処理系でご丁寧にコピーだの移動だのやってたらアフォだし
0294デフォルトの名無しさん
2005/12/27(火) 00:22:590295デフォルトの名無しさん
2005/12/27(火) 00:37:28そもそもユーザ定義関数を非標準だから使いたくないという主張は
巨大 main 関数ばかり書いている者の独りよがりにしか見えない
0296デフォルトの名無しさん
2005/12/27(火) 01:03:24標準Cには、ファイルと言う概念自体がない。
よって>>287が正しい。
0297デフォルトの名無しさん
2005/12/27(火) 02:53:470298ハル
2005/12/27(火) 10:07:20例)20051227→2+0+0+5+1+2+2+7=19
1+9=10→1+0=1で終了
0299デフォルトの名無しさん
2005/12/27(火) 10:12:580300デフォルトの名無しさん
2005/12/27(火) 10:25:23入力された数字の各々の桁を足し、結果を返す関数を作成
数値入力
↓
桁足し関数←────────┐
↓ NO │
結果は10より小さいか? ───┘
│
↓YES
終了
0301デフォルトの名無しさん
2005/12/27(火) 10:27:05宿題スレに回答がw
>>298
マルチすなや。
0302デフォルトの名無しさん
2005/12/27(火) 10:27:52え、えっち!
0303デフォルトの名無しさん
2005/12/27(火) 10:52:08ないのはディレクトリじゃないか?
0304デフォルトの名無しさん
2005/12/27(火) 11:32:08で開くとわけの分からない文字が並んでいますよね、それをコンパイル前の
状態に戻すことは可能でしょうか?
0305デフォルトの名無しさん
2005/12/27(火) 11:32:58不可能
0306デフォルトの名無しさん
2005/12/27(火) 11:44:410307デフォルトの名無しさん
2005/12/27(火) 11:46:420308デフォルトの名無しさん
2005/12/27(火) 11:56:34#include <stdio.h>
#include <windows.h>
#define N 1234
int start_time, end_time;
int main(void)
{
int i, j, k;
start_time = timeGetTime();
i = N * 13;
j = 2 * 2 * 2 * 2 * 2 * 2;
k = i % j;
end_time = timeGetTime(); /*終了時刻取得*/
printf("X%x\n", k);
printf("時間:%5d ミリ秒\n",end_time - start_time);
return 0;
}
このようなgettime関数を入れたプログラムを実行すると
time1.obj : error LNK2001: 外部シンボル "__imp__timeGetTime@0" は未解決です
time1.exe : fatal error LNK1120: 外部参照 1 が未解決です。
というエラーが出てきてしまいました。調べたんですが分からなかったのでどういう状態なのでしょうか?
0309デフォルトの名無しさん
2005/12/27(火) 12:03:210310デフォルトの名無しさん
2005/12/27(火) 12:05:17while ( a < 0 || a > 9999 ) {
scanf ( "%d" , &a ) ;
}
とあるのですが、これを
while ( ( a <= 9999 ) AND ( a >= 0 ) ) {
scanf ( "%d" , &a ) ;
}
と書いても動作としては同じになると思うのですが、上の書き方のほうが一般的なのでしょうか?
上の文が難しくて理解しにくかったので質問してみました。
0311デフォルトの名無しさん
2005/12/27(火) 12:10:35上と下とで意味が逆だから
上式をドモルガンの定理で変形した式を否定した式が下式
0312デフォルトの名無しさん
2005/12/27(火) 12:13:27おもいっきり処理系依存でスレ違いだがwinmm.libをリンクしてみよう。
0314デフォルトの名無しさん
2005/12/27(火) 12:15:22リファレンスくらい見ろよ
0315デフォルトの名無しさん
2005/12/27(火) 12:15:44また修行しなおしてきます、お返事ありがとうございました
0316デフォルトの名無しさん
2005/12/27(火) 12:28:15C言語には AND というのはありません。使えたとしたら多分 && に define されているマクロです。
0317310
2005/12/27(火) 12:51:56確かにANDはなくて&&でした。。下は自分で勝手に書いてみた文です。
ドモルガンの定理とか・・もうあまり記憶がない状態ですが、数学も勉強しないと
0318デフォルトの名無しさん
2005/12/27(火) 12:56:47それ、数学じゃないから。
ちょっとした頭の体操だから、数学の知識がなくても理解できるよ。
(a である かつ b である)でない
(a でない または b でない)
この2行の意味が同じだってことだけだから。
0319デフォルトの名無しさん
2005/12/27(火) 12:59:10>318の a と b は、>310の場合はそれぞれ、
変数aの値が0以上、変数aの値が9999以下
と考えればいいね。
#a, b 逆でもいいけど。
0320デフォルトの名無しさん
2005/12/27(火) 13:01:54> (a である かつ b である)でない
> (a でない または b でない)
わかり易くて感動して泣いた
0321310
2005/12/27(火) 13:07:49ようやくわかったような気がします。頭の体操とかひらめきでしょうかね・・
続けていけば慣れていくと信じて頑張っていきます
みなさん教えてくださってありがとうございました
0322デフォルトの名無しさん
2005/12/27(火) 13:10:28少し余談だけど範囲の検査の時は、
変数は右に置いたほうが分かりやすい時があるよ。
上の式なら
a < 0 || 9999 < a
下の式を上と同じ意味に表すと
!( 0 <= a && a <= 9999)
こうやって書いておけば見た瞬間に意味が分かるからお勧め
0323デフォルトの名無しさん
2005/12/27(火) 13:17:30参考になって最高です。
0324デフォルトの名無しさん
2005/12/27(火) 13:28:04私は反対。少なくとも私には変数は常に左の方がわかりやすい。
・aが0より小さいかaが9999よりおおきい
・aが0より小さいか9999がaより小さい
0325デフォルトの名無しさん
2005/12/27(火) 13:30:45日本語でコード書いてるの?アホ?池沼?
ま、両者とも好き嫌いが別れるのは確かだとは思うけど
0326318=319=324
2005/12/27(火) 13:35:01こういう論理式は記号で書くよりは判り易いでしょ。
>>325
単純なときは視覚情報のまま理解できるだろうけど、
複雑になってくると結局読んで理解するしかないと思う。
その過程で、頭の中では斯くの如く処理すると思うのだけど。
#>325のように直感でプログラムを読むことを否定はしない。
まぁ、三田某みたいな条件式の書き方を勧められるよりはましだけど。
0327デフォルトの名無しさん
2005/12/27(火) 13:36:48プログラムをやって欲しくないもんだな。
0328322
2005/12/27(火) 13:39:51確かに上と下の式はそうやってバラバラに読むと読みにくい。
でもどちらかというと、
この式を数直線を表現してるやりかたなので、
バラバラに読むのではなくて、
0 <= a <= 9999
をCで表現したものと考えて式全てを纏めて一単位として読めば分かりやすいと思う。
とは言っても個人差があるから強制はしないけどね
0329デフォルトの名無しさん
2005/12/27(火) 13:40:170330デフォルトの名無しさん
2005/12/27(火) 13:42:020331318=319=324
2005/12/27(火) 13:46:12数直線だけが条件判定じゃないでしょ。
つーか、>322でも条件を真偽逆にするたびに左辺と右辺を入れ替えることになるわけだよね。
#まぁ、C++を考慮に入れなきゃいけないわけでもないし、直線的にしか考えられないならそれは構わないけど。
0332デフォルトの名無しさん
2005/12/27(火) 13:55:020333デフォルトの名無しさん
2005/12/27(火) 14:07:13なんで?
0334322
2005/12/27(火) 14:17:31保守のとき、他の人がその部分を見ただけで
= と == を間違える、初心者が書いたと分かるのが最大の利点。
書いた人が初心者と分かれば、
警戒してソースを読むので、バグ発見率が上がり、
バグが発生しにくくなる。
0335デフォルトの名無しさん
2005/12/27(火) 14:24:18a == 10 を a = 10 と書いてしまうバカの救済策の話ね
10 = a と書いたらエラーになるのが利点らしい。
ちなみに、この話題の後半は
「両方が変数の時に使えないから、その方法は破綻している」
と誰かが言うのが恒例の話の流れ。
0336デフォルトの名無しさん
2005/12/27(火) 14:25:30#恒例の流れから外してみた。
0337デフォルトの名無しさん
2005/12/27(火) 14:29:100338デフォルトの名無しさん
2005/12/27(火) 14:36:01なーるほど!時々やらかすねそれはw
勉強になります。
0339デフォルトの名無しさん
2005/12/27(火) 14:45:47そもそも代入演算子が=なのが問題の一端。
Pascalみたいに代入は:=にするとか別の演算子にして比較を=にしろ。
万が一間違えると探すのが大変だから値は全て左辺にするのが常識。
そんな間違いするのは素人だけ
両辺が変数(r
#よくある議論ダイジェスト版
0340デフォルトの名無しさん
2005/12/27(火) 14:48:45>数直線だけが条件判定じゃないでしょ。
大小関係に限った話だが?
大小関係ってのは一次元的なものにしか適用できない概念だ。
文字列の大小関係にしろ何にしろ、
数直線的なものを考えることが出来る。
そうでない場合、その演算子オーバーロードが妥当なものなのか疑ったほうがいいし、
それが大小関係という意味からやむなく逸脱しているのであれば、
その場合は数直線を考える必要はない。
>つーか、>322でも条件を真偽逆にするたびに左辺と右辺を入れ替えることになるわけだよね。
真偽を頻繁に逆にする状況って何??
それに、>322 は変数を内側に書くようにして、
あとは ! の有無で切り替えようと言ってるわけで、
真偽を逆にするたびに ! の有無が変わるだけだ。
0341デフォルトの名無しさん
2005/12/27(火) 15:09:24線形代数の単位取り直して来い。
0342デフォルトの名無しさん
2005/12/27(火) 15:30:13行列もやってないし、どうすればいいの・・・。
0343デフォルトの名無しさん
2005/12/27(火) 15:34:49小卒の俺が言うんだから間違いない
と信じたい
0344デフォルトの名無しさん
2005/12/27(火) 15:37:38義務教育を受けてください
0345306
2005/12/27(火) 15:39:530346デフォルトの名無しさん
2005/12/27(火) 16:56:23じゃあ多次元での大小関係って何よ?
0347デフォルトの名無しさん
2005/12/27(火) 17:59:24おまいら、なに難しい話してんだ?
わかりやすく言ってくれよ。
0348デフォルトの名無しさん
2005/12/27(火) 18:03:43では二次元以外の多次元ではどうなのか
こんなところ
0349デフォルトの名無しさん
2005/12/27(火) 18:57:00<ios646.h>にはandがあるんだな。
0350デフォルトの名無しさん
2005/12/27(火) 19:00:21and と AND はCでは違うくね?
0351デフォルトの名無しさん
2005/12/27(火) 19:27:040352だれもわからなかった
2005/12/27(火) 21:01:23この関数の中身の意味がわかりません。
どなたか細かく流れをおしえていただけないでしょうか。(#define以外わからない)
↓delay.cのソース
#ifndefXTAL_FREQ
#defineXTAL_FREQ 4MHZ/* Crystal frequency in MHz */
#endif
#defineMHZ*1000L//なぜアスタリスク?/* number of kHz in a MHz */
#defineKHZ*1/* number of kHz in a kHz */
#ifXTAL_FREQ >= 12MHZ //ifってなに?
#defineDelayUs(x){ unsigned char _dcnt; \ //\ってなに?改行?
_dcnt = (x)*((XTAL_FREQ)/(12MHZ)); \
while(--_dcnt != 0) \
continue; }
#else //不明
#defineDelayUs(x){ unsigned char _dcnt; \
_dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; \
while(--_dcnt != 0) \
continue; }
#endif
extern void DelayMs(unsigned char);
0353デフォルトの名無しさん
2005/12/27(火) 21:04:340354デフォルトの名無しさん
2005/12/27(火) 21:05:36入門書買って勉強してから来い。
そんなレベルの質問を毎回する心算か?
0355だれもわからなかった
2005/12/27(火) 21:10:23そんなレベル!??まじっすか??これって簡単なの!?
0356デフォルトの名無しさん
2005/12/27(火) 21:14:000357デフォルトの名無しさん
2005/12/27(火) 21:21:41> #ifndef XTAL_FREQ
> #define XTAL_FREQ 4MHZ/* Crystal frequency in MHz */
> #endif
XTAL_FREQがまだ定義されていなければ(#ifndef)XTAL_FREQを4MHZと定義する。
#ifとか#ifndefは#endifで閉じる。
> #define MHZ *1000L//なぜアスタリスク?/* number of kHz in a MHz */
> #define KHZ *1/* number of kHz in a kHz */
その*は×(乗算)。100MHZと書くと100*1000Lと置き換えられる。
> #if XTAL_FREQ >= 12MHZ //ifってなに?
#ifは「もし〜だったら」。中学英語。
> #defineDelayUs(x){ unsigned char _dcnt; \ //\ってなに?改行?
> _dcnt = (x)*((XTAL_FREQ)/(12MHZ)); \
> while(--_dcnt != 0) \
> continue; }
\はマクロを複数行に分けて書きたいときに使う。
> #else //不明
この#elseは(上の)#ifとセット。elseが分からないとは言わせない。
そのくらいか?
0358デフォルトの名無しさん
2005/12/27(火) 21:22:35ついでに言うとスレ違いだから
0359だれもわからなかった
2005/12/27(火) 21:51:24解説ありがとう。
MHZ *1000Lっていう定義は初めて知りました。MHZ 100なら知っていたのですが・・
12MHZみたいな書き方がゆるされるとは・・・
>>358すまん
0360デフォルトの名無しさん
2005/12/27(火) 21:59:11#include <stdio.h>
/* トークンペースト */
#define _TPA(X) L ## X
typedef wchar_t TCHAR ;
int main (void)
{
TCHAR szFormat[] = _TPA ("天皇陛下万歳: %d byte\n") ;
wprintf (szFormat, sizeof szFormat) ;
return 0 ;
}
上の例で「天皇陛下万歳」を抜き取ると表示されるけれども日本語を一言でも入れると表示されないのはなぜでしょうか。
0361デフォルトの名無しさん
2005/12/27(火) 22:17:40なぜこんなことが必要なのか MSDN をみてもよくわかりませんでしたが。
0362デフォルトの名無しさん
2005/12/27(火) 22:50:33wprintfなどCライブラリのワイド文字入出力の入出力時には全てマルチバイト文字へ変換している。
だからsetlocaleなどで日本語(Shift-JIS)を使うと明示してやらないといけない。
0363だれもわからなかった
2005/12/27(火) 23:03:47void DelayMs(unsigned char cnt)で引数を受けとる。例えば引数が250なら
DelayMs(250)となる。
#if XTAL_FREQ <= 2MHZ
do {
DelayUs(996);
} while(--cnt);
#endif
これはXTAL_FREQが4MHZと定義されているので4MHZ<=2MHZとなる。
#ifなのでこの条件を満たしているときdo while文を実行する。今回は満たしていないので実行しない
(XTALを4MHZと定義しておきながらなぜこんな意味のないdo while文が?)
#if XTAL_FREQ > 2MHZ
unsigned chari;
do {
i = 4;
do {
DelayUs(250);//ここらの解釈がまちがっているのだろうか?
} while(--i);
} while(--cnt);
#endif
//4MHZ>2MHZだから上を実行する。cntに250が入っているとすると--250で1づつ減らす(do whileを250回実行する?しかし中のdo whileはi=4で4回しか実行できない?DelayUs(250)関数の中身をみると
_dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; \while(--_dcnt != 0) \continue; }なので(x)に250を渡し
て250/3になるので83.33になる。??あと/(XTAL_FREQ))|1;←の|1;ってバグ??このプログラムはmain.cでDelayMs(250);と呼び出せば0.25秒遅らせる関数なのですがどう考えても83.33にしかなりません。だれか詳しいアドバイスお願いいたします。
0364デフォルトの名無しさん
2005/12/27(火) 23:38:19その CPU は 83 回空ループすると 250 us になるんだろう。
この手のコードは 2 年前くらいはよく見たが、まだ使われてるのか?
頼むから入門書の一冊も読んできてくれ。
0365デフォルトの名無しさん
2005/12/27(火) 23:38:57頼みますから、C言語の常識的な部分ばかり質問しないでください。
そんな単純な話は自分で入門書でも読めば分かるでしょうに。
とだけ言うのもなんだから、
上は996us * cntのwait
下は250us * 4 * cntのwait
どちらも大体、cnt * 1000us(cnt * 1 ms)のwaitをしている。
んで、 |1 の部分はビット論理和、ループ回数を非ゼロにするためにしている
たとえば、xに0を送り込まれると、
それをしないと(そのソースだと)無限ループに陥る。
関数そのものは推測だけど、単にビジーループでwait取ってるだけ。
こんな簡単なことは質問しなくてもソース読めば分かるでしょ?
次からは自分でソース読んで理解しろよ。
0366デフォルトの名無しさん
2005/12/27(火) 23:41:59×2 年前
○20 年前
0367デフォルトの名無しさん
2005/12/28(水) 09:04:47単なるソフトウェアウェイト。
CPUクロックに合わせて実装を分けているだけに過ぎない。
0368デフォルトの名無しさん
2005/12/28(水) 17:51:430369デフォルトの名無しさん
2005/12/28(水) 17:54:080370デフォルトの名無しさん
2005/12/28(水) 17:56:06どういうときに使うと便利でしょうか?
0371デフォルトの名無しさん
2005/12/28(水) 18:00:470372デフォルトの名無しさん
2005/12/28(水) 18:05:25何が自己解決したんだ? ここはIDなし掲示板だから何が解決したのか全く分からんぞ。
0374368
2005/12/28(水) 18:25:55配列で事足りるものが多いし、、。
0375デフォルトの名無しさん
2005/12/28(水) 18:31:55なんだそれ?
0376デフォルトの名無しさん
2005/12/28(水) 18:34:340377デフォルトの名無しさん
2005/12/28(水) 18:36:25↓
0378デフォルトの名無しさん
2005/12/28(水) 18:40:140379デフォルトの名無しさん
2005/12/28(水) 18:41:53IEに戻るボタンついてるやろ?あれのことやで
0380デフォルトの名無しさん
2005/12/28(水) 18:51:350381デフォルトの名無しさん
2005/12/28(水) 18:52:050382デフォルトの名無しさん
2005/12/28(水) 20:33:540383STRTOK代用
2005/12/28(水) 22:07:52わたしはこの度string.hのstrtokという関数の使い勝手に
問題があったので適応に必要なだけの機能を実現する
サブルーチンを作りました。それが以下です
0384STRTOK代用
2005/12/28(水) 22:10:36/***********************************************
* TABで区切られた文字列から
* 2単語目を返す。
* 入力:文字列(str)
* 出力:文字列ポインタ
*
* ヘッダ:string.h,stdio.h
***********************************************/
int i,j=0;
char out[30],*p;
while(str[j]!='\t'){/*str[]の内容がTABじゃない間j++*/
j++;
}
while(str[j]=='\t'){/*str[]の内容がTABでもj++*/
j++;
}
for(i=0;str[j]!='\0';i++,j++){/*2単語目についたのでコピー開始*/
out[i]=str[j];
}
/*出力確認用のputs。確認するとoutの尻にごみがついている*/
puts(out);
/*この辺の出力をどうしていいのか*/
return ;
}
0385STRTOK代用
2005/12/28(水) 22:12:12こんな感じのプログラムなのですが出力をreturnをどうしていいのか
わからずに質問させていただきました。作り始めたときのイメージは
ポインタで出力して、それを使えばいいと思ったのですが
どうもうまくいきません。
質問1、どうやったらOUTにごみがつかない様にするか。
質問2、出力の仕方はどうするか。
赤ペン先生、添削お願いします!糞単純なプログラムですいません!
0386デフォルトの名無しさん
2005/12/28(水) 22:13:230387デフォルトの名無しさん
2005/12/28(水) 22:15:45最後にゴミが出るのはnul文字をoutにコピーしていないから。
あとは、outは関数の引数で受け取る形にして、最後に
return out;にでもすれば良いんじゃないの。
0388387
2005/12/28(水) 22:22:57#include<stdio.h>
char *extract2(char str[],char out[]){
*out='\0';sscanf(str,"%*[^\t]%*[\t]%s",out);
return out;
}
int main(){
char out[30];
char*p=extract2("Hello\tWorld",out);
puts(p);
}
0389デフォルトの名無しさん
2005/12/28(水) 22:44:42コピーせずにポインタだけ返したほうが良くね?
char *extract2(char*str){
while(*str&&*str!='\t')++str;
while(*str=='\t')++str;
return str;
}
#include<stdio.h>
int main(){
char*p=extract2("Hello\tWorld");
puts(p);
}
0390デフォルトの名無しさん
2005/12/29(木) 00:16:003単語以上あったらどうすんだ?
0391デフォルトの名無しさん
2005/12/29(木) 00:50:180392デフォルトの名無しさん
2005/12/29(木) 00:56:160393デフォルトの名無しさん
2005/12/29(木) 01:04:320394STRTOK代用
2005/12/29(木) 01:08:42388さん389さん大変参考になりました。
ありとうございます^^
390さん、確かにそうなんですが今回は
1234 3445
1123 4545
5928 8523
みたいな内容が書いてあるファイルの右の列の
内容を取り込みたかったもので^^ではありがとうございました〜^−^
0395デフォルトの名無しさん
2005/12/29(木) 01:14:56検索かけたが該当なし。諦めろ、少なくともここではない。
0396デフォルトの名無しさん
2005/12/29(木) 03:31:51EZ-USBでやろうと四苦八苦してます。
EZ-USBのサンプルソースがVBで書かれていて
どーにもよく分かりません。
C言語で書く場合
ドライバのオープンはどうやればよいのでしょうか?
API名(関数)でもいいのでどなたか教えてください。
VBではCreateFile()を使ってオープンしてました。
0397デフォルトの名無しさん
2005/12/29(木) 03:33:21USBの制御をC言語でやろうとしてます
>>EZ-USBでやろうと四苦八苦してます。
0398デフォルトの名無しさん
2005/12/29(木) 03:35:540399デフォルトの名無しさん
2005/12/29(木) 03:38:20CreateFileでいけるんでしょうか?。
VBではCreateFileの第一引数にUSBドライバーの名前を指定していました。
0400デフォルトの名無しさん
2005/12/29(木) 03:40:550401デフォルトの名無しさん
2005/12/29(木) 06:06:05激しくスレ違い。WinAPIスレにでもどうぞ。
http://pc8.2ch.net/test/read.cgi/tech/1107946285/
http://pc8.2ch.net/test/read.cgi/tech/1118781438/
http://pc8.2ch.net/test/read.cgi/tech/1133485684/
http://pc8.2ch.net/test/read.cgi/tech/1133798345/
0402ビル・ジョブス
2005/12/29(木) 19:28:01VBからCreateFile()してるなら、それをそのまま使えばいいわけだし。
CreateFile()ってWIN32APIだから、VBでもCでも使えるってところ分かりますか?
文字列とか少しウザイけど、それはVBならではの問題だからCならもっとエレガントに
記述できるはず。
とりあえず、サンプルソース張ってみそ?だれかがCに変換してくれるよ。
0403デフォルトの名無しさん
2005/12/29(木) 19:30:59ここは、誰かがCに変換するスレじゃねぇよ
0404デフォルトの名無しさん
2005/12/29(木) 19:45:51コラコラ!ビル様になんて口の利き方してんだ!
そのお方は、このスレのPart1の1であるぞ。
0405デフォルトの名無しさん
2005/12/29(木) 19:47:40そうとんがってやるなって
頭悪・・・いやど低脳スレから帰ってきたばかりで
すぐには回復できないだろうに
0406デフォルトの名無しさん
2005/12/29(木) 22:28:20aho=0,
manko,
chinko
};
enum NURUPO a;
a=5;
とかしたらコンパイラでエラーなん?
0407デフォルトの名無しさん
2005/12/29(木) 22:35:32int wall[2];
というところを
int afr = 2;
int wall[afr];
という風に宣言しようとしたんですが、エラーが出ます。
状況によってafrの値を変えて配列を作る時の要素の数を変えたいんですが、何かいい方法ありますか?
0408デフォルトの名無しさん
2005/12/29(木) 22:40:49malloc
0409デフォルトの名無しさん
2005/12/29(木) 22:40:56方法2.mallocで動的にメモリアロケートする。
方法3、C++ std::vectorを使う。
0410デフォルトの名無しさん
2005/12/29(木) 22:41:14それは、C99という最新の(しかしほとんど無視されている)C言語では
認められているが、C89という古い(しかし事実上未だ標準の)C言語では
認められていない。よってほとんどのコンパイラはそれを受け付けない。
解決法はmalloc()を使うこと。ただし<stdlib.h>をincludeすること。
0412デフォルトの名無しさん
2005/12/29(木) 22:48:38やってみたらいいじゃん
0413デフォルトの名無しさん
2005/12/29(木) 22:50:13freeするの忘れないようにね(・∀・)
0414デフォルトの名無しさん
2005/12/29(木) 22:59:29malloc()だけ調べていたら見落とすところでした。ありがとうございます。
参考書のポインタのところもっかい見直さないと(^ ^;)
0415デフォルトの名無しさん
2005/12/29(木) 23:20:47その上位の関数で利用したいのですが、セグメンテーションフォールトになります。
何か良い方法はないでしょうか?
以下はプログラムの概要です。
関数hogeはreturnを使用しない方向でお願いします。
int *foo;
void hoge (int * fuga)
{
fuga = foo;
}
int main()
{
int *fuga;
foo = (int *)malloc(int);
*foo = 1;
hoge (fuga);
printf("fuga=%d\n",fuga);
}
0416デフォルトの名無しさん
2005/12/29(木) 23:23:26ポインタのポインタを使おう。
int *foo;
void hoge (int ** fuga)
{
*fuga = foo;
}
int main()
{
int *fuga;
foo = (int *)malloc(sizeof(int));
*foo = 1;
hoge (&fuga);
printf("fuga=%d\n",*fuga);
}
0417デフォルトの名無しさん
2005/12/29(木) 23:24:580418デフォルトの名無しさん
2005/12/29(木) 23:44:20即レス、ありがとうございます
プログラムがうまく動作しました。
0419デフォルトの名無しさん
2005/12/29(木) 23:59:57C 自体のスキルはともかく質問は上手だ
自分が書いてるコードそのものをこんなとこに晒すような大ボケをかまさず
これ以上ないってレベルまで問題を抽出・単純化してるだろ
おまえさん、何で返却値を void に拘ってるのかも察してやれなかったんか?
0420デフォルトの名無しさん
2005/12/30(金) 00:05:56環境によってはalloca()という関数が用意されている場合もある
0421デフォルトの名無しさん
2005/12/30(金) 00:16:55>返却値を void に拘ってる
の理由が解らない。
0422デフォルトの名無しさん
2005/12/30(金) 00:24:240423デフォルトの名無しさん
2005/12/30(金) 00:35:41>これ以上ないってレベルまで問題を抽出・単純化してるだろ
だとしても滅茶苦茶な糞コードだよ。これは。
0424デフォルトの名無しさん
2005/12/30(金) 00:44:09どうもです
すれ違い 誘導 されたのでそっちで聞いてみます。
0425デフォルトの名無しさん
2005/12/30(金) 01:01:50環境は
BYTE = 2byte
char = 1byte
です。
struct A
{
char i[2];
char o[1];
};
--
printf("%d", sizeof(struct A) )で、3と表示されました
struct B
{
short i;
char o[1];
};
--
printf("%d", sizeof(struct B) )で、4と表示されました。
何ででしょうか?
構造体の中の、一番でかい型で、切られてくんでしょうか?
0426デフォルトの名無しさん
2005/12/30(金) 01:06:50正月用だよな?
0427デフォルトの名無しさん
2005/12/30(金) 01:08:31http://www1.kcn.ne.jp/~robe/cpphtml/html03/cpp03014.html
0428デフォルトの名無しさん
2005/12/30(金) 01:16:11mallocなんて使うのやめといたほうがイイヨ。
リスクもコストも高いし、可読性悪いよ。
素直に代入しなよ。
漏れは、a[2] = {x,y};派だけど。
0429デフォルトの名無しさん
2005/12/30(金) 01:17:48int a[afr]か。。すまそ。
読解力なさを露呈しました。
0430デフォルトの名無しさん
2005/12/30(金) 01:18:240432デフォルトの名無しさん
2005/12/30(金) 01:48:430433デフォルトの名無しさん
2005/12/30(金) 10:21:070434デフォルトの名無しさん
2005/12/30(金) 10:21:540435デフォルトの名無しさん
2005/12/30(金) 14:59:09〇→●
●←〇
分かったか?
以上。
0436デフォルトの名無しさん
2005/12/30(金) 15:16:31すぺしゃるさんくす
0437デフォルトの名無しさん
2005/12/30(金) 15:23:240438デフォルトの名無しさん
2005/12/30(金) 15:35:50\r
0439デフォルトの名無しさん
2005/12/30(金) 15:44:32サンクス
0440デフォルトの名無しさん
2005/12/30(金) 16:07:43○→●→◎→▲
← ← ←
こうじゃないか?
0441デフォルトの名無しさん
2005/12/30(金) 16:26:34next -> next -> next
prev <- prev <- prev
0442デフォルトの名無しさん
2005/12/30(金) 16:27:40next-> next-> next
prev <-prev <-prev
0443433
2005/12/30(金) 16:37:41データ入力→メモリ確保→作業用構造体にデータ挿入→チェインにぶっつなげる
の繰り返しか
0444デフォルトの名無しさん
2005/12/30(金) 21:19:440445デフォルトの名無しさん
2005/12/31(土) 14:46:210446デフォルトの名無しさん
2005/12/31(土) 14:51:43って言うか状況分からなさ杉。
0447デフォルトの名無しさん
2005/12/31(土) 15:18:32状況はループ中の最後の1文でただcontinue;と書いてあるだけっす。
どんな意味があるのかわからんとです。そこに到達すれば自動的に
先頭に戻るのになぜ??って感じです。
0448デフォルトの名無しさん
2005/12/31(土) 15:34:000449デフォルトの名無しさん
2005/12/31(土) 15:38:45適当な処理
continue;
}
こんな感じですよ?俺には意味がわかりませぬ。。。
0450デフォルトの名無しさん
2005/12/31(土) 15:42:26すまんが、何を言いたいのか理解できない?
君の言いたいことの動作をする最小のソースコードを教えてくれ。
continueのあるなしじゃ動作は代わらんとおもう。
>>449
その場合ならcontinueのある無しでは何も動作が変わらない。
たぶん、書いた人の趣味かと。
気にせず無視で構わないと思う。
0451デフォルトの名無しさん
2005/12/31(土) 15:43:220452魚チョコ
2005/12/31(土) 15:45:090453デフォルトの名無しさん
2005/12/31(土) 15:45:51それ聞いて安心しました。
>>451
ハイセンスなコーディング規約っすね('A`)
0454魚チョコ
2005/12/31(土) 15:53:53コメントをつけることならよくあるな
} // end sw
} // end for
} // end if
} // end while
} // end if
} // end function
このときどうーしても switch を sw に略してしまう……
0455デフォルトの名無しさん
2005/12/31(土) 18:04:44typedef struct TINKO
{
int dopyu
};
int main( void )
{
TINKO binbin;
binbin.dopyu = 1;
return 0;
}
manko.c(6) : warning C4091: 空白の宣言が見つかりました。
という警告が出てしまいます。
なぜですか?
0456デフォルトの名無しさん
2005/12/31(土) 18:08:30typedef struct TINKO
{
int dopyu
} TINKO; ←これが抜けてる
0457デフォルトの名無しさん
2005/12/31(土) 18:09:040458デフォルトの名無しさん
2005/12/31(土) 18:30:220459デフォルトの名無しさん
2005/12/31(土) 19:19:01私も経験があるが、ソースって結構コピペしながら作るだろ?
そんで時々コピペに失敗して実害無いからテストで見逃してしまうんだよ。
カウンターアップを・・とか言っている香具師っていったい・・。
0460デフォルトの名無しさん
2005/12/31(土) 21:37:17もしかして、出力されるコードに違いが出てるのかな?
試しに continue ありとなしのオブジェを逆汗してみるとか
0461デフォルトの名無しさん
2006/01/01(日) 09:27:370462デフォルトの名無しさん
2006/01/01(日) 09:31:360463デフォルトの名無しさん
2006/01/01(日) 09:51:110464デフォルトの名無しさん
2006/01/01(日) 10:19:020465デフォルトの名無しさん
2006/01/01(日) 10:41:02それは主観なんで何とでも言えちゃうね
フローチャートは俺の世代では誰にでも通じる共通語
PAD は俺んとこでは採用してないんで今使えって言われたらたぶん「使いづらい」
0466黒猫は工業高校生
NGNG私はフローチャートのほうが使い良いと思う
フローチャートしか使わないからなぁ・・・
0468黒猫は工業高校生
NGNGいえいえ、こちらこそ
0469デフォルトの名無しさん
2006/01/01(日) 13:19:12for文中のcontinueでループカウンタがカウントアップされなくなったらそれこそ一大事だよ。
0470デフォルトの名無しさん
2006/01/01(日) 18:02:120471デフォルトの名無しさん
2006/01/01(日) 19:09:500472デフォルトの名無しさん
2006/01/01(日) 19:28:08場合によっては goto 使わないと非常に見辛いものになる。
try catch があればもっと素直に書けるのに、と過去に何度思ったことか。
0473デフォルトの名無しさん
2006/01/01(日) 20:12:290474デフォルトの名無しさん
2006/01/01(日) 21:10:430475デフォルトの名無しさん
2006/01/01(日) 21:39:16御意
break は使うやつとかな
0476魚チョコ
2006/01/01(日) 22:02:34main()
{
int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;
o100: printf("Hell of world ! ");
o110: goto o100;
o120:
:
}
先頭が数字じゃだめなので何を先頭にするかちょっと悩んだ記憶がある。
で……やりすぎて当時の貧弱なコンパイラの制限にひっかかり、計画をだいぶ縮小して実現、しかしラベルをつけていい行とだめな行の区別がつかなくて苦しかったねえ。
結局Cのいい勉強になったようん。
0477デフォルトの名無しさん
2006/01/01(日) 23:51:220478名無し et al.
2006/01/02(月) 00:35:53研究室のプロジェクトでCを使った解析を行っています。OSはDevian Linux (型番は忘れました0
非常に複雑な計算をするため、いくつも再帰ループを使い(そのうち多くはIF文です)syntadxエラーも
でないで、コンパイル (gcc -lm) には成功しました。また、セグメンテーションエラーもでていないことからメモリ
ーにまつわる問題もクリアしたと思います。
ただ、計算の途中で"Terminated"というメッセージが出てきて、計算が途中で止まってしまいます。
自分では計算時間が長いため(一時間以上、もっと)アイドル時間が過ぎてしまってエラーが出ると考
えているのですが、他に何かお心当たりのある方いらっしゃいませんでしょうか。
どういう風な原因でエラーメッセージが出るのかというのが一点と、どうすれば回避できるのか(出来
れば)お聞きしたいと思っています。
以上、よろしくお願いします。
0479デフォルトの名無しさん
2006/01/02(月) 00:42:14Devian ってことは stable が存在しない OS だよな
Segmentation Fault は、C の規約の中では undefined behavior に含まれる動作であり、そもそも出る保証すらないんで
出ないという観測事実は、異常がないという結論の根拠とできない
何か、口調からしていきなりシステムテストを始めて通らないからってパニクってるご様子だが
単体テストをしっかりやって、「ここまでは少なくともマトモだったはず」という足場をかためる方針でないと
おもちゃの域を出たコードは、断言するけど「絶対に書けない」ぞ
0480デフォルトの名無しさん
2006/01/02(月) 00:59:05単に端末が落ちてるって話かな? それなら定期的にEnterキーでも叩くか
バックグランドでechoをsleep挟んでループさせるとかしてみたらどうだろ。
スタックオーバフローならそういうメッセージが出ると思うけど、それなら再帰回数を極端に減らせば発生しないはず。
システムごと落っこちているような書き方じゃないから違うと思うけど、そうならプログラムの問題じゃないし。
要はまぁ、もう少し判るように書いてくれと。
#syntadxエラーってなんだとかね。
0481デフォルトの名無しさん
2006/01/02(月) 01:13:14ターミナルでulimit(もしくは limit)コマンド打ってみて、
cpu time とかメモリとかに制限がないか確かめてみれ。
その制限に引っかかってるようならそれが原因なんで、
制限設定を変えるべし(その方法に関してはスレ違いの話題)。
そうでなければ・・・よく分からん。
0482名無し et al.
2006/01/02(月) 02:00:05出来るだけ詳しく書いたつもりですが行き届かなかった点があると思います。
Syntadxエラーですが、syntaxエラーの間違いでした。
システム全体は落ちていないと思います。エラーが出た後は普通に応答を受け付けるので。
皆様のお話を総合すると、応答がなかったので端末が落ちたのか、cpu time
もしくはメモリに制限があって、おかしなことになったのかどちらかの可能性が高いと思います。
今週初めに、部分分で分割して、limitコマンドを打ってみて、どのくらいの負荷だと
臨海値なのか調べたいと思います。
ところで、"Terminated"というエラーが出た方は他にいらっしゃいますか?
さっき、Googleで調べましたが、killを使って強制終了するケースは多いのですが
強制終了させられるケースは稀だったので。
いずれにせよ、コードをもっとシンプルにする方が先決なようですね。
では、近いうちにご連絡します。
ではでは。
0483デフォルトの名無しさん
2006/01/02(月) 02:07:500484デフォルトの名無しさん
2006/01/02(月) 02:13:10どこへ行けと誘導しがたい
0485デフォルトの名無しさん
2006/01/02(月) 02:19:44Terminatedがどうとかそんな話題はスレ違いです
出て行ってください
0486デフォルトの名無しさん
2006/01/02(月) 02:28:37ってことは相手サーバから切断されたんじゃないの?
0487デフォルトの名無しさん
2006/01/02(月) 02:41:53%./foo
Terminated.
%
なのか?
あと、gccは、-Wall -Wpedanticくらいのオプションはつけてるんだろうか
0488デフォルトの名無しさん
2006/01/02(月) 02:42:46このスレなりに C の観点から論じれる部分の話をすればいいだけじゃん
それができないボンクラこそ出て行けよ
0489ビル・ジョブス
2006/01/02(月) 03:14:47この話題、おれが許す。
この問題をIsolateするには大まかに2つのアプローチがあるな。
1.再帰させないテンポラリーバージョンで正常終了するか?
基本ロジックが生きているかの確認。
正しく抜けてこなければ、どこかでcore吐かせてgdbしていく。
2.PCでVSなどの統合環境で実行できるか?(CYGWINから?)
PCのCPUなら占有できるしVSもかなり賢いから。
VS持ってなければ、VS C++ Expressは無料なので560MBのISOをDLすればよし。
きっとVSに怒られるプログラムに仕上がっていると思いますけど。
0490デフォルトの名無しさん
2006/01/02(月) 06:22:39Terminated のメッセージはそういう場合もあるが、そうでない場合もある。
0491デフォルトの名無しさん
2006/01/02(月) 07:25:51ここが意味不明
0492デフォルトの名無しさん
2006/01/02(月) 10:44:050493リーナス
2006/01/02(月) 12:52:120494デフォルトの名無しさん
2006/01/02(月) 13:31:39よろしければお願いしたいと思います。
typedef struct{
int x; int y; int z; }aaa;
の構造体の形をした配列bbb[64]をmain関数から別の関数に移して、
その別の関数内でいじった配列を更新したままmain関数に戻したいというのが目的です。
単純な変数をポインタとして使うまでは学習したのですが、配列が同じようにいかず困っています。
main関数内でkansuu(bbb);と宣言してvoid kansuu(bbb[])と受け取るとエラーはありませんが
やっぱりmain関数内に反映されません。
変に*やらを付けるとキャストが必要やら変換できないやらと言われます。
0495494
2006/01/02(月) 13:33:40○ main関数内でkansuu(bbb);と宣言してvoid kansuu(aaa bbb[])と受け取るとエラーはありませんが
でしたorz
0496デフォルトの名無しさん
2006/01/02(月) 13:35:030497494
2006/01/02(月) 13:48:43つまらないプログラムですがどうぞ…オセロのCPU役を作っています。
現在終局後の勝敗判定の関数だけが出来上がっている状態です。
main関数を解説しますと、
配列pointsには盤面状態(x座標,y座標,空白1黒2白3を意味する数字の3つの情報×64マス分)が入っています。
現在作っている関数changeは相手に手を入力してもらいそれによって盤面を変化させる関数です。
http://www.za.ztv.ne.jp/yosi-h/page001
0498494
2006/01/02(月) 13:53:50>main関数内でkansuu(bbb);と宣言してvoid kansuu(bbb[])と受け取るとエラーはありませんが
>やっぱりmain関数内に反映されません。
今やったらこのままで反映されてましたwwwwwwwwwwww
何故か解決しましたorzorzorz
0499ビル・ジョブス
2006/01/02(月) 13:54:29もしかして・・構造体の配列の実体を渡すなんて止めてくれよ。
もしも、bbb[]のオリジナルを保持しておきたいなら、main()内でコピーccc[]を作っておけ。
○main関数内でkansuu(bbb);と宣言してvoid kansuu(aaa *bbb)と受け取る。
kansuu()内では、bbb[n].xでアクセスできます。
これはC言語仕様の弱点(利点)でポインタ渡しなら全て配列として解釈できる。
この場合、実際配列なので問題無いが配列でない場合[1]はメモリ破壊となる。
可読性向上とバグ防止のため、void kansuu(aaa *bbb,int numOfArray);にしましょう。
ファイルの拡張子は.cでよろしく。
これにて一件落着。
0500デフォルトの名無しさん
2006/01/02(月) 13:55:51それは宣言ではない
0501ビル・ジョブス
2006/01/02(月) 13:57:280502494
2006/01/02(月) 14:04:58いえ、原因が分からないまま解決した形になっていたので大変ありがたいです。
確かにbbb[n].xで変更するとmain関数内の配列にも反映されていました。
参考にさせていただきます。
>>500
言い方としておかしいということでしょうか?
半年ROMりますorz
0503デフォルトの名無しさん
2006/01/02(月) 14:07:340504デフォルトの名無しさん
2006/01/02(月) 14:07:56場合によるね
何が起きるのかを理解した上で処理方式を選択することこそ C の特徴を活かせる考え方で
わけもわからず毛嫌いして表現力を落とすのはただのアフォだ
>>494
あなたの話をまとめるとこうか?
typedef struct { int x, y, z; } aaa;
main() {
aaa bbb[64];
kansuu(bbb);
}
void kansuu(aaa bbb[]) { }
↑
これが通るコンパイラは規格合致処理系ではないから
そこで通用したことを標準とは思い込まない方がいいぞ
方言のあるコンパイラを毛嫌いせよと言うつもりは毛頭ないが
0505デフォルトの名無しさん
2006/01/02(月) 14:19:150506デフォルトの名無しさん
2006/01/02(月) 14:20:210507494
2006/01/02(月) 14:23:03なるほど、その方が確かにしっくりいく感じですね。
ありがとうございます。
>>504
>これが通るコンパイラは規格合致処理系ではないから
そうなのか…orz
家ではvisual Cで、大学ではGCC(?)でやっています。
とりあえずまた詰まってどうしようもなくなるまで頑張ります。
0508デフォルトの名無しさん
2006/01/02(月) 14:26:26それより >>489 >>504 の言っていることはどうでもいいので
scanf使ってる事の方を改めるべき
反映されたりされなかったりするのは
x y が 0 になっているから
0509デフォルトの名無しさん
2006/01/02(月) 14:36:410510デフォルトの名無しさん
2006/01/02(月) 16:27:110511デフォルトの名無しさん
2006/01/02(月) 17:56:30これって先頭以外のメンバも 0 になるんですか?
struct test{
int a;
int b;
};
void f()
{
test t={0};
// t.b も 0 になることは保証されてる?
}
0512デフォルトの名無しさん
2006/01/02(月) 18:00:33省略した分は0初期化が保証されています
0513デフォルトの名無しさん
2006/01/02(月) 18:05:05あなたは正常な神経の持ち主
本筋として 0 保証が欲しければ 0 と書けばいいんだけどね
C は他にもいくつか順当な類推を裏切る仕様があるから
規格票をすぐチェックできるようにしとくが吉
0514デフォルトの名無しさん
2006/01/02(月) 18:30:47内部とレース関数みたいなものを自作してますか?
今度、仕事で作ろうと思っています。
何か参考となるものがありますでしょうか?
ちなみにCでメカ制御などの組み込み系をやっております。
0515デフォルトの名無しさん
2006/01/02(月) 18:31:23内部トレースのスペルミスでした・・・すみません
0516デフォルトの名無しさん
2006/01/02(月) 18:39:52#define a(b) fprintf(stderr, "%s(%d):%s==%x\n", __FILE__, __LINE__, #b, (unsigned)(b), getchar())
みたいのか?
組み込みだとハード設計でも diagnostic どうするか考えるべ?
0517デフォルトの名無しさん
2006/01/02(月) 19:46:350518デフォルトの名無しさん
2006/01/02(月) 19:52:42アフォ
組み込みでもデバッグに fprint(stderr はビシバシ使うんだよ
もちろんコンソールの存在しないターゲットでね
0519デフォルトの名無しさん
2006/01/02(月) 19:53:000520デフォルトの名無しさん
2006/01/02(月) 20:02:12printで済ます人も多い
0521デフォルトの名無しさん
2006/01/02(月) 20:20:01「2つの数を足す関数を宣言し、この関数を利用してプログラムを作成せよ」
という問題を解いています。
・・・誰かプログラムを組んでくださいorz
その解読は自力でノートと教科書を読んで頑張ります
戻り値とか引数とかをどう使えばいいのか見当も付かないんですorz
0522デフォルトの名無しさん
2006/01/02(月) 20:21:19>>1
0523デフォルトの名無しさん
2006/01/02(月) 20:27:10同情の余地がかけらもねえな
必須科目なら留年か退学しろ
0524デフォルトの名無しさん
2006/01/02(月) 20:31:010525デフォルトの名無しさん
2006/01/02(月) 20:39:062つの数を足す関数作ったよ
さらにこの関数を利用したプログラムはこちら
#include <stdio.h>
#include <stdlib.h>
void tasu( int a, int b )
{
int c;
c = a+b;
}
int main( int argc, char*: argv )
{
int a,b;
if( argc<3 ){
printf("usage: %s <number> <number>\n",argv[0] );
exit(0);
}
a = atoi(argv[1]);
b = atoi(argv[2]);
tasu( a, b );
return 0;
}
0526デフォルトの名無しさん
2006/01/02(月) 20:49:23どうする?
来年も同じ科目が再履で待ってるだけだぞ
0527デフォルトの名無しさん
2006/01/02(月) 20:49:400528デフォルトの名無しさん
2006/01/02(月) 20:52:36この答なら大丈夫だよ
0529デフォルトの名無しさん
2006/01/02(月) 21:02:31味わい深い。
0530デフォルトの名無しさん
2006/01/02(月) 21:06:43ありがとうございます!!
今から解読します。
>>526
2回目聞いたら分かるでしょう、たぶん。
0531デフォルトの名無しさん
2006/01/02(月) 21:11:47解読はおすすめしない
そのまま提出しる
0532デフォルトの名無しさん
2006/01/02(月) 21:12:52ってか、これはレポートで、説明しないといけないので解読しないと・・・。
0533デフォルトの名無しさん
2006/01/02(月) 21:14:170534デフォルトの名無しさん
2006/01/02(月) 21:20:14かわいそうだからマジレスするが、tasu()に渡した値がどうなってるか見てみろ
0535デフォルトの名無しさん
2006/01/02(月) 21:35:53なにかおかしいとこある?
・ ・ ・ ・
仕様通りじゃね?
0536デフォルトの名無しさん
2006/01/02(月) 21:40:45プロトタイプ宣言だけでっちあげればよさげ。
0537デフォルトの名無しさん
2006/01/02(月) 21:47:51確かに「2数を足す関数」という仕様通りだな
0538デフォルトの名無しさん
2006/01/02(月) 22:21:25皆の話してることがまだよくわからない
0539デフォルトの名無しさん
2006/01/02(月) 22:22:22ここに来る前に、本でも買って読め。
0540デフォルトの名無しさん
2006/01/02(月) 22:24:32今は本よりネットだ
0541デフォルトの名無しさん
2006/01/02(月) 22:31:30冬厨がぶしつけな質問叩きつけてるわけじゃないんだから拒絶せんでも…
スレ的に忙しいわけでもないし。
0542デフォルトの名無しさん
2006/01/02(月) 22:32:490543デフォルトの名無しさん
2006/01/02(月) 22:33:56ネット検索で勉強はダメ
すでに十分習得した人が、新しい知識をネットで調べるのはいいが
初心者がネットで言語を勉強するのはやめたほうがいい
断片的なつぎはぎだらけの知識の習得で終わってしまう
本をよめ!
0544デフォルトの名無しさん
2006/01/02(月) 22:34:200545538
2006/01/02(月) 22:39:02本には実行例で書いてあるが、どうやってコンパイルするのかも書いてなくて
調べてた。
0546植松のパクリ(1)
2006/01/02(月) 22:40:27作曲:タルレガ 曲名:ラグリマ
http://www2.arnes.si/~msterg/Midi/Tarrega/Tarrega_Lagrima.mid
作曲:植松伸夫 曲名:山の向こうに
http://www.ffplanet.com/ff7/musiche/07-Other_Side_of_Mountain.mid
0547デフォルトの名無しさん
2006/01/02(月) 22:43:12どうやってコンパイルするかは千差万別だからまともな本・純粋に言語のことを書いた本には書いていなくて当然。
0548デフォルトの名無しさん
2006/01/02(月) 22:55:49ハハハ
言語の本とコンパイラの本は別ものだよ。
つまりC言語の本とコンパイラの本(VCとかgcctとか)の本の2冊は必要。
0549デフォルトの名無しさん
2006/01/02(月) 23:01:350550538
2006/01/02(月) 23:26:01例えば
#include <stdio.h>
main()
{
printf("hello\nworld.\n");
}
と書いてあるので、実行してみるとエラーがでるんだよ
何がおかしいの?
0551デフォルトの名無しさん
2006/01/02(月) 23:28:36>>539
>>543
0553俺からのお年玉だ
2006/01/02(月) 23:32:450554538
2006/01/02(月) 23:34:05もしかしてreturn?
0555デフォルトの名無しさん
2006/01/02(月) 23:34:310557デフォルトの名無しさん
2006/01/02(月) 23:39:12なんのエラーがでるの?
これから、あなたがどうC言語とかかわっていくかはわからないけど、
エラーの報告をするのに「エラーが出ました」ではダメ。
エラーの状況を詳細に報告すること。このケースではエラーメッセージの内容。
0558デフォルトの名無しさん
2006/01/02(月) 23:39:38http://pc8.2ch.net/test/read.cgi/tech/1133629787/
0559デフォルトの名無しさん
2006/01/02(月) 23:48:39○調べる
0560デフォルトの名無しさん
2006/01/02(月) 23:48:41>>550の例で言うなら、main()の部分が一番の問題。
main は関数の名前でしかない。
関数の名前の前に戻値、関数の名前の後の()の中に引数を、
指定していないから、エラーが出る。だから、
void main(void)
{
printf("hello\nworld.\n");
return;
}
とすれば出ないはず。
void main(void) の意味は、
この関数はmainという名前の関数で、
voidの値を受取り(voidは値のない値という意味なので、つまり値を受取らず)、
{ }内の処理を行って、
voidの値を返す(つまり値を変えなさい)関数です、という意味になる。
ただし、この書き方でも厳密に言うと、main関数の正しい宣言ではない。
ちゃんとした知識を得るためにちゃんとした本で勉強することをオススメする。
0561デフォルトの名無しさん
2006/01/02(月) 23:52:440562デフォルトの名無しさん
2006/01/02(月) 23:57:010563538
2006/01/03(火) 00:01:28>>560ありがとう。
実行したらできたよ。
もうちょっと解るようになって苦しんだら来る。
ノシ
0564538
2006/01/03(火) 00:03:19いい忘れ
そうだな、ここを参考して新しい本買ってくる。コンパイラ本と一緒に。
0565デフォルトの名無しさん
2006/01/03(火) 00:03:520566560
2006/01/03(火) 00:13:10intの型の説明がメンドくさかった。
それともreturnの意味も説明した方が良かったか?
あとはちゃんとした本を読んで自習させた方がいいだろう。
>>521も他人の答えを鵜呑みにしないで、ちゃんと自分で考えろよ。
0567デフォルトの名無しさん
2006/01/03(火) 00:17:42俺なら>525でひねくれてマクロ関数にしてやってたと思う。
逐一しっかり答えてやってるお前はすごいと思うよ。
0568デフォルトの名無しさん
2006/01/03(火) 00:20:21面倒で嘘教えるなら最初から一切説明するな
嘘を教えるのは最低の行為だ
0569デフォルトの名無しさん
2006/01/03(火) 00:22:23学校でも日常的に嘘教えてるだろ。
真実を教えて無駄に混乱させる必要は無いと思うがな。
0570デフォルトの名無しさん
2006/01/03(火) 00:23:25>ちゃんとした知識を得るためにちゃんとした本で勉強することをオススメする。
0571デフォルトの名無しさん
2006/01/03(火) 00:23:43「初歩の時点で理解を助けるからvoidにしておく」ってのはいい姿勢とは思えないな。
0572デフォルトの名無しさん
2006/01/03(火) 00:25:32学校で嘘おしえてるからどうだってんだ?氏ねよ
0573デフォルトの名無しさん
2006/01/03(火) 00:25:33まあまあ
0574デフォルトの名無しさん
2006/01/03(火) 00:27:45K&Rでもmain(){ }でreturnもexitもなかったよ
0575デフォルトの名無しさん
2006/01/03(火) 00:29:09いちいち興奮すんなって・・・・
>>574
K&Rは初心者が読むもんじゃないだろ。
ある程度理解したやつが更に深く知るために読むもんだと思ってるんだが。
0576デフォルトの名無しさん
2006/01/03(火) 00:31:51いつのK&Rかな?
Ansi-CのC解説書が一番いいと思うよ
0577デフォルトの名無しさん
2006/01/03(火) 00:32:40void main()の話とはまったく違うと思うが。
0578デフォルトの名無しさん
2006/01/03(火) 00:42:500579デフォルトの名無しさん
2006/01/03(火) 00:45:24初心者にも分かりやすく説明してください
0580デフォルトの名無しさん
2006/01/03(火) 00:45:570581デフォルトの名無しさん
2006/01/03(火) 00:48:100582デフォルトの名無しさん
2006/01/03(火) 00:50:08そういう仕様だから。
に尽きるだろ。
returnでTRUE返してエラーとかはあまり最近考えないし。
0583デフォルトの名無しさん
2006/01/03(火) 00:51:44初心者にも分かりやすく説明してください
0584デフォルトの名無しさん
2006/01/03(火) 00:51:46どうでもいいよ
0585魚チョコ
2006/01/03(火) 00:52:06「勝手に main の戻り型を int に決めるなこのやろう。
指定が省略されたら void main(void) と解釈しろこのくそぼけ。
戻り値が必要なら呼び出し側で勝手に0でも補え!! 殺すぞ!!!」
とかメールを送ろうよう。それにアレだ。コンパイラの作者もアレだ、
提案: main() の前に int と書いて、定義の最後の } の前に return 0;
とでも書いてみたらどうでしょう? いえ、いいんですけどね、用が
ないならこの提案は無視して下さい。
とかきわめて控えめかつ親切に表示してくれとか思うわ。ほんま。
0586デフォルトの名無しさん
2006/01/03(火) 00:53:22ほんとはintなんだけど(見えないところで定義されてる)
voidでも通るのは コンパイラが甘いため(警告は出してる)
0587デフォルトの名無しさん
2006/01/03(火) 00:54:27決まりにガタガタ言うな。
0588デフォルトの名無しさん
2006/01/03(火) 00:55:250589デフォルトの名無しさん
2006/01/03(火) 00:57:05なによ! mainはintを返さなきゃダメでしょ!
引数まで省略しちゃって、ばっかじゃないの?
わわっ、なに涙ぐんでんのよ
ほ、ほんとうはダメなんだけど、特別に許してあげるから
今日だけ-Wno-mainつけていいわよ
あ、なに笑ってるのよげんきんね!
0590デフォルトの名無しさん
2006/01/03(火) 00:58:440591デフォルトの名無しさん
2006/01/03(火) 01:01:27then
echo "pg is success."
else
echo "pg isn't success."
end
こんな処理してもいいわけよ。めちゃ適当だけど(動くかどうかもわからんw)
0592デフォルトの名無しさん
2006/01/03(火) 01:04:150返してるのにisn'tになったお(^ω^;)
0593デフォルトの名無しさん
2006/01/03(火) 01:09:120594デフォルトの名無しさん
2006/01/03(火) 01:11:21作っていまして、もし間違えた場合やり直しが効く
仕組みにするため以下のような構造を作って
みました。もしかしたら危険な勘違いをしてるのかも
しれないのですが、どうにも気持ち悪いのでカキコさせていただきます。
1.#include<stdio.h>
2.main(){
3.
4. char name[30];
5. char check;/*正誤チェック用文字*/
6.
7. /*名前の入力*/
8.do{
9.printf("名前を入力して下さい。\n→");
10. scanf("%s",name);
11.printf("入力内容は正しいですか?[y/n]:");
12.scanf("%s",&check);
13.printf("\n");
14.}while(check!='y');
15.}
このプログラムでは一文字のcheckを12行目で%sで取り込まないと
(%cとかだと)動きません><getcharとかもダメでした。
詳しくは文字入力が飛ばされてループの頭に戻ってしまいます?
できるんだからいいんじゃないかと思うかもしれませんが、
どうも気持ち悪い+不安は早めにつぶさないとプログラムがもっと
大規模になってから何か問題が出るのが怖いですTT
よろしくおねがいします!
0595デフォルトの名無しさん
2006/01/03(火) 01:13:18読みにくいですがなにとぞアドバイスお願いします
0596594
2006/01/03(火) 01:17:45テストは
windowsXP
エディタCPAD
コンパイラLSI C-86
でさせていただきました
0597デフォルトの名無しさん
2006/01/03(火) 01:18:58scanf("%s", name);で名前を入力し終わった段階で、
入力確定時に押したEnter(改行コード)がバッファに残ってしまうので
その直後のgetcharや%cでの読み込みは、その改行コードが読み込まれて終わってしまう。
"%s%*c"にするか、fgets+sscanfに書き直す(後者を推奨)
0598デフォルトの名無しさん
2006/01/03(火) 01:22:05読みにくい行番号付けるな。
0599デフォルトの名無しさん
2006/01/03(火) 01:26:19遅レスだけど、入門書から勉強し直した方がいいよ。
見てるこっちが恥ずかしくなるから。
0600魚チョコ
2006/01/03(火) 01:27:39ええっと、残念ながら scanf() を使ってる限り「安全」なプログラムにならないんだよね。
1. オーバーフロー等非対応
2. 配列の容量を超えて際限なく読み込みと同時に書き込んでメモリー内容を破壊
3. キー入力バッファーに読み残しをする。次に呼ぶとバッファーの残りを読んでそれが
指定された形式に当てはまらないとそのまま返ってきてしまう(しかもまた残す)。
で、普通は fgets() sscanf() fflush() の3つを使って読み取るんだけどそれでも変なこと
が起こるので、長くやってる人はコツコツ作りためた自前の読み取り関数をコピーしては
使ってますわねえ。
0601デフォルトの名無しさん
2006/01/03(火) 01:28:02横から質問させていただきます。
>"%s%*c"
このような書き方について解説しているサイトを教えていただけないでしょうか?
探しても全然ヒットしません
0602デフォルトの名無しさん
2006/01/03(火) 01:30:07http://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html
0603デフォルトの名無しさん
2006/01/03(火) 01:33:24do{
fgets(name,sizeof(name),stdin);
}while((check=getchar())!='y');
がおまいの仕様を満足させてくれるだろう
正しいですかと聞く意味がよくわからんのだが?
0604デフォルトの名無しさん
2006/01/03(火) 01:35:04即レスありがとうございます
検索が下手なばっかりに、お手数おかけしました
0605デフォルトの名無しさん
2006/01/03(火) 01:37:010606594
2006/01/03(火) 01:50:54アドバイスありがとうございます。
以前scanfは空白を含む英文みたいなものを
入力できない(できたらスマセン。近々ためします)
というのもあるので危険とかも読んだことがあります。
若干難しそうなのでスルーしていました。
そのときに用意した配列以上の入力も読み込んでしまうなども
書いてありました(独習Cかな?)
よく考えてみますが、よろしければ自作入力関数作成のヒントを
ください。fgetsということはファイルを利用するということですか?
getsのオーバーフローなどについて調べてみます
>>598
よろしければスタンダードありましたら教えてください><
>>602
ちょっと思いつきで作ったものなのですが、
実利用しているプログラムの中ではdowhileループの中に
複数の入力をしてたりしているので反射的にしたようです。
たしかに「入力内容は正しいですか?[y/n]」はちょっと
わずらわしいですねw
あり!
0607デフォルトの名無しさん
2006/01/03(火) 01:53:04fgetsの入力元をstdinにすると、標準入力、一般的にはコンソールからの入力になる。
scanf(**);とfscanf(stdin,**);は同義
0608デフォルトの名無しさん
2006/01/03(火) 03:02:12まぢでいってるの?
処理が終わったことにきづかないって・・・あふぉ?
0609デフォルトの名無しさん
2006/01/03(火) 04:07:30550 氏はエラーだと言っているのに頓珍漢なアドバイスしてんじゃねえよ
あんたの話は警告でしかない
>>600
>1.
それは sscanf でも同じこと
>2.
%d や %x はメモリー破壊を起こさない
>3.
%d や %x はトークン単位の処理で fgets + sscanf のような行単位の処理では
そのまま置き換えることはできない
>長くやってる人はコツコツ作りためた自前の読み取り関数をコピーしては
>使ってますわねえ。
コピペ厨は歴だけ無駄に長い
仕様が曖昧で単体テストもやってないからコピーと同数のパッチが頻発
scanf の中の人のほうが比較にならないぽどいい仕事をしている
0610デフォルトの名無しさん
2006/01/03(火) 07:45:16どうすればいいのでしょうか?
最悪の場合使用したいPCに今持っているVisual Cを入れたらいいのですがあんまり作業が大変です。。。
検索してもどうにもその手の情報は発見できませんでした。
よろしければご教授くださいますよう宜しくお願いします。
0611610
2006/01/03(火) 07:49:51例えば.exeのように、特定のアプリケーションがなくても単体で動作するような形にするのが最終的な目的です。
0612デフォルトの名無しさん
2006/01/03(火) 07:53:12Release ビルド
0613デフォルトの名無しさん
2006/01/03(火) 08:19:350614デフォルトの名無しさん
2006/01/03(火) 08:54:22それができないで一体何のためのプログラミングだと思う?
0615610
2006/01/03(火) 09:20:49Releaseビルドで調べてみたらVC内で作成可能ということが分かって色々やっていました。
ただソースコンパイルは通っているはずなのですが、どうやっても
>fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
と言われビルドが完了しませんorz
エラーメッセージ自体も検索したのですがいまいち有効な対応策が得られていない状態です。
みなさまのお知恵を拝借できればと思います。
>>613
割れではありませんが友人宅等で使用する場合に「VC入れさせて」では面倒だと思いました。
>>614
ですよねorz
0616デフォルトの名無しさん
2006/01/03(火) 09:24:04#include <stdafx.h>
あと氏ね。
0617610
2006/01/03(火) 09:36:33お前が氏ねよゴミ
0618デフォルトの名無しさん
2006/01/03(火) 10:25:57そろそろこっちだな
http://pc8.2ch.net/test/read.cgi/tech/1131443284/
0619デフォルトの名無しさん
2006/01/03(火) 11:36:36>>616はこの板でよく使われている常套句だ。C++相談室の最初の方を
見てみろ。これを知らないという事は、お主2ch初心者だな?
0621デフォルトの名無しさん
2006/01/03(火) 14:21:11その後、ランダムな場所にn個の要素にだけ、1を代入したいのですが、どうすればいいのか分かりません。
たとえば、n=5だったら、
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
と初期化し、ランダムに
0 1 0 0 0
0 0 0 1 0
1 1 0 0 0
0 0 1 0 0
0 0 0 0 0
という風にn個だけ1があるという感じです。
よろしくお願いします。
0622デフォルトの名無しさん
2006/01/03(火) 14:56:36こちらでどうぞ
http://pc8.2ch.net/test/read.cgi/tech/1135125328/
0623デフォルトの名無しさん
2006/01/03(火) 16:20:45あと気をつけるのは配列サイズよりnのが大きいときだな。
冷たいお湯をくれと言われても困りますよ。
0624デフォルトの名無しさん
2006/01/03(火) 16:24:03以下、例として単純に画像ファイルをコピーする場合。
(エラー処理は割愛)
fp1 = fopen("C:\\No_01.TIF", "rb" );
fp2 = fopen("C:\\No_02.TIF", "wb" );
fread(read_buf, 65535, 1, fp1) < 1);//MAXバイト数は65535として
fwrite(read_buf, バイト長, 1, fp2 ) < 1);
書き込む際のバイト長の求め方がどうにも分からん・・・
strlen、fgetc、feofあたりを試してみたけどダメでした。
・エディタのバイナリモードで開いて調べる
・WindowsのReadFileを使う
はなしでお願いします。
0625デフォルトの名無しさん
2006/01/03(火) 16:27:060626デフォルトの名無しさん
2006/01/03(火) 16:31:10freadの戻り値。
0627624
2006/01/03(火) 16:36:38一瞬で解決しました。
ありがとうございました。
0628デフォルトの名無しさん
2006/01/03(火) 17:50:450629デフォルトの名無しさん
2006/01/03(火) 18:39:41>>628の方式でおながいします。
fseekで移動したあと元に戻すのも忘れないでください。
0630デフォルトの名無しさん
2006/01/03(火) 18:45:39正月になんで゜ρ゜)ボーっとしていたら、
不意に終了時間と開始時間を入力して、時間差を計算するプログラムを、
作りたくなって、作ったのですが、美しくありません
誰か、華麗なコードに変身させて下さい
#include<stdio.h>
intmain(void)
{
intarg_1,arg_2,arg_3,arg_4,time,min;
printf("終了時間を先に開始時間を後にスペースを空けて入力して下さい\n");
scanf("%d%d%d%d",&arg_1,&arg_2,&arg_3,&arg_4);
if(arg_1>=25||arg_3>=25)
printf("24以下の数値を入力下さい\n");
if(arg_2>=61||arg_2>=61)
printf("60以下の数値を入力して下さい\n");
if(arg_1<arg_3)
printf("開始時間と終了時間が矛盾しています\n");
if((arg_1<25&&arg_3<25)&&(arg_2<61&&arg_4<61)&&(arg_1>=arg_3&&arg_2>=arg_4)){
time=arg_1-arg_3;
min=arg_2-arg_4;
printf("時間差は\n%d時間%d分です",time,min);
}
elseif((arg_1<25&&arg_3<25)&&(arg_2<61&&arg_4<61)&&(arg_1>arg_3&&arg_2<arg_4)){
time=(arg_1-arg_3)-1;
min=(arg_2+60)-arg_4;
printf("時間差は%d時間%d分です",time,min);
}
return0;
}
0631デフォルトの名無しさん
2006/01/03(火) 18:46:51>>1
0632デフォルトの名無しさん
2006/01/03(火) 18:48:373行目
× intarg_1,arg_2,arg_3,arg_4,time,min;
↓
○ int arg_1,arg_2,arg_3,arg_4,time,min;
です
0633デフォルトの名無しさん
2006/01/03(火) 19:31:130634デフォルトの名無しさん
2006/01/03(火) 19:31:51許されるのなら日付→UNIX時間に変換して
UNIX時間同士で引き算してUNIX時間→時分秒
0635デフォルトの名無しさん
2006/01/03(火) 19:32:320636デフォルトの名無しさん
2006/01/03(火) 22:33:10爆弾の配置を以下の方法でやろうと思っているのですが、どうやれば良いのかわかりません。
・int型のポインタ*arrを宣言
・nを入力し、mallocでn*n分のメモリを確保
・配列の要素をすべて0で初期化
・ランダムな場所にn個だけ1を代入する
たとえば、n=5だったら、
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
と初期化し、ランダムに
0 1 0 0 0
0 0 0 1 0
1 1 0 0 0
0 0 1 0 0
0 0 0 0 0
こんな感じにしたいのですが、ランダムな場所に1を代入するところが出来ません。
よろしくお願いします。
0637デフォルトの名無しさん
2006/01/03(火) 22:37:290638636
2006/01/03(火) 22:48:07rand関数を使えば良いということはわかるのですが、具体的にどのようにするかがわかりません。
教えていただけないでしょうか?
0639デフォルトの名無しさん
2006/01/03(火) 22:54:330初期化するなら、初めからcallocを使ったらどうかと思う。
それはともかく、arr[0]〜arr[m * n - 1]までが配列の要素なのだから、
0〜m * n - 1の範囲で乱数を発生させれば良い。
ただし、乱数によって選ばれたところには既に爆弾が置かれていた場合を考えること。
0640デフォルトの名無しさん
2006/01/03(火) 22:57:10いくらでも方法はあるじゃん
・配列の要素を
0 1 2 3 4
5 6 ・・・
・
・
20 21 22 23 24
と考えてrand()%25
・rand()%5の二重ループにして、列,行を決定
とかね
0641デフォルトの名無しさん
2006/01/03(火) 23:04:13乱数の値が 0-4 までなら {
arr[0*0+0]に 1 を設定する。
0-23 までの乱数を発生させる。
乱数の値が 0-3 までなら {
arr[0*0+1]に 1 を設定する。
0-22 までの乱数を発生させる。
・・・以下略・・・
} else 乱数の値が 4-23 までなら {
arr[0*0+1]に 0 を設定する。
0-22 までの乱数を発生させる。
・・・以下略・・・
}
} else 乱数の値が 5-24 までなら {
arr[0*0+0]に 0 を設定する。
0-23 までの乱数を発生させる。
乱数の値が 0-4 までなら {
arr[0*0+1]に 1 を設定する。
0-22 までの乱数を発生させる。
・・・以下略・・・
} else 乱数の値が 5-23 までなら {
arr[0*0+1]に 0 を設定する。
0-22 までの乱数を発生させる。
・・・以下略・・・
}
}
0642636
2006/01/03(火) 23:10:40ありがとうございます。言っていることは分かるのですが、具体的にコードにしようと思うと難しいです。
int n,i,j;
int *arr;
n=5;
arr=(int *)malloc(sizeof(int)*n*n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
*((arr2+i)+j)=0;
}
}
この後どうすれば良いでしょうか?
0643デフォルトの名無しさん
2006/01/03(火) 23:12:400644636
2006/01/03(火) 23:14:18すいません。一応ある程度は勉強しているのですが。。。
0645デフォルトの名無しさん
2006/01/03(火) 23:14:51乱数以前にそのプログラムが(ry
0646デフォルトの名無しさん
2006/01/03(火) 23:18:55if(count==0)return ;
int rnd=rand()%(n*n);
while(rand_array[rnd%(n*n)]==1)rnd++;
rand_array[rnd%(n*n)]=1;
rand_make(count-1);
}
main(){
rand_make(n, n);
}
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/rand.3.html
0647デフォルトの名無しさん
2006/01/03(火) 23:21:370648デフォルトの名無しさん
2006/01/03(火) 23:40:470649636
2006/01/03(火) 23:44:01宿題スレに書き込もうと思ったのですが、まちがって、ここに書き込んでしまい、そしたらレスが帰ってきたので。
宿題スレいきます。
0650デフォルトの名無しさん
2006/01/04(水) 11:04:35printf("%d,%d", getch(), '\n');
というプログラムで
enter押すと,13,10ってなるんですが,意味不明
'\n'はエンターキーの文字コードだと思うんですが,エロイ人教えて下さい
0651デフォルトの名無しさん
2006/01/04(水) 11:33:52それはつまり、お前のところでは'\n' == 10であり、
getch()でEnterを押すと13が返されると言うことだ。
13というのはおそらく'\r'と等しいと思われる。
'\n'は改行文字であるが、Enterを押すと'\n'が入力される保証はどこにもない。
ここまで書いてから気が付いたが、getch()は標準関数でないからしてスレ違いだ。
0652デフォルトの名無しさん
2006/01/04(水) 11:34:480653デフォルトの名無しさん
2006/01/04(水) 11:42:04不正入力チェックが超楽
0654デフォルトの名無しさん
2006/01/04(水) 12:17:43マジレスすると、標準Cでの標準的な方法はない。
# ファイルの概念がないプラットフォームが存在するため
0655デフォルトの名無しさん
2006/01/04(水) 12:27:03freadの戻り値チェックしつつEOFまでループ
バイト長求めなくても何ともないぜ
0656デフォルトの名無しさん
2006/01/04(水) 12:44:22fread の戻り値使えよ。
0657デフォルトの名無しさん
2006/01/04(水) 13:08:31バッファリングしていると信じているのだから見かけ1Byteずつでも気にしないのさ。
0658デフォルトの名無しさん
2006/01/04(水) 13:13:280659デフォルトの名無しさん
2006/01/04(水) 13:42:331バイトずつ余計な処理が大量に入るのだから、
バッファリングされていようが無駄が多いぞ。
0660デフォルトの名無しさん
2006/01/04(水) 14:27:09それは freestanding environment の場合であって
hosted environment で論じる限り、ファイルの概念は「必ずある」ぞ
0661デフォルトの名無しさん
2006/01/04(水) 14:29:10無駄を実際に抑えるかどうかは場面ごとの必要性によるけど
気づいていない〜無関心のまま居直る奴とは組みたくないよな
0662デフォルトの名無しさん
2006/01/04(水) 15:08:26でファイルの最後に持っていってftell(fp)でいいんじゃね?
0663デフォルトの名無しさん
2006/01/04(水) 15:23:04どうしても移植性が欲しいってんなら、
関数化して、#if で分岐して定義を変えて、
#else で fseek, ftell 使えばいい。
0664デフォルトの名無しさん
2006/01/04(水) 16:30:090665デフォルトの名無しさん
2006/01/04(水) 16:41:57もしくは
アンサインド イント
0666デフォルトの名無しさん
2006/01/04(水) 16:52:27ありがとう、最後にもう一つだけ教えて下さい
ANSI Cでベキ乗の計算する場合、特別な関数とか読み込まないと出来ないのでしょうか?
#include <stdio.h>
main()
{
int x = 2;
printf("2の2乗は%d\n", x ^ 2);
}
こうしたら、0が表示されてしまいました、ベキ乗の計算させるのにはどうしたらできますか、
オナガイシマス
0667デフォルトの名無しさん
2006/01/04(水) 17:00:03ハットは C では排他的論理和でありべき乗ではない
C ではべき乗は自分で作るかサードパーティ製のライブラリを探すことになる
ただし 2 の n 乗は 1 << n で求まる
0668デフォルトの名無しさん
2006/01/04(水) 17:00:44pow
0669デフォルトの名無しさん
2006/01/04(水) 17:03:150670デフォルトの名無しさん
2006/01/04(水) 17:05:04ありがとう、勉強になりマスタ
0671デフォルトの名無しさん
2006/01/04(水) 17:08:230672デフォルトの名無しさん
2006/01/04(水) 17:10:08>>666は例として2^2を出しただけで
0673デフォルトの名無しさん
2006/01/04(水) 17:18:060674デフォルトの名無しさん
2006/01/04(水) 17:27:58>>672さん
短順に2のベキ乗が知りたかっただけです実は、今年、基本情報技術者資格を
受験しようと思っていて、午前問題の参考書の中で
平成16年度春問10
2種類の文字"A","B"を1個以上、最大n個並べた符号を作る。60通りの
符号を作るときのn個の最小値は幾らか。
という問題を見て答えは5個なのですが、そう言えばc言語で
2のベキ乗ってどうしたら計算できるのだろうかと思い、borland C++
でやって見たのですが、うまく出来なかったので、
ここで質問させてもらいました、ありがとうございました。
0675デフォルトの名無しさん
2006/01/04(水) 17:56:29どんな方法があるでしょうか?
0676デフォルトの名無しさん
2006/01/04(水) 18:00:05ちょっとした実験なら scanf が便利
パーサなどを作るときは本腰入れてトークン分解を作る
strtok もあるけど俺は勧めない
0677デフォルトの名無しさん
2006/01/04(水) 18:00:10scanfを注意深く使う。
0678デフォルトの名無しさん
2006/01/04(水) 18:03:440679デフォルトの名無しさん
2006/01/04(水) 18:04:32scanf("%s ",s)をループでも回し、一周ごとにスペースを挿入していこうと思ったのですが、
入力文字列にスペースが無い場合に対応できない上に、ループの終了条件がわかりません
>>677
「注意深く」とはどういうことでしょうか?
0681デフォルトの名無しさん
2006/01/04(水) 18:09:580682デフォルトの名無しさん
2006/01/04(水) 18:11:350683デフォルトの名無しさん
2006/01/04(水) 18:11:41現に市販されているソフトのクローンが作れるかってこと?
それとも PG 職に就けるかってこと?
>>679
>入力文字列にスペースが無い場合に対応できない
どゆこと?
0684デフォルトの名無しさん
2006/01/04(水) 18:14:210685デフォルトの名無しさん
2006/01/04(水) 18:22:48ありがとうございます。
ループを回して、改行を終了条件にすればいいんですね
>>682
getsでできました!
こんな関数初めて知りました
ありがとうございます
sscanfについても調べてみます
>>684
試したのですが、入力を受け付けずに次の処理に行ってしまいます
0686魚チョコ
2006/01/04(水) 18:25:260687デフォルトの名無しさん
2006/01/04(水) 18:25:47>>入力文字列にスペースが無い場合に対応できない
>
>どゆこと?
入力する文字列が
"all people"などではなく
"everyone"のようにスペースを含んでいない場合です
0688デフォルトの名無しさん
2006/01/04(水) 18:26:47頼むからgets()だけは使わんでくれ。
0689デフォルトの名無しさん
2006/01/04(水) 18:27:45どっちも scanf("%s ",s); で入力できるはずだけど?
改行も空白の一種なのは認識してる?
0690デフォルトの名無しさん
2006/01/04(水) 18:28:580691魚チョコ
2006/01/04(水) 18:30:53int gets255(char* str)
{
int n, ch;
n=0;
while('o'){
ch=getchar();
if ( ch == 10 || ch < 0 ) break;
if ( n < 255 ) { *str++=ch; n++; }
}
*str=0;
return n;
}
0692デフォルトの名無しさん
2006/01/04(水) 18:33:12マジレスしていいんかウケ狙いかよーわからん
0693デフォルトの名無しさん
2006/01/04(水) 18:33:51そこで10とか使うようでは説得力0だな。
0694デフォルトの名無しさん
2006/01/04(水) 18:35:010695デフォルトの名無しさん
2006/01/04(水) 18:36:17C言語だけじゃ絶対無理。
0698デフォルトの名無しさん
2006/01/04(水) 18:52:460699デフォルトの名無しさん
2006/01/04(水) 18:55:33プログラミング言語ができるということは言うなれば基礎。
実際に何かソフトウェアを作ることは応用に当たる。
その差が有るから695の言うとおりで、
Cだけではソフトウェアを作ることができない。
0700デフォルトの名無しさん
2006/01/04(水) 19:04:58ちょwwwwwwwww
俺が言ったのはgetsじゃなくて「f」gets
getsは何文字でも読んじゃうからマジヤバス
0701デフォルトの名無しさん
2006/01/04(水) 19:12:09なるほど
だからfgetsなんですね
勘違いしてました・・・
fgets(stdin,*,s)に変更します
0702デフォルトの名無しさん
2006/01/04(水) 20:12:550703デフォルトの名無しさん
2006/01/04(水) 20:15:13fgets(s,*,stdin)ですね・・お恥ずかしい
0704デフォルトの名無しさん
2006/01/04(水) 20:32:23fgets(s, sizeof(s)/sizeof(s[0]),stdin) とやると安心。
さらにfgetsの戻り値がnullでないかエラーチェックする方法もある。
0705704
2006/01/04(水) 20:36:390708デフォルトの名無しさん
2006/01/04(水) 21:02:200709704
2006/01/04(水) 21:38:150710デフォルトの名無しさん
2006/01/04(水) 22:25:100711デフォルトの名無しさん
2006/01/04(水) 22:45:06そう!!セミコロンが無い!!!(`∀´)
0712デフォルトの名無しさん
2006/01/04(水) 22:48:580713デフォルトの名無しさん
2006/01/04(水) 23:20:000714デフォルトの名無しさん
2006/01/04(水) 23:32:310715デフォルトの名無しさん
2006/01/04(水) 23:33:520716デフォルトの名無しさん
2006/01/04(水) 23:36:34そういえばsizeofで型でもないのに括弧をつけるのはやや一般的ではないと思う。
0717デフォルトの名無しさん
2006/01/04(水) 23:40:240718デフォルトの名無しさん
2006/01/04(水) 23:54:060719デフォルトの名無しさん
2006/01/04(水) 23:54:330720デフォルトの名無しさん
2006/01/04(水) 23:56:160721デフォルトの名無しさん
2006/01/04(水) 23:57:16() を必ずつけるという主張(というより宣言か)は明白に非標準
0722デフォルトの名無しさん
2006/01/04(水) 23:57:440723デフォルトの名無しさん
2006/01/04(水) 23:58:02ポイントかも。
0724デフォルトの名無しさん
2006/01/05(木) 00:00:470725デフォルトの名無しさん
2006/01/05(木) 00:01:20非標準ってのは、標準Cではないという意味?
0726デフォルトの名無しさん
2006/01/05(木) 00:01:29「個人的」好みという主張は論議に値しない
0727デフォルトの名無しさん
2006/01/05(木) 00:02:10() がなきゃ ill-formed とでも言わんばかりに金切り声くるもん
0728デフォルトの名無しさん
2006/01/05(木) 00:04:09それでもやめないんだよな、、、
0729デフォルトの名無しさん
2006/01/05(木) 00:04:16ソースなんて掛けてんじゃねえよ、バカ!
0730デフォルトの名無しさん
2006/01/05(木) 00:05:02俺は塩・胡椒派
0731デフォルトの名無しさん
2006/01/05(木) 00:05:220732デフォルトの名無しさん
2006/01/05(木) 00:05:370733デフォルトの名無しさん
2006/01/05(木) 00:07:510734デフォルトの名無しさん
2006/01/05(木) 00:08:14確かに腹に入れば気にならないが、その前に味わいたいじゃん
0735デフォルトの名無しさん
2006/01/05(木) 00:11:290737デフォルトの名無しさん
2006/01/05(木) 00:13:08どこを読んで文法違反だと?
0738デフォルトの名無しさん
2006/01/05(木) 00:13:560739デフォルトの名無しさん
2006/01/05(木) 00:15:180740デフォルトの名無しさん
2006/01/05(木) 00:16:34どっちでも問題ないなら好きな方使えばいいじゃねーか
0741デフォルトの名無しさん
2006/01/05(木) 00:17:16何に照らして問題かが
いくら言っても通じない
0742デフォルトの名無しさん
2006/01/05(木) 00:42:36ごめんなさい
どういう場合にカッコをつけるorつけないのが問題に
なるのかよくわからないので具体例で教えていただけると・・・
0743デフォルトの名無しさん
2006/01/05(木) 00:46:08そいつが根ざしている基本方針があさってを向いているんだよ
0744デフォルトの名無しさん
2006/01/05(木) 00:50:50所属している何らかの団体のコーディング規則に反していない限りは、
何も問題にならない。ただの好みの問題。
0745デフォルトの名無しさん
2006/01/05(木) 00:53:450746デフォルトの名無しさん
2006/01/05(木) 00:55:000747デフォルトの名無しさん
2006/01/05(木) 00:55:430748デフォルトの名無しさん
2006/01/05(木) 01:01:39枝葉末節の誤入力
0749デフォルトの名無しさん
2006/01/05(木) 01:10:20文字列か整数かを見分ける方法ってありますか?
また、その情報(文字列または整数)をlongの型に入れてさらに他の変数に付加情報をつけ
表示方法を変えたいのですが・・・
例:
long *AAA; /* AAAの中身はわからない */
long BBB; /* BBBの中身が0ならAAAを文字列として表示 */
/* BBBの中身が1ならAAAを整数として表示 */
できますか?
0750デフォルトの名無しさん
2006/01/05(木) 01:15:03できない
つーか、自分で答え書いてるやん
型情報をつければいい
0751デフォルトの名無しさん
2006/01/05(木) 01:15:58>long *AAA; /* AAAの中身はわからない */
どうみてもAAAの中身はlong型のポインタだし
*AAAはlong型に決まってるよな
C++じゃあるまいし引数として受け取る変数の中身なんて決まってるだろ
0752デフォルトの名無しさん
2006/01/05(木) 01:17:56AAAから変換したい文字列と整数が、どんな値の範囲かにもよるが、
やろうと思えばできるけど、かなりアクロバット。
本当にそんな仕様にしないといけないのか、
プログラム設計から考え直した方がいい。
0753デフォルトの名無しさん
2006/01/05(木) 01:19:100754デフォルトの名無しさん
2006/01/05(木) 08:58:47a = sizeof int * 10
後者はきもくないか?
0755デフォルトの名無しさん
2006/01/05(木) 09:15:500756デフォルトの名無しさん
2006/01/05(木) 09:19:18その前に後者はコンパイルエラー。
0757デフォルトの名無しさん
2006/01/05(木) 09:34:28つーか、ならカッコ必須じゃん。カッコ無しで使ってるやつテラフシギ
0758デフォルトの名無しさん
2006/01/05(木) 09:35:14a = -a * 10;
a = *p * **pp;
単項がきもいやつぁ C 界では異端だよ
黙ってる分には構わんがガタガタ言うやつは氏ね
0759デフォルトの名無しさん
2006/01/05(木) 09:37:48*pで助かってる様なもんで、pにだったら途端に括弧つけるんだろ?
0760デフォルトの名無しさん
2006/01/05(木) 09:43:330761魚チョコ
2006/01/05(木) 09:47:430762デフォルトの名無しさん
2006/01/05(木) 09:49:09ってか、 sizeof int って書くとエラーになるじゃん。かっこつけ
たくないとか好みの問題じゃないよ。
ユーザー定義型だとカッコ無しでも平気みたいだけど、内蔵型と
そうでないとき書き方を変えてるほうが一貫性無いだろ。
0763デフォルトの名無しさん
2006/01/05(木) 10:00:43仕様を理解してないやつが一貫性とは笑わせてくれる
0764デフォルトの名無しさん
2006/01/05(木) 10:03:43お前のとこのコンパイラじゃどうかしらんが
0765デフォルトの名無しさん
2006/01/05(木) 10:06:11愚にもつかない即レスは煽り屋以外の誰も期待してない
0766デフォルトの名無しさん
2006/01/05(木) 10:08:270767デフォルトの名無しさん
2006/01/05(木) 10:10:150768デフォルトの名無しさん
2006/01/05(木) 10:13:11日本語読めないのか?
0769デフォルトの名無しさん
2006/01/05(木) 10:19:47もともと「式」と「識別名」は文法上あらわれる位置が全然違うもので
たまたま sizeof のところが似てるからって同じにしなきゃならんという道理はない
どうしても sizeof の第1オペランドが型識別子の場合の括弧を必須にしたいんなら
あんたが ISO のワークグループにでも参加したらどうだ?
0770デフォルトの名無しさん
2006/01/05(木) 10:20:50s/「識別名」/「型識別名]/
0771デフォルトの名無しさん
2006/01/05(木) 10:21:02型名ではなく、式ならsizeofには括弧が要らない。
0772デフォルトの名無しさん
2006/01/05(木) 10:40:41+sizeof の第1オペランドが式の場合
あーあ、何やってんだろ俺・・・
0773デフォルトの名無しさん
2006/01/05(木) 14:03:15そもそもカッコつけないとエラーになるんだったら議論の余地ないじゃんよ
0774デフォルトの名無しさん
2006/01/05(木) 14:03:48「sizeof の取り得るオペランドは``式''か``キャスト''」
って, 覚えさせられた.
表現に問題はあるが, 現実的には無問題.
0775デフォルトの名無しさん
2006/01/05(木) 15:07:11組み込みだと駄目っぽい。組み込み型でカッコ無しだとあいまいな
ところが生じるとも思えんのだが、何でだろ?
まあ、カッコ書いとけば間違いない。
returnはどんな場合でもカッコ無しで問題ないからつけなくても
問題ない。
0776デフォルトの名無しさん
2006/01/05(木) 16:00:24複文の時には{}を付けなければならないけど。
0777デフォルトの名無しさん
2006/01/05(木) 16:12:200778魚チョコ
2006/01/05(木) 16:15:470779デフォルトの名無しさん
2006/01/05(木) 16:22:25付けるとこんなことに...
---test.c---
int
main()
{
{struct x {struct x *next; char *data;};}
{struct x *xp;}
{struct x x0;}
{xp = &x0;}
/* 続く */
}
---
% cc test.c
test.c: In function `main':
test.c:6: error: storage size of 'x0' isn't known
test.c:7: error: `xp' undeclared (first use in this function)
test.c:7: error: (Each undeclared identifier is reported only once
test.c:7: error: for each function it appears in.)
test.c:7: error: `x0' undeclared (first use in this function)
%
0780デフォルトの名無しさん
2006/01/05(木) 16:38:360782デフォルトの名無しさん
2006/01/05(木) 16:47:440783デフォルトの名無しさん
2006/01/05(木) 17:04:05>>779=NULL;
0784デフォルトの名無しさん
2006/01/05(木) 17:43:24マジレスするとつけたほうが良い。現実そうなってるかどうかは
別問題だが、つけたほうがいいには違いない。
0785デフォルトの名無しさん
2006/01/05(木) 17:55:41ユーザー定義型も括弧が必要だと思うが。
0786デフォルトの名無しさん
2006/01/05(木) 17:55:59> 一貫性がどうこう言っている奴は単文に{}を必ず付けるの?
> 複文の時には{}を付けなければならないけど。
{}を付けた時点で単文ではなくなるだろ。
0787{魚チョコ;}
2006/01/05(木) 18:12:13はいはい、{ /* コメントもちゃんと { } で囲んでおこうね */ }
{ // てゆーかこの手のネタを食っちゃいけないのか ミ゚仝 ゚ ミ
}
0788デフォルトの名無しさん
2006/01/05(木) 18:20:38つまり、
if (foo < bar) foo = bar;
for (p = str; *p; ++p) ;
こう書くか
if (foo < bar) {
foo = bar;
}
for (p = str; *p; ++p) {
}
こう書く。
0789デフォルトの名無しさん
2006/01/05(木) 18:23:28str代入してインクリメントってなんか違和感感じるなw
俺は前者だな。
0790デフォルトの名無しさん
2006/01/05(木) 18:27:26コンパイラなんだい? VC6だとユーザー定義型(構造体とか)
はカッコ無しでも通るよ
0791{魚チョコ;}
2006/01/05(木) 18:32:07おやおや、素早いレスだことで。考え変えた。ここって辛気臭いプログラムでたまったストレスを発散させるとこだったのねえ。
てえわけで
for ( p=str; *p; ++p ) ;
だ。末尾のセミコロンが軽くて見づらいから、どうせなら、
for ( p=str; *p; ++p ) { ; }
と書くか、
for ( p=str; *p; ++p ) {
;
}
と書いた方がああしっかり空ループなんだなあとわかっていいんじゃないか? >>788みたいな馬鹿が好きそうなコードだこのチンカス ミ ゚ 〜゚ミ
0792デフォルトの名無しさん
2006/01/05(木) 18:44:33俺はVC7.1を使っていて括弧をつけないとだめだが、
VC6なら通るという問題ではなくて、規格で構文がそう定められているから必要なんだ。
0793デフォルトの名無しさん
2006/01/05(木) 18:47:25C/C++ Coding Style Thread
http://pc8.2ch.net/test/read.cgi/tech/1096687703/l50
0794デフォルトの名無しさん
2006/01/05(木) 19:05:12>規格で構文がそう定められている
つうことはVC6が基準を満たしてないのね。了解。
まあおれはsizeofにはカッコつける派なので問題ない。
0795デフォルトの名無しさん
2006/01/05(木) 20:02:12>>765 と >>769 で答えが出てるのに
まだ引っ張ってたのか。乙。
0796デフォルトの名無しさん
2006/01/05(木) 20:38:48宣言と文は区別しろ。C++じゃないんだから。
0797デフォルトの名無しさん
2006/01/05(木) 21:13:43>>>788馬鹿
他人を馬鹿呼ばわりかよ、だからうざいってんだ。
>おやおや、素早いレスだことで。考え変えた。ここって辛気臭いプログラムでたまったストレスを発散させるとこだったのねえ。
悪いな、たまたまだ。現にこのレスは遅れたからな。
>てえわけで
>for ( p=str; *p; ++p ) ;
>だ。末尾のセミコロンが軽くて見づらいから、どうせなら、
>for ( p=str; *p; ++p ) { ; }
>と書くか、
>for ( p=str; *p; ++p ) {
>;
>}
>と書いた方がああしっかり空ループなんだなあとわかっていいんじゃないか? >>788みたいな馬鹿が好きそうなコードだこのチンカス ミ ゚ 〜゚ミ
つーか、見づらいというより醜いな。まるで糞コテ愛用のAAのようだ。
0798デフォルトの名無しさん
2006/01/05(木) 22:13:250799デフォルトの名無しさん
2006/01/05(木) 22:18:04支持する
0800デフォルトの名無しさん
2006/01/05(木) 23:20:230801デフォルトの名無しさん
2006/01/06(金) 00:31:12func((DWORD)string); // C4311: warning C4311: 'type cast' :
上記のC4311: warningを#pragmaなどを使わずに抑制する方法を教えていただけませんか?
0802デフォルトの名無しさん
2006/01/06(金) 00:37:140803魚チョコ
2006/01/06(金) 00:39:27そりゃ printf に似たことをしたいってんだろう。正確には分からないが……。
問題は "long *AAA"。AAA がポインターなのは分かるが、AAA を参照した先に文字列があるのかどうかだ。
もしかすると 【呼ぶ前】 *AAA=0x30313233; みたいな固定長文字列(つーか多バイト文字定数)かもしれないし。そうなりゃエンディアンの影響受けるし。
もしかすると、【呼ばれて】 char *CCC; CCC=(char*)AAA; として扱って欲しいのかもしれないし。
もしかすると 【呼ぶ前】 *AAA=(long)"uochoco"; long 整数と文字列の先頭へのポインターが記憶場所を共用してるのかもしれないし。そうなるとポインターが long に納まりきるかunion 使えって話になるし。
0804801
2006/01/06(金) 00:40:47インタフェイスがDWORDなのですが、
そのDWORDをまた新たにポインタにキャストしなおして再利用したいのです。
windowsでいうとSetWindowLong();のような感じです。
0805デフォルトの名無しさん
2006/01/06(金) 00:44:25プロジェクトのプロパティ→C/C++→General→Detect 64-bit Portability IssuesをNoに。
あとスレ違い。
0806804
2006/01/06(金) 00:50:28言語レベルでは抑制できないんですね。
このwarningを出すのはVC++の仕様だとしたらVC++の設定で抑制してもいいですね。
どうもありがとうございました。
>あとスレ違い。
そのようでしたね。失礼しました。
0807806
2006/01/06(金) 00:55:12それをDWORDにキャストすると情報が欠如するってんでwarningが出るんですね。
すっきりしました。
0808デフォルトの名無しさん
2006/01/06(金) 01:12:110809デフォルトの名無しさん
2006/01/06(金) 01:32:27> インタフェイスがDWORDなのですが、
> そのDWORDをまた新たにポインタにキャストしなおして再利用したいのです。
ポインタをDWORDにキャストして、受け側でポインタ型にキャストし直す、
など、腐った設計するな。
素直に void * で渡して、型を識別する情報と、
void * で示す先のオブジェクトのサイズを渡しておけ。
# 元々主旨の違うI/Fを参考にするな!
0810デフォルトの名無しさん
2006/01/06(金) 01:36:46しかしSetWindowLongを使ったポインタの受け渡しは、
ウインドウをクラスにカプセル化する際に必ずといっていいほど出てくるけどね。
スレ違いだな。
0811デフォルトの名無しさん
2006/01/06(金) 01:41:290812デフォルトの名無しさん
2006/01/06(金) 04:41:48で文字が消えるはずですけど消えません。
何でですか?
0813デフォルトの名無しさん
2006/01/06(金) 05:19:38それは端末の都合。言語とは関係ないのでスレ違い。
0814デフォルトの名無しさん
2006/01/06(金) 07:00:53SetWindowLongPtr
0815デフォルトの名無しさん
2006/01/06(金) 13:49:19unsigned char r, g, b;
} pixel;
static pixel red = {255, 0, 0};
こんな感じで、ピクセルを表す構造体と基本的な色の変数が定義されたヘッダがあるんですが
このヘッダをincludeしたファイルをコンパイルすると
"redが定義されてるけど使われてないぞ"って類のwarningが大量に出ます。
基本色のピクセルはよく使用するのであらかじめ定義しておきたいのですが、
使わないときにはwarningが出てしまうので嫌なんです。
このwarningを回避する方法って無いでしょうか?
0816デフォルトの名無しさん
2006/01/06(金) 13:52:19constつけてもダメ?
gccで-std=c99ならそれでいけそうだが。
#つーか、該当環境スレ向けか?
0817デフォルトの名無しさん
2006/01/06(金) 14:13:51Fortranで書かれたプログラムをCで使いたいのですが方法がわかりません。
またはFortranソースをCに書き換えてくれるようなソフトはありますか?
ttp://www.vector.co.jp/soft/win95/prog/se056813.html
を見つけたのですがVC6を使っているのでよくわかりませんでした。
具体的に使いたいFortranソースは
ttp://www.simplex.t.u-tokyo.ac.jp/~sugihara/opensoft/3d/chull/sich3.f
です。
コンパイラは C:VC6、Fortran:インテルVisualFortran9.0です。
よろしくお願いいします。
0819デフォルトの名無しさん
2006/01/06(金) 16:44:10f2cでなんとかならね?
0820デフォルトの名無しさん
2006/01/06(金) 17:00:42fgetsとsscanfを使って一行入力ができるようにしていただきたい。
お願いします。
#include <stdio.h>
#include <string.h>
main()
{
int i;
char buf[100];
static char *dic[10][2] = { /*辞書*/
{"eat","ate"},{"move","moved"},{"copy","copied"},
{"die","dyed"},{"walk","walked"},{"take","took"},
{"hit","hit"},{"swim","swam"},{"run","ran"},{"play","played"}};
while (scanf("%s",buf) != EOF){
for(i=0; i<10; i++){
if(strcmp(buf,dic[i][0]) == 0) break;
}
if(i==10)
printf("%s\n", buf);
else printf("%s\n", dic[i][1]);
}
}
0821デフォルトの名無しさん
2006/01/06(金) 17:01:060822デフォルトの名無しさん
2006/01/06(金) 17:11:51宿題は宿題スレに。
俺って親切だな。
0823デフォルトの名無しさん
2006/01/06(金) 17:13:200824デフォルトの名無しさん
2006/01/06(金) 17:16:270825デフォルトの名無しさん
2006/01/06(金) 18:39:34行列計算などをするとき、配列つかってプログラム書くよりポインタでプログラム書いた方が
演算速度が速いって聞いたんですが、どのぐらいの違うもんなんですか。
0826デフォルトの名無しさん
2006/01/06(金) 18:43:53乳首3つ分
0827デフォルトの名無しさん
2006/01/06(金) 18:51:27いやいや
マ○コ3つ半と○ンコ1つぶんくらいじゃね?わからんけど
0828デフォルトの名無しさん
2006/01/06(金) 19:11:44釣れますか?
0829デフォルトの名無しさん
2006/01/06(金) 19:22:19マ○コ4個半でいいじゃねーかよw
0830デフォルトの名無しさん
2006/01/06(金) 19:52:57君がポインタを使って書いたものより、俺が配列を使って書いたものの方が恐らく速い。
0831デフォルトの名無しさん
2006/01/06(金) 19:53:19実際のところ、現在のコンパイラはそれくらい最適化でどっちでも同じコードを吐く。
だから読みやすかったりわかりやすかったりするほうを選びなさい。
0832デフォルトの名無しさん
2006/01/06(金) 19:53:55君が配列を使って書いたものより、俺がポインタを使って書いたものの方が恐らく遅い。
0833デフォルトの名無しさん
2006/01/06(金) 19:58:19ポインタは速くて配列が遅い、
なんて迷信いつまでも信じるなよ。
0834デフォルトの名無しさん
2006/01/06(金) 20:19:340835デフォルトの名無しさん
2006/01/06(金) 20:21:36ダメじゃんw
0836デフォルトの名無しさん
2006/01/06(金) 20:36:290837デフォルトの名無しさん
2006/01/06(金) 20:39:39アルゴリズムが同じなら、速度に影響があるのはこんなところ?
・使ってる変数が少なければ少ないほどよい。⇒レジスタへの割り当てや保存/復帰の手間が減る。
・演算間の依存関係が少なければ少ないほどよい。⇒スーパースカラ(スケイラ?)が効きやすくなる。
・分岐は少なければ少ないほどよい(特にループ中)。⇒パイプラインの乱れが減らせる。
・分岐するときの真と偽の比は大きければ大きいほどよい。⇒分岐予測が効きやすくなる。
・メモリアクセスは可能な限り局所化されているとよい。⇒データキャッシュが効きやすくなる。
・実行頻度の高い範囲がキャッシュの大きさ以下だとよい。⇒命令キャッシュが効きやすくなる。
0838デフォルトの名無しさん
2006/01/06(金) 21:05:57変数への入力を行い条件に合わなかった場合入力をやり直すプログラムについてです。
以下が簡易的に示したものですが、同じ入力文が2つもあってどうも不恰好になってしまい困っています。
実はこの部分を繰り返すため、例えば初めの入力文がないと2回目以降の繰り返しの時にスルーされてしまいます。
{ 入力文
while(予期していない入力){
入力文}
}
0839デフォルトの名無しさん
2006/01/06(金) 21:08:58それだけなら do-while でいい。
予期しない入力があった場合に特別な処理を挟みたい場合は、
goto 使うのが一番すっきりする。
0841デフォルトの名無しさん
2006/01/06(金) 21:19:27ありがとうございました。
本とか「高速に演算できるにポインタをつかったプログラム」とかかいてあるんですけど
あんまり関係なさそうですね。
0842デフォルトの名無しさん
2006/01/06(金) 21:47:160843デフォルトの名無しさん
2006/01/06(金) 21:47:530844デフォルトの名無しさん
2006/01/06(金) 21:52:26漏れもそう思う。
最適化しちゃうコンパイラもあるかも無いかもしれないし。
0845デフォルトの名無しさん
2006/01/06(金) 21:55:18さすがにバブルソートとかは論外だけど
0846魚チョコ
2006/01/06(金) 21:56:50入力部分を2回並べるか誘導変数を使ってループにするか
悩んだことあったなあ。どっちがいいかねえ。
0848デフォルトの名無しさん
2006/01/06(金) 22:40:560849デフォルトの名無しさん
2006/01/06(金) 22:42:13遅すぎ。
0850デフォルトの名無しさん
2006/01/06(金) 23:19:230851デフォルトの名無しさん
2006/01/06(金) 23:21:580852817
2006/01/06(金) 23:36:07さきほどやってみようと試みましたが
Borland C++ Builderとf2cの使い方がよくわかりませんでした。
初心者なもので申し訳ないです。
0853928
2006/01/06(金) 23:42:00コンパイラの使い方はスレ違い。
http://pc8.2ch.net/test/read.cgi/tech/1135127048/l50
とかでも行けば?
0854928
2006/01/06(金) 23:42:57まあいいやハッハー
0855デフォルトの名無しさん
2006/01/07(土) 00:51:540856デフォルトの名無しさん
2006/01/07(土) 06:28:29#define PATHNAME "X.TXT"
この、PATHNAMEを使って
"X.TXT"
と、
L"X.TXT"
の両方を生成したいのですが、##が効きません。どう書けばよいのでしょうか?
dwResCnt = GetFullPathNameA(PATHNAME, BUFSIZE, pathname, &filename);
dwResCnt = GetFullPathNameW(L ## PATHNAME, WBUFSIZE, wpathname, &wfilename);
0857デフォルトの名無しさん
2006/01/07(土) 06:50:30##文字列連結演算子はマクロ定義の中でのみ有効。
0858デフォルトの名無しさん
2006/01/07(土) 09:35:430859デフォルトの名無しさん
2006/01/07(土) 10:31:16C言語のフリーソフトってありますか?
0860デフォルトの名無しさん
2006/01/07(土) 10:37:51なのかな?
0861デフォルトの名無しさん
2006/01/07(土) 10:39:26【コンパイラ】
gcc
http://gcc.gnu.org/
【Win32用の開発環境のみ。】
gcc-cygwin
http://www.cygwin.com/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/
Visual C++ Developer Center: Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/
【ライセンスや機能などに問題あり】
Microsoft C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
0862デフォルトの名無しさん
2006/01/07(土) 11:00:140863デフォルトの名無しさん
2006/01/07(土) 11:06:05それだと、UNICODEで内容が変わっちまうでしょ。
なぜだか分からんが、明示して呼び出したいみたいだし。
0864デフォルトの名無しさん
2006/01/07(土) 11:35:35ところでプリプロセッサで↓こんな変換するの何だったっけ?
QUOTE(Nullpo) → "Nullpo"
#だったかなにかを使ったと思うんだが思い出せん(;´Д`)
0865デフォルトの名無しさん
2006/01/07(土) 11:42:06#define STR(s) XSTR(s)
0866デフォルトの名無しさん
2006/01/07(土) 11:44:35のとき
"Nullpo"としたいなら XSTR(Nullpo)
"((void*)0)"にしたいなら STR(Nullpo)
0867デフォルトの名無しさん
2006/01/07(土) 11:48:430868デフォルトの名無しさん
2006/01/07(土) 16:01:220869デフォルトの名無しさん
2006/01/07(土) 16:45:360870デフォルトの名無しさん
2006/01/07(土) 17:07:08わかる方がいましたら教えてください。よろしくお願いいたします。
ある自然数nを与えて、1〜nまでの数の考えられる並べ方(n!通り)を全て出力する。
例)n=3, 並べ方は3!=6通り。
--> 1-2-3, 1-3-2, 2-1-3, 2-3-1, 3-1-2, 3-2-1,
0871デフォルトの名無しさん
2006/01/07(土) 17:28:070872デフォルトの名無しさん
2006/01/07(土) 17:44:14これだと宣言の構文エラーが出てしまうのですがどうすれば良いでしょうか。
本当に初歩的ですみませんorz
0873デフォルトの名無しさん
2006/01/07(土) 17:46:41-"
+'
0874デフォルトの名無しさん
2006/01/07(土) 17:48:32#include <stdio.h>
#include <stdlib.h>
void swap(int *p, int *q)
{
int t = *p;
*p = *q;
*q = t;
}
int next_perm(int *n, int s)
{
int i = s, j = s, k;
while(--i > 0 && n[i - 1] >= n[i]){}
if(i <= 0) return 0;
for(k = i; i < --j; i++) swap(&n[i], &n[j]);
for(i = k; n[i] <= n[k - 1]; i++){}
swap(&n[k - 1], &n[i]);
return 1;
}
0875デフォルトの名無しさん
2006/01/07(土) 17:49:02{
int s, i, *n;
if(ac != 2){
fprintf(stderr, "Usage: perm N\n");
return 1;
}
if(!(s = atoi(av[1]))){
fprintf(stderr, "Error: N = %d\n", s);
return 1;
}
if(!(n = malloc(s * sizeof(int)))){
fprintf(stderr, "Error: no memory\n");
return 1;
}
for(i = 0; i < s; i++) n[i] = i;
do{
for(i = 0; i < s; i++) fprintf(stdout, "%d ", n[i] + 1);
fprintf(stdout, "\n");
}while(next_perm(n, s));
free(n);
return 0;
}
0876デフォルトの名無しさん
2006/01/07(土) 17:52:28static char nullpo[] = { 'a', 'b', 'c', 'd' };
で試しましたが、駄目でした。
0877デフォルトの名無しさん
2006/01/07(土) 17:57:17#include "stdio.h"
#define N 3
void search(int* pBuf, int pos){
int ic, jc, flag;
for (ic = 0; ic < N; ic++){
for (jc = 0, flag = 0; jc < pos; jc++){
if (pBuf[jc] == ic){
flag = 1;
break;
}
}
if (flag) continue;
if (pos + 1 == N){
for (jc = 0; jc < N - 1; jc++)
printf("%d - ", pBuf[jc]);
printf("%d\n", ic);
return;
}
pBuf[pos] = ic;
search(pBuf, pos + 1);
}
}
void main(void){
int data[N - 1] = {0};
search(data, 0);
}
0878デフォルトの名無しさん
2006/01/07(土) 18:03:11コンパイラは何を使っている?
gcc, Borland, VC あたりで通らないなら別なミスの可能性が高い
0879デフォルトの名無しさん
2006/01/07(土) 18:11:14static char *nullpo = { 'a', 'b', 'c', 'd' };
0880デフォルトの名無しさん
2006/01/07(土) 18:13:45スレ違いの質問に
何嬉しそうに答えてんだ莫迦。
0881デフォルトの名無しさん
2006/01/07(土) 18:16:53Borlandです。
0882デフォルトの名無しさん
2006/01/07(土) 18:17:43自分が答えられなかったからって僻んでるのは大人気ないですよ
0883デフォルトの名無しさん
2006/01/07(土) 18:24:55大嘘書くなや。
0884デフォルトの名無しさん
2006/01/07(土) 18:27:59単純な勘違いしてるんじゃない? もう一度冷静になってコードを
じっくり見てみたら。
0885デフォルトの名無しさん
2006/01/07(土) 18:46:320886デフォルトの名無しさん
2006/01/07(土) 19:32:06質問しても宿題スレか初心者スレに行けと言われるんだが
タイトル紛らわしいから変えた方がいいんじゃね?
0887デフォルトの名無しさん
2006/01/07(土) 19:49:021 から N までの数字を N 個並べる組み合わせをすべて
列挙するプログラムは C で書くとどうなりますか?
例えば N = 3 のとき
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
となるようにです。
よろしくおながいします。
0888デフォルトの名無しさん
2006/01/07(土) 19:49:520889デフォルトの名無しさん
2006/01/07(土) 19:56:090890デフォルトの名無しさん
2006/01/07(土) 19:59:540891デフォルトの名無しさん
2006/01/07(土) 20:27:24printf("
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
");
0892デフォルトの名無しさん
2006/01/07(土) 20:31:040893デフォルトの名無しさん
2006/01/07(土) 20:31:590894デフォルトの名無しさん
2006/01/07(土) 20:37:210895デフォルトの名無しさん
2006/01/07(土) 20:38:230896デフォルトの名無しさん
2006/01/07(土) 20:53:20これのどこがウソなのか聞きたいんだがw
0897デフォルトの名無しさん
2006/01/07(土) 21:09:32int i,j,n;
int **p;
n = 3;
p = (int**)malloc(sizeof(int*)*n);
for(i=0;i<n;i++){
p[i] = (int*)malloc(sizeof(int)*n);
}
というように二次元配列を動的に確保した場合、
メモリを開放するときは、ただ単に
free(p);
と書けばいいのでしょうか?
0898デフォルトの名無しさん
2006/01/07(土) 21:15:500899デフォルトの名無しさん
2006/01/07(土) 21:25:45やはりmallocと同じ様にfreeしなければ駄目ですか。
スッキリしました、レスありがとうございます。
0900899
2006/01/07(土) 21:30:15一応聞いておきたいのですが、
for(i=0;i<n;i++){
free(p[i]);
}
free(p);
であっていますか?
0901デフォルトの名無しさん
2006/01/07(土) 21:37:21俺も聞きたいナ、どこが大嘘なんだ?
0902デフォルトの名無しさん
2006/01/07(土) 21:45:11ttp://www.kyoto-su.ac.jp/~kbys/proC/heap/
0903魚チョコ
2006/01/07(土) 21:55:33合ってるけど普通に malloc(n*n*sizeof(int)) で駄目な理由はあるんですかね。
そのやり方だと何かとめんどくさいと思うんですけど。
0904デフォルトの名無しさん
2006/01/07(土) 21:58:33そっちじゃなくて、後の方だろ。
0905デフォルトの名無しさん
2006/01/07(土) 22:02:27「質問」と「丸投げ」の違いを憶えて出直しな
0906デフォルトの名無しさん
2006/01/07(土) 22:05:18malloc(n*n*sizeof(int)) は、これはこれで別の面倒がある
0907デフォルトの名無しさん
2006/01/07(土) 22:09:58malloc(sizeof(int)*n*n + sizeof(int*)*n)
0908デフォルトの名無しさん
2006/01/07(土) 22:17:21メモリ確保自体では駄目な理由はないです。
多次元配列を用いず、一次元で済ますというのはもっともだと思います。
ただそれとは別の問題で、
とあるライブラリの関数に入力データの形式にあわせて、
二次元や、三次元の配列を指定してやらなければならないものがあって、
それが原因で今回は多次元で確保する必要がありました。
>>906
確かに一次元で全て済まそうとすると、
インデックスの計算などがやや煩雑になりがちですよね。
0909デフォルトの名無しさん
2006/01/07(土) 22:29:48添え字を乗算加算で計算するのは、一長一短やね。
0910デフォルトの名無しさん
2006/01/07(土) 22:42:340911デフォルトの名無しさん
2006/01/07(土) 22:59:44#define HOGE_LOOP(s) for(c = 0; c < row; ++c){ if(DEC < c+m){ break; } ##s }
// 略
HOGE_LOOP(printf("[%d:]______________________\t", m+c);)
のような記述を見かけたのですが、ありかなしかって言えばどちらでしょうか
ずっと気になってたんでちょっと聞いてみます
0912デフォルトの名無しさん
2006/01/07(土) 23:03:39## が出てくる意味がわからん
0913デフォルトの名無しさん
2006/01/07(土) 23:06:57ただ、こんなコード書いてきた奴はぶん殴るけど。
0914デフォルトの名無しさん
2006/01/07(土) 23:09:01トークンの接続じゃないか
0915デフォルトの名無しさん
2006/01/07(土) 23:19:27} と printf をつないでどうする気かがわからんと言っている
0916デフォルトの名無しさん
2006/01/07(土) 23:24:48はぁ?
0917デフォルトの名無しさん
2006/01/07(土) 23:25:05素直に無駄な記述と受け取っちゃ駄目なの?
0918デフォルトの名無しさん
2006/01/07(土) 23:25:320919デフォルトの名無しさん
2006/01/07(土) 23:27:31今回たまたま s が printf(〜); だったんで意味が通らなかったのかという見方は当然している
では、s に何が入ったとき ## に意味が出てくるのか? そこがわからんと言っている
0920デフォルトの名無しさん
2006/01/07(土) 23:32:16文法上、センテンスを入れないと無理っぽいね
0921デフォルトの名無しさん
2006/01/07(土) 23:43:56これってビルド通らないんだっけか。
まあ素直にこうかいたほうがいいけど。
static char *nullpo = "abcd";
0922デフォルトの名無しさん
2006/01/07(土) 23:58:35つーか、GCC じゃプリプロセス通らんのだが。
その ## のところで。
0923デフォルトの名無しさん
2006/01/07(土) 23:59:06a=1かつb=2、またはa=2かつb=3。というのは
(a==1)&&(b==2)||(a==2)&&(b==3)
これでいいのでしょうか
それとも
((a==1)&&(b==2))||((a==2)&&(b==3))
こうですか??
初心者ですがよろしくお願いします
m(_ _)m
0924デフォルトの名無しさん
2006/01/08(日) 00:00:54その場合はどっちでもいいんだけど、見やすさを考えて後者を使うべき
0925デフォルトの名無しさん
2006/01/08(日) 00:03:280926デフォルトの名無しさん
2006/01/08(日) 00:05:09工エェ工エェ(゜Д゜(゜Д゜)゜Д゜)ェエ工ェエ工
0927デフォルトの名無しさん
2006/01/08(日) 00:05:17嘘吐くな
0928デフォルトの名無しさん
2006/01/08(日) 00:05:42むしろカッコ要らない。
0929デフォルトの名無しさん
2006/01/08(日) 00:07:28どゆこと?
0930923
2006/01/08(日) 00:14:13とりあえず、925さんのようにやってみます。
0931デフォルトの名無しさん
2006/01/08(日) 00:35:18ん?別に間違ってないと思うが
0932デフォルトの名無しさん
2006/01/08(日) 00:38:07演算子の優先順位を調べてみ
これらの演算子の優先順位は == > && > || だから、
(a==1)&&(b==2)||(a==2)&&(b==3)
((a==1)&&(b==2))||((a==2)&&(b==3))
(a==1&&b==2)||(a==2&&b==3)
a==1&&b==2||a==2&&b==3
これらすべて同じ。でも、見易さを考慮して(a==1&&b==2)||(a==2&&b==3)が
いいと思う
0933デフォルトの名無しさん
2006/01/08(日) 00:39:530934デフォルトの名無しさん
2006/01/08(日) 00:42:370935デフォルトの名無しさん
2006/01/08(日) 00:43:07ただのアフォ
0936デフォルトの名無しさん
2006/01/08(日) 00:43:490937デフォルトの名無しさん
2006/01/08(日) 01:02:57リッチーの意図はおそらくそうだろう
だが今は関係ない単なる仕様で、一般の使用者は従うのみ
ISO C は原案者の手からは離れた存在で
現にリッチーでさえ確信のない機能が盛り込まれている
0938デフォルトの名無しさん
2006/01/08(日) 01:18:11オマエはドアホウなのは確定な、927は恥カキっこちゃん
932が正解、933、931、924も正しい
0939デフォルトの名無しさん
2006/01/08(日) 01:20:30あ、勘違いしたか?
優先順位を間違えてる連中をアフォだと言ったんだが
0940デフォルトの名無しさん
2006/01/08(日) 02:02:32実装によって違ったぞ
0941デフォルトの名無しさん
2006/01/08(日) 02:03:56省略して「知らない奴が馬鹿」と悦に入ってるのは真の馬鹿
0942デフォルトの名無しさん
2006/01/08(日) 03:20:530943デフォルトの名無しさん
2006/01/08(日) 03:23:34そういうご託は言葉を憶えてからにしな坊や
主語が「俺は」になってるうちは接点ねえけど
0944デフォルトの名無しさん
2006/01/08(日) 03:23:53&&と||の優先度が&& > ||なのは(少なくとも)C99では規定されてる
JIS X 3010:2003嫁
6.5の注釈で演算子の優先度は箇条の順序と同一と書かれていて
6.5.13に&&、6.5.14に||がある
0945デフォルトの名無しさん
2006/01/08(日) 03:24:00俺用語で話すなよ
0946デフォルトの名無しさん
2006/01/08(日) 03:25:13いや待て、規格合致でない処理系の目撃証言かも知れんぞ
0947デフォルトの名無しさん
2006/01/08(日) 03:25:45そんな処理系は窓からry
0948デフォルトの名無しさん
2006/01/08(日) 03:28:17始末書で済めばラッキーだね
0949デフォルトの名無しさん
2006/01/08(日) 06:30:340950デフォルトの名無しさん
2006/01/08(日) 06:31:360951デフォルトの名無しさん
2006/01/08(日) 07:17:521.まずint型のN個の数字の入る配列を作成して1〜Nまでの数字を格納
2.1で作った配列の中から数字を1つ取り出して1桁目に格納
3.N−1個の数字の入る配列を作成して、2で取り出した数字を抜いた1〜Nまでの数字を格納
4.3で作った配列の中から数字を1つ取り出して2桁目に格納
5.N−2個の数字の入る配列を作成して、2と4で取り出した数字を抜いた1〜Nまでの数字を格納
6.この作業を全桁埋まるまで繰り返す
7.1〜6をN回繰り返して終了
3と5のところで配列を作成するのではなくて使用した数字にフラグを立ててもよい。
0952デフォルトの名無しさん
2006/01/08(日) 08:04:007が間違い。
全桁に対して配列をすべてなぞる形で組まなきゃ駄目だ。
あー、でもとりあえず>>951組んでアレンジすればなんとかなるべ。
0953デフォルトの名無しさん
2006/01/08(日) 12:02:510954デフォルトの名無しさん
2006/01/08(日) 12:08:30そのサイズだと、適当に乱数作って確率的素数判定法使うしかないんじゃね?
例えばこれとか
ttp://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A7%E3%83%AB%E3%83%9E%E3%83%BC%E3%81%AE%E5%B0%8F%E5%AE%9A%E7%90%86#.E3.83.95.E3.82.A7.E3.83.AB.E3.83.9E.E3.83.BC.E3.83.86.E3.82.B9.E3.83.88
まぁ俺もよく分からんので例えばだが、OpenSSLの実装でも見てみたらいいんじゃまいか?
0955SOS
2006/01/08(日) 17:47:23int i,price[3];
price[0]=400;
price[1]=500;
price[2]=300;
for(i=0;i<3;i++){
printf("%d\n",price[i]);
}
}
上記の合計金額を算出するように修正せよ(forループを用いる事)
とあるのですが、どのようにとけばいいか教えてください!
0956デフォルトの名無しさん
2006/01/08(日) 17:49:350957デフォルトの名無しさん
2006/01/08(日) 17:50:230958SOS
2006/01/08(日) 17:58:39お願いします!あさってテストなもんで・・・・
0959デフォルトの名無しさん
2006/01/08(日) 17:59:50Win32プログラミングのスレに移動してください
0960デフォルトの名無しさん
2006/01/08(日) 18:01:47堂々とマルチ宣言か
氏ね
0961デフォルトの名無しさん
2006/01/08(日) 18:05:360962デフォルトの名無しさん
2006/01/08(日) 18:12:12多倍長計算のライブラリでも拾ってきて計算
0963デフォルトの名無しさん
2006/01/08(日) 18:13:01printfの中のを++price[i]にしてみ
0964デフォルトの名無しさん
2006/01/08(日) 18:13:38main()
{
}
なんだよな。仮引数にvoidを明示することもなければmainがint型を返すことを明示することもない。
warningが気になるならvoid main()とせよとか書いてあるしな。
0965デフォルトの名無しさん
2006/01/08(日) 18:21:490966デフォルトの名無しさん
2006/01/08(日) 18:26:15そこを自力で。
0967デフォルトの名無しさん
2006/01/08(日) 18:27:42自力でライブラリ書けよ
0968デフォルトの名無しさん
2006/01/08(日) 18:29:47お前のような本末転倒型の「変なマニア」を作らないためだよ
0969デフォルトの名無しさん
2006/01/08(日) 18:31:45マジか。
近所の書店の入門本(しかないけど)全部それだった。
うち一冊でvoid main()にしろとか書いてあった。
0970デフォルトの名無しさん
2006/01/08(日) 21:17:50俺は面倒だとvoid main() って書くぜ
0971デフォルトの名無しさん
2006/01/08(日) 21:39:350972デフォルトの名無しさん
2006/01/08(日) 21:40:140973デフォルトの名無しさん
2006/01/08(日) 21:45:470974デフォルトの名無しさん
2006/01/08(日) 21:52:590975デフォルトの名無しさん
2006/01/08(日) 21:53:12まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
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/
0976デフォルトの名無しさん
2006/01/08(日) 21:56:330977デフォルトの名無しさん
2006/01/08(日) 21:58:100978976
2006/01/08(日) 22:01:34C,C++スレと何が違うの?
環境依存の有無だけ?
むこうはどっちでもおkなら、わざわざ分ける必要ないやん。
0979デフォルトの名無しさん
2006/01/08(日) 22:03:37どのスレと比べてんだ?
0980デフォルトの名無しさん
2006/01/08(日) 22:04:34http://pc8.2ch.net/test/read.cgi/tech/1135828083/
0981デフォルトの名無しさん
2006/01/08(日) 22:06:15なんて聞き返さないといけないほど乱立してるのは問題だよな
0982デフォルトの名無しさん
2006/01/08(日) 22:07:24int を返す main 関数の終端に達した場合、0 を返す
このことを意図して書いているコードにそれ以上文句たれても話がかみ合うことはない
0983デフォルトの名無しさん
2006/01/08(日) 22:08:24ツブすならそっちのスレだな。
0984デフォルトの名無しさん
2006/01/08(日) 22:12:210985デフォルトの名無しさん
2006/01/08(日) 22:13:25俺はC/C++スレとこことは棲み分けができていると思う。
向こうには初心者歓迎というスレタイに初心者が集まってきている。
そりゃたしかにここにはスレ違いなのが紛れ込んできて、
スレ違いだと追い返すのはしょっちゅうだけどさ。
あと、ここが要らなくてC/C++スレで十分というが、
なぜC++相談室ではそんなことを言い出さないのかがわからない。
C++相談室も昼頃に新スレが立ち、1000を向かえたばかりという絶好のタイミングだったのに。
0986デフォルトの名無しさん
2006/01/08(日) 22:18:07確かにそうなんだが、全く解説無しって言うのはちょっと気になる。
void mainは勘弁
0987デフォルトの名無しさん
2006/01/08(日) 22:18:17こっちのスレの話題はC++相談室に含まれるが、
C++相談室の話題はこっちのスレには含まれない。
合併するならこっちが吸収されるのがスジだろう。
0988デフォルトの名無しさん
2006/01/08(日) 22:18:54C言語なら俺に聞け! Part 120
http://pc8.2ch.net/test/read.cgi/tech/1136726279/
0989デフォルトの名無しさん
2006/01/08(日) 22:20:23環境依存の質問をいちいち追い返したり、気まぐれで誰かが回答するくらいなら、
それを受け入れてる向こうのスレの方が価値が有る。
0990デフォルトの名無しさん
2006/01/08(日) 22:21:22それはあなた個人がこのスレの記事についていけてないだけだ
現に、丸投げでも環境依存でもない C の話がちゃんとできている
0991デフォルトの名無しさん
2006/01/08(日) 22:23:27解説をするなら、何の章でやるべきだと思うんだ?
俺は特定の処理系に依存する要素(コマンドラインなど)の章だと思うが
0992デフォルトの名無しさん
2006/01/08(日) 22:33:44俺的には多少の環境依存は可だと認識しているけどな
環境依存と丸投げの多くが同時に来るんだよ
論点をはっきりさせようとしていないと、どちらも起こりやすくなるからな
ただ、「その環境」を使っていない人を閉め出す形が長く続くようなら
各人の良識で回避(=移動)しようやってのがわからないかい?
0993デフォルトの名無しさん
2006/01/08(日) 22:47:33いや、まさにその下らない理由
0994デフォルトの名無しさん
2006/01/08(日) 22:49:46これも承知でvoidと書くことがあるんだ
0995デフォルトの名無しさん
2006/01/08(日) 22:54:280996デフォルトの名無しさん
2006/01/08(日) 22:55:330998デフォルトの名無しさん
2006/01/08(日) 23:01:070999999
2006/01/08(日) 23:02:021000デフォルトの名無しさん
2006/01/08(日) 23:02:08乙
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。