C言語なら俺に聞け(入門篇)at TECH
C言語なら俺に聞け(入門篇) - 暇つぶし2ch78:デフォルトの名無しさん
06/05/29 19:51:58
英語の小文字の文字列をキーボードから入力した時、
その文字列の大文字を出力するプログラムを作ってください。
お願いします。scanf関数を使ってください。

79:デフォルトの名無しさん
06/05/29 20:15:47
>>78
氏ね。

80:デフォルトの名無しさん
06/05/29 20:20:50
>>78
if(標準入力がaならば)puts("A");をZまででOK

81:デフォルトの名無しさん
06/05/29 20:26:24
>>78
#include <stdio.h>
int main() {
int i=0; char s[100];
printf("英小文字だけを入力してください:\n");
fgets(s,sizeof(s),stdin);
for(;s[i];)i++[s]&=0xdf;printf("%s",s);
printf("Enterを押してください.\n");
scanf("%*[^\n]%*c");
return 0;}


82:デフォルトの名無しさん
06/05/29 20:35:51
>>81 ありがとうございます。でも、fgets,for,は習ってないので、
scanf,printfだけでお願いできますか?

83:デフォルトの名無しさん
06/05/29 20:42:52
#include <stdio.h>
#include <ctype.h>
int main() {
  int i = 0;
  char s[100];
  puts("英小文字だけを入力してください:");
  fscanf("%99s", s);
  for (; s[i]; ++i)
    s[i] = toupper(s[i]);
  puts(s);
  return 0;
}
次から宿題スレへ行け。

84:デフォルトの名無しさん
06/05/29 20:51:30
ctype,puts,fscanf,for,toupper.
分かりません。あと、宿題スレの人はscanfは分からないって。。。

85:デフォルトの名無しさん
06/05/29 20:55:24
>>77
ありがとうございます。
理解しました^^;。


86:デフォルトの名無しさん
06/05/29 21:01:27
>>84
宿題は自分でやりましょう。分からない所だけ聞きましょう。講義でアスキーコードやったでしょう。

87:デフォルトの名無しさん
06/05/29 22:34:44
#include <stdio.h>
int main(void){
char s[10];

printf("小英字列=");
scanf("%d",s);
printf("大英字列=%s\n",s);

return 0;
}


実行結果を  abcdef
ABCDEF
にしたいんですけどどこが間違ってますか?

88:デフォルトの名無しさん
06/05/29 22:37:15
重要な変換部分が無いんだが・・・

89:デフォルトの名無しさん
06/05/29 22:49:47
マジで教えてください。わけがわからなくなっちゃって。

90:デフォルトの名無しさん
06/05/29 22:50:37
#include <stdio.h>
#include <string.h>

int main(void){
char s[10];
int i;

printf("小英字列=");
scanf("%s",s);
for(i =0; i<(int)strlen(s);i++)
{
s[i] = s[i] - 0x20;
}

printf("大英字列=%s\n",s);

return 0;
}
間違いを指摘するのは面倒なので
これで納得しろ

91:デフォルトの名無しさん
06/05/29 22:54:48
for(i =0; i<(int)strlen(s);i++)
{
s[i] = s[i] - 0x20;
↑は習ってないんで、無しでお願いできますか?

92:デフォルトの名無しさん
06/05/29 23:00:01
0x20の意味を調べたいのですがキーワードを教えてください

93:デフォルトの名無しさん
06/05/29 23:08:13
0x20 = 32
とりあえず32に書き換えとけ

または
0x20 = ('a' - 'A')
でもOK

94:デフォルトの名無しさん
06/05/29 23:08:30
16進数

95:デフォルトの名無しさん
06/05/29 23:10:02 BE:239630786-#
toupper()つかっとけ。

96:デフォルトの名無しさん
06/05/29 23:10:43
なるほど。アスキーコードの差が32って事ですか?
forはどうにかなりませんかね?

97:デフォルトの名無しさん
06/05/29 23:12:10 BE:174730875-#
どうにかって?

98:デフォルトの名無しさん
06/05/29 23:12:38
>>96
forのなにをどうにかすりゃ良いんだよ。

99:デフォルトの名無しさん
06/05/29 23:15:33
いや、習ってないんで、別のc言語に
変えてほしいなと思って(;^ω^)


100:デフォルトの名無しさん
06/05/29 23:16:55
よっしゃわかった習ってないなら教える
まず文字には文字コード体系ってのがある
で、小文字のaは数字に直すと0x61
で、0xって数字の前につけると「これは16進数の61ですよ」
って事を表してる。
そんで、大文字のAは0x41にあたる。
だから大文字のAと小文字のaの差は数値で言えば
0x61-0x41=0x20となる。
と言うことは小文字のaから0x20を引いたら大文字のAとなる
逆に大文字のAに0x20を足したら小文字のaとなる。
なんで16進数を使うかというと文字コードの表が大抵16進数
で書いてるから。だから別に16進数の20を10進数に直した
32と言う数字を使いたいなら使っても問題なし。
90で書いたソースのs[i] = s[i] -0x20をs[i] = s[i] - 60
にしてもOKだ。
これで納得したか?まだたりぬか?
どうなんだゴリャ!!

101:100
06/05/29 23:18:35
まちがった、s[i] = s[i] -32
だ!!

102:デフォルトの名無しさん
06/05/29 23:18:52 BE:279569478-#
forかwhileで書くのが普通で簡単だな。

103:デフォルトの名無しさん
06/05/29 23:19:14
おk(;^ω^)

104:100
06/05/29 23:20:17
ん?for文を習ってないのか?
配列に関して習ってないことがあるのか?


105:デフォルトの名無しさん
06/05/29 23:20:56
ちゅーか、for(i =0; i<(int)strlen(s);i++) の中身がよく分からないんだお(;^ω^)

106:デフォルトの名無しさん
06/05/29 23:21:35
forを習ってませんというなら
他に何を習ったか言ってもらわないと書きようがない罠。

107:デフォルトの名無しさん
06/05/29 23:24:08
配列までは習ってる(^0^)

108:デフォルトの名無しさん
06/05/29 23:27:50
i < sizeof s / sizeof s[0];
これではダメなんですよね?

109:デフォルトの名無しさん
06/05/29 23:29:44
だめ(^ω^)

110:デフォルトの名無しさん
06/05/29 23:31:21
#include <stdio.h>
int main(void){
char s[10];

printf("小英字列=");
scanf("%d",s);
printf("大英字列=%s\n",s-32);

return 0;
}

  じゃ駄目?

111:デフォルトの名無しさん
06/05/29 23:31:41 BE:134793239-#
>>108
↓とか、実行したら違いがわかるかも。

char s[100];
scanf("%s", s);
printf("%d\n", sizeof s / sizeof s[0]);
printf("%d\n", streln(s));


112:デフォルトの名無しさん
06/05/29 23:32:38
size....?


113:デフォルトの名無しさん
06/05/29 23:33:01 BE:134793239-#
>>110
だめだねぇ。
ループで回して、一文字ずつ処理しないと。

114:デフォルトの名無しさん
06/05/29 23:33:52
>>113 ル-プ詳しく

115:デフォルトの名無しさん
06/05/29 23:38:08 BE:119815564-#
ループが分からなかったらこれでもいいけど、評価されるかな?
#include <stdio.h>
#include <ctype.h>
int main(void){
char s[10];
printf("小英字列=");
scanf("%d",s);
s[0] = toupper(s[0]);
s[1] = toupper(s[1]);
s[2] = toupper(s[2]);
s[3] = toupper(s[3]);
s[4] = toupper(s[4]);
s[5] = toupper(s[5]);
s[6] = toupper(s[6]);
s[7] = toupper(s[7]);
s[8] = toupper(s[8]);
s[9] = toupper(s[9]);
printf("大英字列=%s\n",s);
return 0;
}


116:デフォルトの名無しさん
06/05/29 23:40:01
ctype,toupperは習ってないお、周りのみんなもできてないし、
できる問題なのか不安だお(;^ω^)

117:デフォルトの名無しさん
06/05/29 23:41:37
>>116
どういったアルゴリズムなのか考える努力を。

118:デフォルトの名無しさん
06/05/29 23:44:13
>>117 一応みんなのおかげで大体理解できたお。でも習ってないのが
あるから課題としては評価されないお。やばいお(’ω‘)

119:デフォルトの名無しさん
06/05/29 23:46:12 BE:49923825-#
ならってる範囲でって言っても、forもwhileも習ってないんじゃ、ムリな課題なんじゃね?

120:100
06/05/29 23:47:05
for文の中身を解説しろってことだな
まず最初の処理として左端の式を評価するi=0だからint型のiに0を代入。
この式を評価するのは最初だけ。
次にi<(int)strlen(s)の処理に移る。i<(int)strlen(s)が成り立つならfor文内
の処理をする。
でstrlen()という関数は文字列の先頭アドレスを引数に取り戻り値として
文字列の最後の'\0'を含まないだけの文字の数を返す。
で、strlen(s)のsっていうのは文字列の入った配列s[10]の先頭アドレスを意味する
なぜっていわれてもそうなんだから仕方がない。
アドレスなら&がいるんじゃないか?と思うなら&s[0]としても良い。
&s[0] == sって解釈しても、まぁ.......OK!!
で(int)ってついてるのは本来strlenの戻り値はsize_t。
size_tってのは、unsigned int型。なので一応そのままでも良いけど
(int)をつける。これをつけると言うことは戻り値の値をint型にキャストするということ。
キャストとは、値の型を変換する事。
で、i<(int)strlen(s)は、結局sの文字列の長さ('\0'を省いた)よりiの初期値は0
のため成り立つ事が確認される成り立っているので、for文内の処理に以降。
for文内の処理が終わると次のi++に移るi++はiに1足すって事。
で、iに1足した後、i<(int)strlen(s)の評価に移る。で最終的に文字列の長さ
より、iが数値的に超えたら、for文の処理を行わず。for文を抜け出る。

121:デフォルトの名無しさん
06/05/29 23:48:16
無理だよね。やっぱ。>>115で行くお。toupperとctypeは理解できたし。

122:デフォルトの名無しさん
06/05/29 23:48:38
#include <stdio.h> 
int main(void){ 
    int s;
    printf("小英字列=");
    scanf("%x",&s); 
    printf("大英字列=%X\n",s); 
    return 0; 
}
>>87の指定通りにabcdefという入力にはABCDEFを返すぜひゃっほー。

123:100
06/05/29 23:49:04
なんか書いててこんがらがってきた。
俺の書いてることってあってるのか?

124:デフォルトの名無しさん
06/05/29 23:53:19
>>122 そんなんでいいんかなあ。それでいくか。

125:デフォルトの名無しさん
06/05/29 23:54:46 BE:39938742-#
>>122
天才じゃね?

126:デフォルトの名無しさん
06/05/29 23:57:33
だれも思いつかないぞ

127:デフォルトの名無しさん
06/05/29 23:58:10
>>122

> a.exe
> beaf
> BEAF
>
> a.exe
> dead
> DEAD
おーちゃんと動いてるー

128:七氏
06/05/30 00:02:13
libtiffをつかったプログラミングでtiff画像を 
カラー画像→グレー画像
に変換する方法なら書いてあるのですが
グレー画像→カラー画像
に変換する方法がわかりません
どなたかわかる方教えてもらえませんか
参考にしているサイトは URLリンク(www-06.ibm.com) 
ですよろしくお願いします
違うとこにも書き込んだのですが不安なので教えてください

129:100
06/05/30 00:02:26
まじかよ、うちじゃ、>>122の式まともにうごかんぞ
VS2005stdがおかしいのか?
ま、いいや、そんなトリッキーな事することねーし

130:デフォルトの名無しさん
06/05/30 00:03:14
ありがとうございました。たぶん模範解答とは違うけど、
ちゃんと動くから自信を持って提出するお(^ω^)

131:デフォルトの名無しさん
06/05/30 00:05:37 BE:174730875-#
>>128
フツーに考えて、グレーからカラーはムリだろ。
それともファイルのどっかにカラー情報が残されてるのか?

132:七氏
06/05/30 00:09:39
>>131
G3→G4に変換したいんですが
やっぱり無理なんですかね?
カラー情報が仮にノここされていたら可能ですか?

133:デフォルトの名無しさん
06/05/30 00:13:05
G3→G4をグレー→カラーと言うから混乱を招いている。
単なるTiffの画像形式の変換と言えばいいことだ。
しかし、マルチに答える気はないので詳細は割愛。

134:七氏
06/05/30 00:18:13
>>133
そういえばよかったです言葉たらですみません
教えてもらえませんか?

135:デフォルトの名無しさん
06/05/30 01:47:53
どなたかご教授ください。

テキストファイルを開いて、文字コードを判別し、その文字コードを使って文字列を表示するというプログラムを作りたいんですが、どうすればいいんでしょうか?


136:135
06/05/30 01:54:33
文字コード等についていまいちよくわかってないんですが、「○○コードとして表示する」という方法はなく、値を他の文字コード形式に変換するんでしょうか?

137:デフォルトの名無しさん
06/05/30 02:00:32
>>136
そうです

138:135
06/05/30 02:07:21
>>137
なるほどです。という事はコンパイラーが処理するコードの形式に変換すればいいんですね?

139:デフォルトの名無しさん
06/05/30 02:10:04
>>138
コンパイラが処理できるコードに変換するのではなくて、
最終的に表示を行うシェル(Windowsで言えばコマンドプロンプト)の文字コードに合わせる。

140:135
06/05/30 02:25:55
>>139
わかりました。ありがとうございました。

141:デフォルトの名無しさん
06/05/30 03:32:19
C言語を始めるに当たって、お勧めな教本を教えて下さい

142:デフォルトの名無しさん
06/05/30 04:31:59
推薦図書/必読書のためのスレッド PART31
スレリンク(tech板)

143:72
06/05/30 10:05:40
>>73 >>74

ありがとうよくわかりました。

144:デフォルトの名無しさん
06/05/30 23:51:05
ソース書くお勧めのエディターってありますか?
書きやすいとかあるのかな?

145:デフォルトの名無しさん
06/05/31 00:19:27
>>144
つ URLリンク(search.vector.co.jp)

146:デフォルトの名無しさん
06/05/31 00:48:04
 次のプログラムは、キーボードから半径rと数値aを入力し、aが1ならば円の円周を
求め、2ならば円の面積を求めるものである。

/***cex2106.c***/
/*分岐プログラム*/
/*  switch~case 文*/
/************/
#include <stdio.h>
main()
{
int a;
float r,l,s,pai;
pai=3.14159;
printf(

147:デフォルトの名無しさん
06/05/31 00:51:44
アルゴリズムって、何かを作りながら学ぶのがいいの?
それとも、アルゴリズムを学んだ後に何かを作るのがいいの?

148:デフォルトの名無しさん
06/05/31 01:16:14
最初はあまり余計なことはせず、たとえばまずソートならソートについてよく理解できる
単純なソースの記述からはじめた方が良い。
何かを作る際は、全体の構図をしっかり理解して、その一部に
取り込むべきものを取り込む。取り込まれたものが何なのか?なんて
複雑な構造から一部を理解しようってのは初心者には向かないかと。

149:デフォルトの名無しさん
06/05/31 01:54:11
リナックスなんだけどsqrtが使えない!!

#include<stdio.h>
#include<math.h>
main(){
int x, y;
double K, temp, pi, s;
printf(

150:149
06/05/31 01:58:46
途中できれてるし
#include<stdio.h>
#include<math.h>
main(){
int x, y;
double K, temp, pi, s;
printf("x座標を入れてください");
scanf("%d",&x);
printf("y座標を入れてください");
scanf("%d",&y);
temp = x*x+y*y;
K = sqrt(temp);
pi = 3.1416;
s = K*K*pi;
printf("円の面積は%f平方センチメートルです\n",s);
}
って打って


151:149
06/05/31 02:01:43
コンパイルすると
/tmp/ccuVKbmu.o(.text+0xa7): In function `main':
menseki.c: undefined reference to `sqrt'
collect2: ld はステータス 1 で終了しました
ってエラーが出るし・・・

152:デフォルトの名無しさん
06/05/31 02:07:24
x座標を入れてください3
y座標を入れてください3
円の面積は56.548800平方センチメートルです

Borland C++ではコンパイルできて、試しにxとyに3を入れて出したんだが
座標から面積を求めるって・・・

153:デフォルトの名無しさん
06/05/31 02:08:56
>>149
-lm 付けずにコンパイルしてました。
なんて冗談は言わないよな?

154:デフォルトの名無しさん
06/05/31 02:11:07
>>147
>>148さんの言うとおり
ソートでも、探索でも、単純なソースを見てそのやりかたを
知れば、「これをこういう風にしたらこういう風になるな」ってな感じで
考えられる。でも、ネット上で、単純なソースって意外と見つからない。
理屈は書いてあっても、肝心のソースがなかったり。
かといって、アルゴリズム辞典買っても、「あぁ、もう訳わかんない」
ってなるのがたまにきづ。
でも、ネット上にも簡単な例が載ってるページがあったりする。
URL教えれ、って言われてもブックマークしてないから教えれないけど。
ま、こんな偉そうなことを言ってる俺も、ソートなり探索なりその他の
アルゴリズム等、使わないからすぐ忘れる。
だから、一度知ったアルゴリズムは、忘れそうな頃にもういっぺん
復習みたいにした方が良いみたい。
じゃないと、俺みたいに「ああ、あれね、もう忘れた」ってな感じに
なっちゃうよ。

155:デフォルトの名無しさん
06/05/31 02:52:47
>>145
ありがとー

156:デフォルトの名無しさん
06/05/31 12:07:17
配列同士の足し算ってどう書けばいいのでしょ
たとえば

int a[3] = { 1, 2, 3 }
int b[2] = { 4, 5 }

としたときに

int c[5] = { 1, 2, 3, 4, 5 }

という配列を作りたいのです。

157:デフォルトの名無しさん
06/05/31 12:12:57
>>156
それって単に配列aの後ろにbを付け足したってだけだよね?
だったら単純にaの先頭から順番に続けてbの先頭の値を
配列cに入れていけば良いだけでは?

158:デフォルトの名無しさん
06/05/31 12:22:42
>>156
int i=j=0;
for(;i<=((sizeof(a)/sizeof(a[0]))+(sizeof(b)/sizoof(b)));i++){
if(a)c[i]=a[i];
else c[i]=b[j++];
}
俺って天才だよね┐(´ー`)┌

159:デフォルトの名無しさん
06/05/31 12:28:40
>>156
memcpy(c, a, sizeof(a));
memcpy(c+sizeof(a)/sizeof(a[0]), b, sizeof(b));

160:デフォルトの名無しさん
06/05/31 12:45:49
>>157-159
Cで配列を足しあわせるのって難しいんですね。
char型の配列だとstrcatで連結できるけどint型で使おうとするとエラー吐かれるし
perlみたいに
@c = (@a , @b)
こんな記述も使えないし,どう書くのかなと。

どうもありがとうございました

161:デフォルトの名無しさん
06/05/31 12:53:31
>>160
> char型の配列だとstrcatで連結できるけど
配列の中身が文字列じゃない限りそんなことはやっちゃいかん

162:デフォルトの名無しさん
06/05/31 13:35:35
>>158
forの行に間違いが二つ。その次の行に間違いが一つ。
天才っていうより、天災?

>>159
2番目のmemcpy()に間違いが一つ。

163:デフォルトの名無しさん
06/05/31 13:45:52
>>162
どこ?

164:162
06/05/31 13:54:32
>>163
がーん、確かによく見たらcにそのまま足しているから合ってるじゃん..._/ ̄|○

>>159
すまん。

165:デフォルトの名無しさん
06/05/31 17:04:17
下らない質問で恐縮なんですが・・・
構造体の変数に列挙型使えますか?

struct test{
enum tag{sun, mon, tue} week;
};

test.week = sun;

みたいな感じで

166:デフォルトの名無しさん
06/05/31 17:05:38
>>165
なぜ人に聞く前に自分で試して見ないのか。
結論を言ってしまえばできるけど。

167:デフォルトの名無しさん
06/05/31 17:09:06
>>165
ありがとうございますです。

168:デフォルトの名無しさん
06/05/31 18:25:12
>>158
c[]のメモリはどこに確保されているの?

169:デフォルトの名無しさん
06/05/31 18:38:24
if(a) ってどういう意味? a の値って変化するの?

170:デフォルトの名無しさん
06/05/31 19:56:55
>>156

int c[] = {a[0], a[1], a[2], b[0], b[1]};


171:>>147
06/05/31 20:06:15
>>148 >>154

ありがとうございます。

よさそうなサイトを探してみます。



172:149
06/05/31 20:11:39
>>153
その通りでした・・・


173:デフォルトの名無しさん
06/05/31 21:16:16
printf関数のソースの解説してあるサイトってないかな?

174:デフォルトの名無しさん
06/05/31 21:28:03
>>173
 図書館かどこかでANSI C言語辞典を探して
printf関数の定義例をコピーする、というんじゃだめなの?

175:デフォルトの名無しさん
06/05/31 22:21:26
俺、さっきプログラム作ってて、すごいことに気づいた。

ポインタからメンバ変数を取り出すのに使う -> って、いらなくね?

ポインタだろうがそうでなかろうが . でいいじゃん。
わざわざ人間が指定してやる必要ないじゃん。

だって、コンパイラは変数がポインタかどうか分かってるのだから、
勝手に解析してくれればいいのだと思うのだよ

176:デフォルトの名無しさん
06/05/31 23:11:34
const と #typedef の違いってなんですか?


177:176
06/05/31 23:12:32

>>176

ごめんなさい、
#typedef ではなく #define でした。

178:デフォルトの名無しさん
06/05/31 23:19:47
>>175
初心者はそれで構造体の変数と構造体へのポインタを混同しそうだから、
今の区別する仕様でいいと俺は思う。

そういえばDはどっちも . でいけるとアピールしていたような気がしなくもない。

179:デフォルトの名無しさん
06/06/01 00:13:58
>>175
たしかにそうなんだけどさ、
-> はポインタ演算 (*p). の糖衣構文として追加された経緯があって、
既存のコンパイラをあんまりいじくらずにいけるようにしたかったんだよ。

180:デフォルトの名無しさん
06/06/01 00:21:30
あと、ポインタってことはメンバがオーバーライドされてたりすることも考えないといけないから、
いざ機械語になったときのコードが.と->でかなり違ってくる。.*と->*になればなおさら。

ま、コンパイラがちゃんと解析すりゃいいじゃん、ってのは、そうなんだけどね。

181:179-180
06/06/01 01:14:22
ごめんC++と間違えた。

182:デフォルトの名無しさん
06/06/01 11:07:41 BE:34939229-#
>>177
そもそも同じところが見つからない。

183:デフォルトの名無しさん
06/06/01 11:37:03
実行時に

prog.exe para1 para2

のように引数を与えたいプログラムを作るときに、
デバッグ時に、以下のように、自分でargcやargvに直接値を代入しても問題ないですか?
実は、他の人がこのようにしているのを見たので、自分でもまねしてみたのですが、
VC.NETだと、問題なく動いているのですが、正しいのか間違っているのかよくわかりません。

main(int argc, char *argv[])
{
argc = 3;
argv[0] = "prog.exe";
argv[1] = "para1";
argv[2] = "para2";

・・・
・・・
・・・

}




184:デフォルトの名無しさん
06/06/01 11:40:27
>>183
ダメ

185:デフォルトの名無しさん
06/06/01 11:56:47
宿題ではないのでどちらに書こうか悩んだのですが・・・
判る方、いらっしゃいましたら教えて下さい!!

数字を10文字まで表示させて10文字表示して何かキーを押したら
11~20までを新しいページで表示させたいんです。

これはVC++で出来ますか?

186:デフォルトの名無しさん
06/06/01 11:57:58 BE:108696487-#
最初に
argv=(char**)mallock(sizeof(char*)*3);
とでもしておけばとりあえず危険はない。

187:デフォルトの名無しさん
06/06/01 12:01:42 BE:104814296-#
>>185
「表示」の具体的な内容(デバイスとかフォントとか大きさとかタイミングとか)とか
「ページ」が何を指しているのかとかが全然分からんが、それらがPCで制御できる
状態にあるならば、VC++でできるかどうかという問いには「できる」としか答えられない。

188:デフォルトの名無しさん
06/06/01 12:22:23
DOSのMOREコマンドみたいなことをしたいのかな?

189:デフォルトの名無しさん
06/06/01 12:37:57
>>183
> argc = 3;
> argv[0] = "prog.exe";

この二行は問題ない。

> argv[1] = "para1";
> argv[2] = "para2";

これは、問題有り。
不正な領域への書き込みとなる。

190:185
06/06/01 13:15:37
>>187さん
回答有難う御座います。
言葉足らずで申し訳ありません;;

1         11
2         12
3         13
4         14
5  ⇒何か押す⇒ 15
6         16
7         17
8         18
9         19
10         20

と表示したいんです。
(数字は固定値じゃなくて任意で入力された文字)
これじゃぁ、まだ判り辛いですか?
初心者で申し訳ないです;;上手く言葉に出来ないです(;´Д`)


191:デフォルトの名無しさん
06/06/01 13:49:17 BE:139752498-#
>>190
やりたいことは分かったが、お前が何を知りたいのかが分からない。

192:185
06/06/01 14:05:30
>>191さん
190で言ったように表示できるソースを書きたいんですが・・・
10コ表示したら改ページみたいなのをfor文とかで回せば良いのですか?

193:デフォルトの名無しさん
06/06/01 14:09:59
>>185
コンソールAPI ってのを使う。

194:デフォルトの名無しさん
06/06/01 14:10:57
>184
>186
>189
ありがとございました。
そうすると、こういう場合(つまりデバッグ作業をしているときには
とりあえずソースコードの中で固定の引数を与えたい場合は)、何か良いテクニックみたいなの
ありますか?

195:デフォルトの名無しさん
06/06/01 14:14:58
>>194
VCのデバッガなら、コマンドラインから与える引数の設定ができるよ。
他のデバッガにもそういう機能があるんじゃない?



196:デフォルトの名無しさん
06/06/01 14:23:35 BE:108696487-#
>>192
forでもwhileでも好きなようにループ汁。

197:デフォルトの名無しさん
06/06/01 14:51:35
>>194
俺だったらそういうデバッグの時はシェルスクリプト
(Windowsならバッチファイル) 作っちゃうな。
そうすればそこで引数変えられるから。


198:デフォルトの名無しさん
06/06/01 16:51:07
int i =1;

if(i == 5)
{
printf("Hello!");
}

1から100まで既に入力されていて
表示をする時に5件ごとにHello!!と表示させたいのですが、
上の書き方だと5件目の時のみにしかHello!!とつきません。
5件ごとにHello!!とつけるにはどうしたらいいですか?

199:デフォルトの名無しさん
06/06/01 16:52:34
>>198
計算すりゃいい。
5で割ったあまりが0かどうかで判定すればいいんじゃないか?
(i%5)==0とか。


200:デフォルトの名無しさん
06/06/01 17:12:11
>>199

198です!出来ました!!
有難う御座いました!!!

201:デフォルトの名無しさん
06/06/01 17:38:17
このスレ数学得意な人多くてうらやましい

202:デフォルトの名無しさん
06/06/01 17:46:19
>195
VC使っていますが、コマンドラインから与える引数をデバッガで与えられるというのは、
先ほど見つけました。VC3年使っていて今まで知らなかったです。ありがとうございました。
>197
私は、DOSの画面を出しておいて、VCでビルドしたあと、DOSの画面で引数与えて実行
するという初歩的な方法でやっています。

ところで、
186さんに教えていただいた以下の方法ですが、
 argv=(char**)mallock(sizeof(char*)*3);
 とでもしておけばとりあえず危険はない。
この方法でも完全ではないということでしょうか?
こうやって領域を確保しておけば問題ないように思うのですが。


203:デフォルトの名無しさん
06/06/01 17:49:36
>>201
算数の問題だと思うが?

204:デフォルトの名無しさん
06/06/01 17:52:57
>>202
とりあえず、意味をよく理解した上で使う分には問題ない。
しかし、意味を理解せずに使用すると、
後々に問題が出てくることになると思われ。

205:デフォルトの名無しさん
06/06/01 17:55:41 BE:58230656-#
>>202
ちょっとtypo。
argv=(char**)malloc(sizeof(char*)*3); の意味が分かってて、リリース時に間違いなく
消えて無くなるなら問題ないかと。

206:デフォルトの名無しさん
06/06/01 18:28:58
引数を固定的に決めたいだけなら malloc() する必要もないのではないか?
こんな風に書いておけばいいんじゃないの?

int main(int a, char *av[])
{
 char *argv[] = {a[0], "para1", "para2", NULL};
 int argc = 3;

}

で、リリース時に a, av を argc, argv に書き換える。


207:デフォルトの名無しさん
06/06/01 18:29:34
あー! 書き間違いがある。

まあいいや適当に読みかえて。


208:デフォルトの名無しさん
06/06/01 18:42:46 BE:48525555-#
>{a[0], "para1", "para2", NULL};
 ~~~~~
初期化子に変数は使えない。

209:デフォルトの名無しさん
06/06/01 18:58:25
>>208
staticじゃなければOKのはず

210:デフォルトの名無しさん
06/06/01 19:27:46
>>208
とりあえず gcc ではこれは動いた。

#include <stdio.h>

int main(int a, char *av[])
{
char *argv[] = {av[0], "para1", "para2", NULL};
int argc = sizeof(argv) / sizeof(*argv) - 1;
int i;

printf("%d\n", argc);
for (i = 0; i < argc; i++)
printf("%d: %s\n", i, argv[i]);

return 0;
}

実行結果

3
0: ./a.out
1: para1
2: para2


211:デフォルトの名無しさん
06/06/01 19:33:52
> All the expressions in an initializer for an object that has static storage duration shall be
> constant expressions or string literals.
としか書かれてないからな。

212:デフォルトの名無しさん
06/06/01 20:36:04
ひどい質問ですみません。
コンパイラってどこで仕入れるといいんですか?

213:デフォルトの名無しさん
06/06/01 20:46:24
>>212
仕入れということはその後自分の店で売るということですか?


214:デフォルトの名無しさん
06/06/01 21:05:52
>>208
まったく問題ない。

>>211
expression の定義参照。

215:デフォルトの名無しさん
06/06/02 01:29:55
もう、ポインタわけわからんよ(><)


216:デフォルトの名無しさん
06/06/02 02:21:27
int a = 0x100
char *b = "hoge"

とあるときに

char *c = "100hoge"

という文字列を*cに入れたいのですがどうすればよいでしょうか・・

217:デフォルトの名無しさん
06/06/02 02:24:04
char buf[20];
sprintf(buf, "%x%s", a, b);
c = buf;

218:デフォルトの名無しさん
06/06/02 02:25:48
>>212
そういうのは流通業者に聞いてみれば?
ま、どこに聞いても「ウチで仕入れてください」っていうだろうけど。

219:デフォルトの名無しさん
06/06/02 02:26:30
>>217
うぅどうもです><

220:デフォルトの名無しさん
06/06/02 03:05:47
>>212
URLリンク(www.borland.com)
>Borland C++Compiler 5.5インストール手順
のすぐ下にある
>Borland C++Compiler 5.5のダウンロードは、こちら(8.46MB)をクリックして下さい。
の「こちら」をクリック。

エディタは↓を使うと、コンパイルも楽。
URLリンク(www.vector.co.jp)

221:デフォルトの名無しさん
06/06/02 03:11:48
>>220
そんな古いのより Visual C++ 2005 Express Edition のがいいぞい。
URLリンク(www.microsoft.com)

222:デフォルトの名無しさん
06/06/02 03:18:57
>>221
DLにめっさ時間が掛かるね・・・

223:デフォルトの名無しさん
06/06/02 09:02:22
DLオワタ・・・疲れた・・・寝るぽ

224:デフォルトの名無しさん
06/06/03 07:13:57
>>221
vc2005使ってると、ANSI標準の関数使うと、いちいち警告で
「古い定義の関数でなんたらかんたら」って出るけど無視しよう。
MSがあらたに作った関数なんていちいち使ってたら
変にそっちの関数の知識を身につけちゃう可能性あるから。

225:デフォルトの名無しさん
06/06/03 08:18:11
>>224
そもそもそんな警告を表示しないようにすればよいだけだと思う。

226:デフォルトの名無しさん
06/06/03 08:22:08
extern FILE *fp_a

int AAAA()
{
FILE fp ;

fp_a = fopen("a.txt", "w")

if (fp_a == NULL) {
return(-1) ;
}
BBBB() ;

fclose(fp_a) ;
return(0) ;
}

int BBBB()
{
FILE *fp ;
fprintf(fp_a, "test-AAAA-prog") ;

fp = fopen("zzz.txt", "r")
if (fp == NULL) {
return(-1)
}
fprintf(fp_a, "test-BBBB-prog") ;
fclose(fp)
}

227:デフォルトの名無しさん
06/06/03 08:24:52
↑突然すいません、上記場合でfp_aを252回open,closeを繰り返すと
fp_aをopenしている間だけ、fpのopenに失敗してしまいます。
extern宣言しているファイルポインタを使用しているのがまずいのでしょうか?

228:デフォルトの名無しさん
06/06/03 08:26:36
誤記:fprintf(fp_a, "test-BBBB-prog") ;
正記:fprintf(fp, "test-BBBB-prog") ;


229:デフォルトの名無しさん
06/06/03 08:29:01
>>225
あの「警告を表示しない方法」教えてくだされ

230:デフォルトの名無しさん
06/06/03 08:38:02
>>229
URLリンク(msdn2.microsoft.com)
_CRT_SECURE_NO_DEPRECATE

231:224
06/06/03 08:53:03
俺としては、あの警告は「はいはい、ワロスワロス」で流してるけど
入門者の人にとっては、不安だろうな~


232:デフォルトの名無しさん
06/06/03 09:32:28
>>227
それ、症状が再現する最小のモジュールになっていないだろ。
ソース載せるなら、再現することを確認してからにしてくれ。
まぁ恐らく、きちんとファイルをクローズしないでオープンしたままなんだろうけどな。

233:デフォルトの名無しさん
06/06/05 11:25:15
列挙定数ではなく構造体を使用したときの良い点を教えて

234:デフォルトの名無しさん
06/06/05 11:49:21
動画解析をしたいのですが、まず動画を画像ファイルに変換するにはどうしたらよいでしょうか?

235:デフォルトの名無しさん
06/06/05 11:57:05
今から勉強するならVC++ か VC# のどっちを買った方がいいですか?
言語の仕様が大幅に変わってるみたいなのでどうすればいいかわかりません。

どっちもCでしょ?

236:デフォルトの名無しさん
06/06/05 11:59:30
>>233
全く違うもの同士でそういう風に聞かれても・・・。

237:デフォルトの名無しさん
06/06/05 12:11:00
>>236
 全く違う物?
 VC++の方がスキルとして認められ易いと聞きました
 新しい言語なのにC#って普及してないの?

238:デフォルトの名無しさん
06/06/05 12:12:05
志村ー、レス番! レス番!

239:デフォルトの名無しさん
06/06/05 12:13:21
>>235
とりあえず Express Editions を落として使ってみれば?

240:デフォルトの名無しさん
06/06/05 12:17:10
>>239
 タダやん
 いつのまにこんな物…
 勉強するにはもってこいですね
 ありがとうございました。


241:デフォルトの名無しさん
06/06/05 12:17:31
>>235
今から始めるのに言語仕様が変わっていてなぜ困る

242:& ◆lWyMorKHN2
06/06/05 12:19:07
平方根を求めようとしてsqrtを書いたんですが、コンパいるしたときに未定義のシンボルとでます。
何か必要なんでしょうか?

243:デフォルトの名無しさん
06/06/05 12:19:44
>>242
常識。

244:& ◆.uxO1zwzGk
06/06/05 12:20:53
教えてください!!

245:デフォルトの名無しさん
06/06/05 12:24:50
>>242
> 何か必要なんでしょうか?

問題解決能力

246:デフォルトの名無しさん
06/06/05 12:25:11
>>240
勉強し終わったころには新しい言語が出ていてまたいつのまにこんな物・・・

247:デフォルトの名無しさん
06/06/05 15:20:48
x=y^2のグラフを-2<y<2でyを変化させ、
適当な座標軸上にプロットするプログラムを書け、
といった課題が出されました。
while文を用いて、値を出すプログラムまでは作れるのですが、
座標軸をつくり、そこへプロットする仕方がわかりません。

どなたかご教授お願いします。

248:デフォルトの名無しさん
06/06/05 15:22:53
>>244
ヒント
メイクファイル

249:デフォルトの名無しさん
06/06/05 15:24:18
>>247
環境ぐらい書け
宿題丸投げは宿題スレへ

250:デフォルトの名無しさん
06/06/05 16:02:25
>>242
-lm


251:デフォルトの名無しさん
06/06/05 16:47:52
ファイルに書いてあるデータをポインタで参照できないものでしょうか。
例えばあるファイルをバイナリエディタで開くと以下のように見えたとします。
0F 32 5D BC 29
そこでCのソース中にunsigned int *p;などと宣言しておいた
ポインタがあって、なんらかの処理でpが32を指すように
なっているとすると、*(p + 1)とすると5Dが、*(p - 1)とすると
0Fが参照できるようなそんなことはCでは可能ですか?
fgetsでデータを一度配列に格納してそれをポインタで指す方法は、
配列の大きさを一体いくら確保しておけばよいのか、
予め分からないので使いにくいと思い、このような質問をさせて頂きました。
環境はRedHat9 + gcc-3.2.2-5です。

252:デフォルトの名無しさん
06/06/05 16:57:48 BE:48525555-#
>>251
>配列の大きさを一体いくら確保しておけばよいのか、

わかってから確保すりゃいいだろ。

253:デフォルトの名無しさん
06/06/05 17:01:08
>>251
stat()なりfseek()+ftell()なりでファイルサイズを取得し、
fread()でmalloc()した領域に読み込んでしまえばいい。
但し、ポインタの型はint *などではなくchar *になるわけだが。

254:デフォルトの名無しさん
06/06/05 17:01:33
LaTeXで解の方程式をの書き方を教えてください。

255:デフォルトの名無しさん
06/06/05 17:03:14
日本語でおk

256:デフォルトの名無しさん
06/06/05 17:07:21
>>252
>>253
なるほど、一度ファイルを総読み込みして調べるしかないわけですね。
サイズのでかいファイルになると時間がかかりそうですが、
仕方ないですね。
unsigned int *としたのはテキストファイル、バイナリファイルを
区別せずと考えたためです。この辺は自分でどうにかします。
ありがとうございました。

257:デフォルトの名無しさん
06/06/05 17:07:23
式でおねがいします。

258:デフォルトの名無しさん
06/06/05 17:10:08
256ですが追記。
もしかしてstatは総読み込みするような関数ではない…?
この関数はまだよく知らないので後は自分で調べて解決します。
どうもすみません。

259:デフォルトの名無しさん
06/06/05 20:10:52
>>256
一応「メモリマップトI/O」という言葉について調べることをおすすめする。
この頃のメジャーなOSではだいたいできると思う。


260:デフォルトの名無しさん
06/06/05 20:13:54
mmap() についても併せて調べてみるといいとおもう(UNIX系OSの場合)。

261:デフォルトの名無しさん
06/06/05 20:44:23
>>259
老婆心ながら。
× Memory Mapped I/O
○ Memory Mapped File

262:デフォルトの名無しさん
06/06/05 23:46:19
nCmの取り得る組み合わせを全て表示するようなプログラムを組め、という
問題を解くように依頼され、頭を悩ませて再帰関数で解いてみた。

URLリンク(upld3.x0.com)

こんな感じでOKでせうか?

263:デフォルトの名無しさん
06/06/06 00:23:33
ダウソして解凍してまで見る気にならん。
ソースそのまま見えるロダへ上げろ。

264:262
06/06/06 21:48:47
>>263
すいません、これでどうでしょうか? nCm 結果表示プログラムです。
URLリンク(www.uploda.org)


265:デフォルトの名無しさん
06/06/07 15:13:43
んな流れの速いアップロードに上げられてもなぁ。もう消えちゃってるよ。

266:デフォルトの名無しさん
06/06/07 16:02:14
コメントの内容とか見ると俺には>>264が自分で作ったとは思えなかった。

267:デフォルトの名無しさん
06/06/07 20:17:36
つい最近Cの勉強を始めた初心者です。
以下のソースについて質問です。
(画面上に「HELlo」と表示させるものです)

#include<stdio.h>
int main(void)
{
int i;
char a[]="hello";      ・・・A

*a='H';             ・・・B
*(a+1)='E';          ・・・B
*(a+2)='L';           ・・・B
for(i=0;i<5;i++){
printf("%c",a[i]);
}
}

Aの部分ではhelloを「”」の記号でくくっているのに、Bの部分では
「’」でくくっています。
これはどうやって使い分けるのでしょうか。
よろしくお願いします。

268:デフォルトの名無しさん
06/06/07 20:26:03
>>267
文字か文字列の違い

269:デフォルトの名無しさん
06/06/07 20:55:42
>>267
お礼のレスはまだかゴルァ!!!!!!!!!

270:デフォルトの名無しさん
06/06/07 21:09:40
>>267
初心者の俺が親切に答えちゃる。

"hello"は、'h'+'e'+'l'+'l'+'0'+'\0' のことで最後に '\0' = 0 がつく
同様に、"H"だと、'H' の後ろに '\0' が付く。

'\0' はここで文字列は終わりですよという目印
こうすれば最後に '\0' = 0 入っているのが分かんじゃないかな?

for(i=0;i<6;i++){
printf("%d-",a[i]);
}

こんなことをすれば、文字列を途中で終わらせることができるよ。

#include<stdio.h>
int main(void)
{
char a[]="hello";
printf("%s\n",a); /* hello と表示 */

*(a+2)='\0'; /* 3文字目に'\0'を代入。 */
printf("%s",a); /* he と表示される */
}

271:267
06/06/07 21:14:57
>>268-270
すごく良く分かりました~
ありがとうございました(・∀・)

272:デフォルトの名無しさん
06/06/07 21:58:03
char a[] = "hello";
(配列の初期化に限っては)上は下と同じ。
char a[] = {'h', 'e', 'l', 'l', 'o', '\0'};

273:267
06/06/08 02:15:14
>>272
thxです (^^

274:デフォルトの名無しさん
06/06/10 11:06:36
場違いかもしれませんが、質問です。
ソケットプログラムをしようと思っています(当方macです)が
sys/fcntl.h
sys/types.h
sys/socket.h
netinet/in.h
netdb.h
などのヘッダファイルの手の入れ方がわかりません
googleしてみましたが見当たりませんでした。
どこで手に入るのでしょうか?

275:デフォルトの名無しさん
06/06/10 11:39:55
質問ですけど、Aドライブからテキストファイルをよみこむのって
どうしたらいいんですか。

276:デフォルトの名無しさん
06/06/10 12:23:02
Cドライブから読み込むプログラムのCをAに変える

277:デフォルトの名無しさん
06/06/10 13:46:16
>>274
>場違いかもしれませんが
その通り。

278:デフォルトの名無しさん
06/06/10 14:45:44
>>277さん
では、どこが適切な場所か教えて下さい。

279:デフォルトの名無しさん
06/06/10 15:03:36
質問内容が意味不明だから誘導も出来ない。

280:278
06/06/10 15:16:36
こめんなさい。私の質問がまずかったのですね。
あるソースをみたら、上記にあるヘッダが#includeする
部分にかかれていたのです。でもHD内を検索したらそんな
書類はなくって(types.hはあったけど、、)。
で、web上にあるのかなと探したけれど上手く見つけられな
かったのです。だから、何処にあるのかわからなっくって
質問したのですが、、、
このヘッダは有名(と言えばいいの?)じゃないんですね。
ありがとうございました。それだけわかりました。
スレを汚してごめんなさい。

281:デフォルトの名無しさん
06/06/10 15:27:55
macは独自文化だから、macユーザーの集まるところへ行ったほうがいい。
最近のmacと昔のmacではOSが全然違うから、OSバージョンも明確に質問すること。

282:えいいち ◆GRGSIBERIA
06/06/10 15:29:37
WinAPIに手を出そうかと思って、Windowsゲームプログラミングを見ていますが、
以下のソースをコンパイルして実行すると、コンパイルに失敗して、実行ファイルが存在しない、とエラーが出ます。

#include <windows.h>

int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
) {
MessageBox(NULL , "Hello, world!" , "MessageBox" , MB_OK);
return 0;
}

コンパイラはボーランドのC++Builderで、Cpadというソフトでコンパイル・実行しています。

283:えいいち ◆GRGSIBERIA
06/06/10 15:30:26
あと、エラーメッセージなど。

bcc32 test.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.c:
警告 W8057 test.c 11: パラメータ 'hInstance' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 11: パラメータ 'hPrevInstance' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 11: パラメータ 'lpCmdLine' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 11: パラメータ 'nCmdShow' は一度も使用されない(関数 WinMain )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)


284:デフォルトの名無しさん
06/06/10 15:31:07
コンパイルに失敗すれば実行ファイルが出来ないのは当たり前だ。

285:デフォルトの名無しさん
06/06/10 15:39:13
>>281
そのヘッダはどうやらunixのものなのらしいです。
とあるwebサイトで以下のような文章を見つけまして、
「WindowsやMacOS などで利用されるC言語処理系はUNIXのシステムコールと
同じ機能をもつ関数 を提供することが多いです。ヘッダーファイルの指定
さえ行えばソケットを利用したプログラムが書けるようになります。」
とあったので、それらのヘッダファィルのをとりあえず手に入れなければ
手の出しようがありません。入手先が皆目見当がつかないので、とりあえず
ここで聞いてみたという次第です。なので今はmacは関係ありません。
デフォルトでそのようなヘッダファイルが入っていないと言いたかったのです。

286:デフォルトの名無しさん
06/06/10 15:39:15
>>282-283
WinMainから始まるプログラムを書くときにはオプション-Wが必要。

287:デフォルトの名無しさん
06/06/10 15:40:39
>>285
元がUnix由来でも、Macで使いたいのだからMacのところで聞いて平気だと思うよ。

288:デフォルトの名無しさん
06/06/10 15:40:49
>>285
ヘッダだけ入手しても、socketプログラミングとかは出来ないがそれでもいいのか?

289:デフォルトの名無しさん
06/06/10 15:48:10
>>288
それでもいいです。と言うかサンプルコードを移植する為に
どういった構造体や定義とかが書かれているのか知りたいのです。
それを基に(mac用に)改変しようと思っています。
とりあえずいきなりsockaddr_in 構造体とかいわれても
ヘッダを見ないと何が何だかさっぱりなので。


290:えいいち ◆GRGSIBERIA
06/06/10 15:48:32
>>286
-wと-Wを間違えていたようでした。
お騒がせすみません。
ありがとうございました。

291:デフォルトの名無しさん
06/06/10 15:50:45
>>289
バージョンは?
ひとまずXcodeを入れる必要があると思います。
自分の環境にはヘッダファイルありますから。

292:291
06/06/10 15:55:01
>>289
これ以上はMac板で訊いた方が良い。


293:デフォルトの名無しさん
06/06/10 15:55:32
>>291
xcode(2.0,os 10.4.6)にありますか?
私はcodewarrior(8.3)をメインに使っていて、
先程(質問する前)ヘッダファィルが含まれているかなと思ってxcodeを
インストールしたのですが、spotlightで検索しましたが見つかりませんでした。
なんででしょう?どこにありました?質問ばかりですみませんが。

294:277
06/06/10 15:58:06
ここで説明すると居座るかと思って説明しなかったんだが
どっちみち居座りやがったか…

295:デフォルトの名無しさん
06/06/10 16:16:00
gccって.cファイルに//コメント使えますか?

296:デフォルトの名無しさん
06/06/10 16:40:17
>>295
たぶん使えるはず。
心配なら-std=c99を付ければ文句無し。

297:デフォルトの名無しさん
06/06/10 17:29:05
マカはマカ板に逝け。
おまいにVC++の話題されても全く理解できないのと同じだ。
おまいの話題はxcode使ってない香具師には全く理解できない。

298:デフォルトの名無しさん
06/06/10 18:31:46
a=(b*c)%2147483647;
の計算したいのですが
b*cの計算した時点で
変な数値になってしまうんですが
うまい方法ないでしょうか?

299:デフォルトの名無しさん
06/06/10 18:43:39
これまた強烈な奴がおいでになりました。
↓が相手してあげてください。

300:デフォルトの名無しさん
06/06/10 18:50:15
>>298
bとcの型が小さくて結果の上位ビットが捨てられているのではないかと予想。
個人的には2147483647の剰余を求めるよりも0x7fffffffとの&を取る方がいいと思う。

301:デフォルトの名無しさん
06/06/10 20:51:51
>>300
>2147483647の剰余を求めるよりも0x7fffffffとの&を取る
それは結果が異なるのだが。

302:デフォルトの名無しさん
06/06/10 21:07:53
struct element{//各要素を構造体で作る
struct element *leader ;//集合のリーダー(構造体)を指すポインタ
struct element *back ;//自分(要素)の後ろにいる要素(構造体)を指すポインタ
int number ;//所属する集合の要素数
};

struct element set[n];//具体的にsetという要素をn個作る

ここまでは問題ないのですが、この構造体を操作する関数を宣言のが上手くいきません。それは、

void yunion(int x,int y)//union関数が予約語だったとは・・・
{
if(set[x].number - set[y].number => 0)★★★//xが要素である集合がyが要素である集合より要素数が多い時
{
set[y]->leader = set[x]->leader;//代表元を書き換える


}

}

これをデバッグすると★★★の行で「set:定義されていない識別子です」とか言われます。
でも上で定義しているし・・・
この関数宣言の問題点はどこでしょうか?

303:デフォルトの名無しさん
06/06/10 21:38:35
>>302

if(set[x].number - set[y].number => 0 じゃなくて、
if(set[x].number - set[y].number >= 0 だろ。
あと、
set[y]->leader = set[x]->leader;//代表元を書き換える  じゃなくて、
set[y].leader = set[x].leader;//代表元を書き換える   だろ。

leaderはstruct element型へのポインタだが、set[x]はstruct element型
であってポインタじゃない。

304:デフォルトの名無しさん
06/06/10 21:44:54
>>302
 まさかとは思うけど、setはグローバル変数じゃなくてローカル変数ですた、
とかいうオチじゃないだろうな?

305:302です
06/06/10 22:12:41
お返事ありがとうございます。

setはメイン関数内で宣言しています。
yunion関数宣言はメイン関数の外で宣言しています。
エラーの理由として、

'set' : 定義されていない識別子です
.number' の左側はクラス、構造体、共用体でなければなりません
.leader' の左側はクラス、構造体、共用体でなければなりません

と言われます。
メイン関数の外で関数を作ってそこで代入を行ってもメイン関数には
反映されないので、ポインタを書き換えるためにアロー演算子で
「代表元を書き換える」をやろうとしています。

・・・まさか、メイン関数内で宣言したらグローバル変数だと
思っていたのですが、実はローカル変数扱いになるのでしょうか?

306:デフォルトの名無しさん
06/06/10 22:18:30
ネタか釣りと言ってくれ……_/ ̄|○

307:デフォルトの名無しさん
06/06/10 22:37:30
なんだコイツは?と思ったらここは入門編だった

308:デフォルトの名無しさん
06/06/10 22:43:14
>>305
 これ、どっから突っ込めばいいんだよ・・・

グローバル変数:プログラム全体から操作できる変数
ローカル変数:関数内で定義され、定義された関数内からしか直接操作できない変数
(関数内static指定の変数はどうなの?とかいう細かい話はとりあえず却下)

main関数もあくまで関数の1つ。よって、main関数内で
定義された変数もローカル変数。OK?
だからsetをmainの外に置きグローバル変数にすれば
とりあえずエラーは消える。
(グローバル変数にせず引数渡しをしてはどうか、
とかいいたいところだけど、ポインタがわかってないみたいだし、
混乱しそうだから止めておく)

>メイン関数の外で関数を作ってそこで代入を行ってもメイン関数には
>反映されないので、ポインタを書き換えるためにアロー演算子で
>「代表元を書き換える」をやろうとしています。
 これは説明できない!なんていえば理解してもらえるのかわからん!
匙を投げました。とりあえず
set[y].leader = set[x].leader;
に変更し、そしてCの基本からやりなおしてください。


入門編だからしょうがないよね。あはは・・・

309:デフォルトの名無しさん
06/06/10 22:48:45
次スレは「C言語なら俺に聞け(くだすれ編)」か「くだすれC言語」にすべきだな。

310:302です
06/06/10 23:04:18
お返事ありがとうございます。

ポインタを使うのは私には難しいのでそういう場合はグローバル変数で
処理しちゃえばポインタは考えなくていい、ということですね。

構造体の配列のポインタを操作、する必要があると思っていたのですが
ポインタが消えてくれてここからは自分で進めそうです。

入門編ということで来てしまいましたが、まだ門に入るに至らなかったようです。
Cの基本からやり直してきます。
疑問は全て解決しました。ありがとうございました。

311:デフォルトの名無しさん
06/06/10 23:15:59
確かにポインタ知識はCで必須というわけじゃないよな

312:デフォルトの名無しさん
06/06/10 23:19:22
そうだな。リスト構造なんてポインタなくてもなんとか作れるし

313:デフォルトの名無しさん
06/06/10 23:21:24
でも、ポインタを上手に使って作るほうがずっと簡単。

314:デフォルトの名無しさん
06/06/10 23:25:03
ポインタ説明なくせばCの授業もすぐ終わるし書籍も薄くできるのに

315:デフォルトの名無しさん
06/06/10 23:30:06
Cの次に出る言語は多分ポインタ使わないだろうな

316:デフォルトの名無しさん
06/06/10 23:39:53
Javaはポインタ使わないってママが言ってた

でもね、NullPointerExceptionていう例外はあるんだって
土曜日に遊びにくるおじさんが言ってた

317:デフォルトの名無しさん
06/06/10 23:45:37
>>311-312
Cで配列を扱う為には、ポインタでなければアクセス出来ない訳だが…。
標準関数ですらポインタを渡すものが多いのに、よくそんな事言えたものだね。


もう一度、勉強し直した方がいいよ。

318:デフォルトの名無しさん
06/06/10 23:46:35
>>316
ガッ

319:デフォルトの名無しさん
06/06/11 00:00:08
>>317
いやリストくらい作れるって

ヒント:マクロ

320:デフォルトの名無しさん
06/06/11 00:01:43
>>319
まず、日本語の勉強が必要そうだね

321:312
06/06/11 00:21:21
あぁポインタの知識の事か
配列を使う=ポインタについて知識が必要なんだよゴラァ

と怒られたのか俺は


配列の知識なんてCで(ry

322:デフォルトの名無しさん
06/06/11 00:53:09
ポインタって宣言がおかしくない?
こんな感じの方がよくない?
ptr は予約語。

ptr char& p;

323:デフォルトの名無しさん
06/06/11 00:53:34
>>289
スレリンク(mac板)

今更だが

324:デフォルトの名無しさん
06/06/11 02:34:55
CとC++一生にどっちかしか身につけれないならどっちやるべき?

325:デフォルトの名無しさん
06/06/11 02:44:32
もう寝ろよ

326:デフォルトの名無しさん
06/06/11 09:34:09
ポインタありと無しの実行結果ぐらいプロファイルして比べてみればいいのに。
ポインタ使ったほうが効率はいいよ。

327:超初心者マー君
06/06/11 09:42:18
すいません。
最近パソコン始めた超初心者なんですが
C言語を動かす為には何が必要なのですか?
「猫でもわかるC言語プログラミング」という本を
買って挑戦してるんですが、全くわかりません。
コンパイラーというもののインストールの仕方が分かりません。
コンパイラー以外にも何か必要なのですか?
添付CDロムのファイルの使い方がそもそも分からないし・・・・・
ぼくは猫以下なんでしょうか。
教えて1さん。

328:デフォルトの名無しさん
06/06/11 09:50:27
>>324
python

329:デフォルトの名無しさん
06/06/11 10:05:11
>>324
CとC++一生にどっちかしか身につけれないならプログラミングなんてしない方がいい。

330:デフォルトの名無しさん
06/06/11 10:48:20
>>327
俺も昔、何万もだして買ったコンパイラーの使い方がわからなくて、
ドブに捨てたよ。

331:デフォルトの名無しさん
06/06/11 11:01:01
初心者なら無料の使えよ~

332:デフォルトの名無しさん
06/06/11 11:17:06
猫でもわかるなんて参考にすると腐るぞ~

333:デフォルトの名無しさん
06/06/11 11:21:07
>>324
C++はCのサブセットだから、C++覚えればCも覚えたことになる。
だから解なしって答えなんだろ?

>>327
URLリンク(www.microsoft.com)


334:デフォルトの名無しさん
06/06/11 11:24:03
>>326
使い方次第。
何でもかんでも「ポインタ=高速」なんて思うのは間違い。

335:超初心者マー君
06/06/11 11:25:04
皆さんありがとう。
コンパイラーってそんなに高いものだったんですか・・・・・
「ハロー、ワールド」すら未だに表示させられません。
誰かインストールの仕方と他に必要なものを教えて
いただけませんか?

336:デフォルトの名無しさん
06/06/11 11:25:13
C言語入門ビギナー編をひととおりやってみて、問題集でも買おうとおもってるんですが、いい本があったら教えてください。

337:デフォルトの名無しさん
06/06/11 11:41:43
>>322
C++だけど。
template<typename T>
struct ptr
{
  typedef T* type;
};
こうすればこう書ける。
ptr<char>::type p;

338:デフォルトの名無しさん
06/06/11 11:47:05
>>335
Borland C++ならここのイントロ~2章を読め。
URLリンク(www.kumei.ne.jp)

VC++ 2005 EEならインストールした後のことはここに少し書いてある。
URLリンク(www.kumei.ne.jp)

339:デフォルトの名無しさん
06/06/11 14:59:45
>>333
>C++はCのサブセット
……

340:デフォルトの名無しさん
06/06/11 15:46:18
逆だな。
っていうかCもC99からはC++と完全な互換性はなくなってるけどな。

341:デフォルトの名無しさん
06/06/11 17:34:12

関数ポインタって何に使うんですか?


342:デフォルトの名無しさん
06/06/11 17:45:09
>>341
DLLから動的に関数をもらう時とか

343:デフォルトの名無しさん
06/06/11 18:34:12
main(int argc,char argv*)
ってなんですか?
本に載ってません。


344:デフォルトの名無しさん
06/06/11 18:53:51
>>343

URLリンク(www.google.co.jp)
↑このサイトにかなり色々載ってるから、みてみるといいよ。

真中に文字入力するとこあるから、「main(int argc,char argv*)」っていれてからボタンを押してね。

345:デフォルトの名無しさん
06/06/11 19:22:54
>>343
そんな糞本は捨てちまえ

346:デフォルトの名無しさん
06/06/11 19:29:32
main(int argc,char argv*)
で載ってる方がよっぽど糞本だがな。

347:デフォルトの名無しさん
06/06/11 19:33:23
本のタイトルは?

348:デフォルトの名無しさん
06/06/11 19:34:09
正しいのって int main(int argc, char** argv) だっけ?

349:デフォルトの名無しさん
06/06/11 21:26:24
>>348
int main(int argc , char *argv[])

350:デフォルトの名無しさん
06/06/11 21:58:17
>>349
言語仕様は以下

返却値の型 int をもち仮引数を持たない関数
int main(void){ /* ... */ }

二つの仮引数を持つ関数(仮引数は, これらが ...)
int main(int argc, char *argv[]) { /* ... */ }

上に揚げた二つの方法のいずれかと等価な方法
--> int と等価な typedef された型でもいいし, char **argv でもいい

上に揚げた三つの方法のいずれでもない処理系定義の方法


351:デフォルトの名無しさん
06/06/11 22:24:53
じゃあ char argv* な環境があるかもしれないと(あるのか?)

352:デフォルトの名無しさん
06/06/11 23:10:43
char argv[] ならともかく char argv* ってなによ?

353:デフォルトの名無しさん
06/06/11 23:24:40
ワイルドカードでは

354:デフォルトの名無しさん
06/06/12 00:47:25
今北。
俺は、C++をやろうと思ってるのですが、C++でもおkですか?

355:デフォルトの名無しさん
06/06/12 00:47:59
>>354
C++相談室 part50
スレリンク(tech板)

356:デフォルトの名無しさん
06/06/12 01:09:20
>>355
すいません。ここじゃないのですね。ありがとうございます。


357:デフォルトの名無しさん
06/06/12 12:06:42
>>354
何がどうだったら「おk」なんだか解らんが
少なくともお前には無理。

358:デフォルトの名無しさん
06/06/12 12:57:35
>>350
> char **argv でもいい

関数の仮引数における「type hoge[]」は、
「type *hoge」のシンタックスシュガー。

正確には「char *argv[] でもいい」と書くのが正しい。

359:デフォルトの名無しさん
06/06/12 12:59:06
仮引数の [] は配列じゃないよ。ただのポインタだよ。

360:デフォルトの名無しさん
06/06/12 14:48:53
>>358,369
おまいらの主張は, 言語の持つ意味としては文句のつけようがないんだが,
JIS の規格書に書いてあるんだよぉ...
俺は JIS の規格を要約しただけで, 俺のせいじゃないんだよぉorz


361:デフォルトの名無しさん
06/06/12 16:23:07
#include<stdio.h>
int main(void)
{
int a;
double b,c;

scanf("%lf",&b);
a=(int)b;c=a*10;
printf("a=%d\n",a);printf("b=%lf\n",b);printf("c=%d",c);
return 0;
}

上記プログラムを実行してbに1.23を代入したら
a=1
b=1.23
c=0

となりました。どうやればaにbの整数部分である1を代入できるのでしょうか・・・・

OS:windows2000
コンパイラ:borland

362:デフォルトの名無しさん
06/06/12 16:25:39
お願い
5×5の魔方陣教えて

363:361
06/06/12 16:43:29
すいません。int c;でした。。。解決しました。

364:デフォルトの名無しさん
06/06/12 17:01:45
積分、不定積分のプログラムをつくりたいんですが
参考になるサイトとかどこかにないですか?

365:デフォルトの名無しさん
06/06/12 17:07:01
以下の論理式を演算↓(NOR)のみを用いて表したいんですがよくわかんないっす。教えて下さい
(1) A|B

(2) A⇔B

A→Bを|のみを用いて表したいんですがこれもできないです

366:デフォルトの名無しさん
06/06/12 17:34:22
>>365
どこまで理解していて、何がわからないのか?
# 全部わからないは論外

367:デフォルトの名無しさん
06/06/12 17:49:33
>>365
日本語でおk

368:デフォルトの名無しさん
06/06/12 17:49:40 BE:122283779-#
C言語関係ねえし。真理値表書いてドモルガン。
(A OR B) = (A NOR B) NOR 0

A→B = (A AND B) OR (A XOR B)
なので、NOTがどっかで使えないとダメぽな予感。

369:デフォルトの名無しさん
06/06/12 17:58:40
>>366
まず何をしたらいいのか・・・・

370:デフォルトの名無しさん
06/06/12 18:07:22
まず「論理式」でぐぐれ
そしてC言語に関連あるところまで理解が進んでからもう一回来い。

371:デフォルトの名無しさん
06/06/12 18:11:16
>>369
> まず何をしたらいいのか・・・・

まずは、日本語の勉強からどうぞ。
算数の勉強も合わせてどうぞ。

372:デフォルトの名無しさん
06/06/12 18:17:18
ひねくれ者うぜーしばいばい

373:デフォルトの名無しさん
06/06/12 18:42:14
URLリンク(www.geocities.co.jp)
ドモホルンリンクルの法則・・・なんでもないw

374:デフォルトの名無しさん
06/06/12 18:45:03
>>368
x nor x = not x だよ。

nor か nandがあればOK。

375:デフォルトの名無しさん
06/06/12 18:46:01
ねぇねぇ、知ってた?論理回路のすべてはnotがあれば全部作れるんだよ?

376:デフォルトの名無しさん
06/06/12 19:10:34
単項演算だけでか?

377:デフォルトの名無しさん
06/06/12 19:11:56 BE:81522667-#
>>374
>A→Bを|のみを用いて

と書いてあるんでNOTの入った物(NOR,NANDも含む)が必要かなと。

378:365
06/06/12 19:16:17
A⇔B = ((not A)or B) and (A or (not B))ですかね?
これを巧く直せないんです

379:デフォルトの名無しさん
06/06/12 19:19:24
>>378
だからスレ違いだっての

380:デフォルトの名無しさん
06/06/12 20:01:16
300あたりから「くだすれC言語」化してきたな、と思ってたら
ついにC言語ですらなくなったか。このスレも終わりかな。

381:デフォルトの名無しさん
06/06/12 21:07:50
入門編だからいいんだよ
質問の仕方入門や
BOOL代数の入門も含まれる

という事にしてマタリしとこう

382:デフォルトの名無しさん
06/06/12 21:15:16
>>381
質問の仕方は勘弁してくれ。
正しい質問の仕方を心得ている事は、最低限必要。


プログラミング言語初心者はいいが、日本語初心者はお断りにすべき。
母国語もマトモに使えないようでは、プログラム以前の問題。


383:デフォルトの名無しさん
06/06/12 21:15:56
2B or (not 2B)

384:デフォルトの名無しさん
06/06/12 22:24:30
>>368
「論理回路 完全系」でググれ。

385:URLエンコード
06/06/14 14:57:40
URLリンク(upld3.x0.com)

このソースは書籍からのCGIのサンプルなんですが
CによってURLエンコードをする際に%xx%nn%yyという2バイトコードをを16進数に変更して1バイトにまとめていく処理があるのですが
229行目での配列への代入が何を代入しているのかがどうしても分かりません。
この代入は次のループで書き換えられているような気がするのですが、これは必ず必要な処理なのでしょうか。
変な文章の質問になりますが、ここだけがどうしても胸につかえていて気持ち悪いんです。どなたかスッキリさせていただけないでしょうか。

386:デフォルトの名無しさん
06/06/14 15:13:41 BE:149769656-#
>>385
%xxという形式じゃなかったら、そのままコピーしてるだけなんじゃない?
インデックスの変数をインクリメントしてるから、次のループでも
上書きはしてないと思う。


387:URLエンコード
06/06/14 15:23:18
>>386
失礼しました。
改行でのみの行番号だと223行目の部分でした。
エディタ入れなおしたばっかりで設定し忘れていました。


388:デフォルトの名無しさん
06/06/14 15:40:38 BE:199692858-#
>>387
ああ、本当だ、それバグっぽいね。

他にも、渡されたデータのサイズに関係なく適当にmalloc()してるとか、
%が現れたら、無条件にインデックスを+2してるとか、危なそうなコー
ディングしてるね。


389:URLエンコード
06/06/14 15:43:59
>>386
>>388
おお。ではこれは必要のない一行ということでよかったのでしょうか。
御教授いただきありがとうございました。
これで胸の支えが取れた感じです、、が危なそうなコーディングですかー。
中々C言語によるCGIの書籍というのがなかったもので、徐々に理解していきたいとおもいます


390:デフォルトの名無しさん
06/06/14 17:47:23
>>385のソース見ると
なんていうか、すごいね。


391:デフォルトの名無しさん
06/06/14 18:17:22
学校ではC++できるのですが、
家ではやり方が良くわかりません。
どうすれば、C++でコンパイルや実行などができるのでしょうか??

392:デフォルトの名無しさん
06/06/14 18:24:56
>>391
学校ではどうやっている?

393:デフォルトの名無しさん
06/06/14 23:31:48
電気屋に逝って店員に相談する。
XPならVC++とかじゃね? VC++スレ逝け。詳しい香具師が多い。

394:デフォルトの名無しさん
06/06/14 23:38:34
いつも思うんだが、なぜ学生なのに先生や同級生に聞かないんだろう

395:デフォルトの名無しさん
06/06/14 23:45:34
キョドってキモがられて虐められて以下無限ループ

396:デフォルトの名無しさん
06/06/14 23:59:58
URLリンク(www.vipper.org)
こんな顔の奴だな。

397:デフォルトの名無しさん
06/06/15 00:04:08
ああ… そういう奴らがここに溜まって来る訳か。

398:デフォルトの名無しさん
06/06/15 00:07:11
下がり眉
常に上目遣い
常に口が開いてる
口をすぼめ気味
自触癖っぽい唇の傷

全てが精神遅滞を思わせる特徴だなwww

399:デフォルトの名無しさん
06/06/15 00:13:10
友達はいないかも知れんが先生に聞くことはできるだろ
それすらできないならちょっとアレだ

400:デフォルトの名無しさん
06/06/15 00:26:38
>>399
この手の人は、他人が書いた答えを写す事しか頭にないだけ。

401:デフォルトの名無しさん
06/06/15 00:36:50
>>399
そうだよね。積極的に教授と交流作っとけば成績もプラスに評価されるよね。
あ、もちろん対教授コミュ法は『教えて君』じゃだめだよ。

402:デフォルトの名無しさん
06/06/15 02:34:08
#include <time.h> #include <stdio.h>
int main(){
time_t times;
struct tm *jt;
time_t tt;
times = time(NULL);
// jt = localtime(×);
jt->tm_year = 100;
jt->tm_mon =1;
jt->tm_mday = 1;
jt->tm_hour = 5;
jt->tm_min = 11;
jt->tm_sec = 33;
printf("%4d年%2d月%2d日 %2d時%2d分%2d秒\n",
1900+jt->tm_year,jt->tm_mon,jt->tm_mday,
jt->tm_hour,jt->tm_min,jt->tm_sec);
tt = mktime(jt);
printf("%d\n",tt);
return 0; }

上記プログラムで、現在時刻を、また通算秒数に戻したいのですが、
localtime()で受け取った値をそのまま使えば、戻せるのですが、
自分で、年月日、時間分秒を指定すると、-1になってしまいます。
年月日、時分秒だけ入力して、
通算秒数に戻す方法はないのでしょうか?改行で怒られて見づらくてすいません。

403:デフォルトの名無しさん
06/06/15 06:04:48
>>402
時刻表示にprintf()で愚直に詰めるのはやめようよ。
ちゃんとstrftime()って関数があるんだから。
処で、jtはどこを指しているのかな?

404:402
06/06/15 07:39:19
そういう関数があるんですか、いろんなHPでprintfで表示してる
のでそれで良いのかと思ってました。

すみません、どこを指してるとはどういう意味でしょうか。
localtime()の返り値を受け取って初めて、
時間指定ができるようになるとか、そういう意味でしょうか。


405:デフォルトの名無しさん
06/06/15 07:56:52
localtime()を使わない場合、struct tm * jt;でポインタを宣言した後初期化もしないで代入してはダメ。
また、localtime()で戻されるポインタが指す領域もlocaltime()が抱える静的領域なのでそれを加工してはダメ。

書くならこんなもんかな。
#if 0 /* localtime()の例 */
time_t tt = time(NULL);
struct tm * pjt = localtime(& tt);
#else /* 自分で代入する例 */
struct tm jt = {33, 11, 5, 1, 1, 100, };
struct tm * pjt = & jt;
#endif
char buf[30];
strftime(buf, sizeof(buf), "%F %r", pjt);

strftime()の使用例などについてはこちら参照。
URLリンク(www.linux.or.jp)
printf()で愚直に詰めるのはアナクロだと言うことを知らないアナクロな表現者は多いと言うことだね。

406:デフォルトの名無しさん
06/06/15 08:56:23
>>405
> strftime(buf, sizeof(buf), "%F %r", pjt);

それ「#else」の方だと

 strftime(buf, sizeof(buf), "%F %r", &pjt);

としないとダメじゃね?

407:デフォルトの名無しさん
06/06/15 09:24:44
>>406
よく見ろ。それを回避するためにstruct tm * pjt = & jt; している。

408:406
06/06/15 10:47:00
>>407
そうか、見落としてたよ。

409:デフォルトの名無しさん
06/06/15 16:16:49
printf 使わないで、
strftime だけで
"2006 年 6 月 15 日 木曜"
て書く方法教えて!

410:デフォルトの名無しさん
06/06/15 16:58:54
>>409
char buf[100];
struct tm date = {0};
date.tm_year=2006-1900;
date.tm_mon=6-1;
date.tm_mday=15;
mktime(&date);
setlocale(LC_TIME, "Japanese");
strftime(buf, sizeof(buf), "%Y 年 %#m 月 %#d 日 %a 曜", &date);
puts(buf);

411:デフォルトの名無しさん
06/06/15 18:47:34
外部関数としてファイルを分割し、
メイン関数で外部関数を呼ぶとき、構造体を引数として外部関数に渡すにはどうしたらいいですか?

412:デフォルトの名無しさん
06/06/15 20:31:57
>>411
普通に呼べばいい。

413:デフォルトの名無しさん
06/06/15 20:48:48
>>411
その構造体をさらに別のファイルfoo.hで宣言して、それぞれのソースファイルでインクルードする。

414:デフォルトの名無しさん
06/06/15 21:47:24

0000000000
1111111111 1セット
2222222222
0000000000
1111111111 2セット
2222222222
0000000000
1111111111 3セット
2222222222
...        xセット

(10+1, 3, x)
10文字ずつ並んでいる(改行コードで文字数が+1と考える)
それが3行で1セットのものがある。
それがxセットあるとする。あと、これがchar str[1024];とかに入ってると考える。

それを次のように横向きにつなげるのにはどうすればいいだろうか?

000000000000000000000000000000
111111111111111111111111111111
222222222222222222222222222222
(10*x+1, 3)

※ここで10と3って書いたけど実際に使うプログラムでは3じゃなくて20です。
長くなりすぎないように3に変えただけです。

頭が悪くてやり方がわからん。教えてくれまいか?

415:デフォルトの名無しさん
06/06/15 23:34:21
// こんなもんかな
const int rowLen = 10;
const int setLen = 3;
const int rowSize = rowLen + 1;
const int setSize = rowSize * setLen;
char newStr[1024];
newStr[0] = '\0';
for (int rc = 0; rc < setLen; ++rc) {
for (int ic = 0; ic < x; ++ic) {
sprintf(strchr(newStr, '\0'), "%.*s", rowLen, & str[ic * setSize + ir * rowSize]);
}
}

416:デフォルトの名無しさん
06/06/15 23:43:26
変数名の付け方が最悪だなウププププ

417:402
06/06/16 00:05:27
>>405
うわ、経過秒表示できました。
自分で代入する場合のサンプルまでどもです。

418:デフォルトの名無しさん
06/06/16 00:47:20
NULLポインタを返す関数を作るのはだめですか?
一々アドレスの有効性を示すブール値が必要とは思ってなかったけど
会社の先輩に言われました。ここは組み込み系だからなとかなんとか・・・

419:デフォルトの名無しさん
06/06/16 00:49:34
>>418
そんなことありません。
ポインタを返す関数の場合、エラーが起こったときにはNULLを返すのが普通です。

420:デフォルトの名無しさん
06/06/16 00:50:49
>>418
その先輩を説得するために、mallocやfopenの例を示しましょう。
ただし、あまり関係が悪くならないように立ち回る必要がありますね。

421:418
06/06/16 00:54:00
>>419
そうですよねー。
なんかアセ屋さん上がりの人たちが得意げに説法してくれるので
自信失いました。

NULLを知らずにアクセスしたらどうすんだって言うんですよ。
ちゃんと返り値のほうでNULLかどうか見てるのですが、
忘れたらどうすんじゃとかなんとか・・・
それ知らない人が次にソース触ったらどうとこかこうとか。

会社辞めようかな orz

422:419
06/06/16 01:22:19
>>421
周りが全部そうだったら、ひとまず先輩を立てておいて転職を画策するって手もありますね。

いずれにせよ・・・がんばってください。

423:デフォルトの名無しさん
06/06/16 07:56:32
>>421
そんな変なスタイルに凝り固まった人たちと仕事していても(技術的に)得る物はありませんよ。
適当に相槌打ちつつ次を模索するのが妥当かと。

424:デフォルトの名無しさん
06/06/16 13:58:33
NULLを知らずにアクセスするのが怖いならCやC++は使うべきじゃないなあ。


425:デフォルトの名無しさん
06/06/16 19:06:53
>>415
ありがと。解決しました。

426:デフォルトの名無しさん
06/06/16 22:42:09
組み込み系だから何か事情があるんじゃないの?
つうか一番大事な理由をちゃんと聞いてないってどういう事よ

427:デフォルトの名無しさん
06/06/16 22:45:22
理由書いてるじゃん、「NULLを知らずにアクセスしたらどうすんだ」って。
推して知るべし。

428:デフォルトの名無しさん
06/06/16 23:14:47
boolean な戻り値が何を意味してるかを知らずに
戻り値を無視したらどう(ry

429:デフォルトの名無しさん
06/06/17 01:04:16 BE:38820454-#
ポインタを戻すこと自体の是非は文脈に依存するが、ポインタが戻されたらNULLかどうかを
チェックするのは当然。

430:デフォルトの名無しさん
06/06/17 01:45:23
仕様で NULL にならないと書いてあっても、
とりあえず assert くらいはするかもしれんな。

431:418
06/06/17 09:15:32
>>426
いろいろ調べてみて分かってきたのですが
今私が使っているCPUではNULLがゼロ番地を示すようにコードが落ちます。
ここまでは普通の話かもしれません。
(違うところを差す環境もあるらしいですが)

このCPUの場合には0番地はCPUが使う特殊な領域として定義されていて
ユーザがアクセスすると暴走するようです。
明確にCPUリセットや決められた割り込みが発生すればいいのですが、
他に使っている割り込み処理を壊してしまったりするようです。

正直、NULLをチェックするのを忘れた場合でも、CPUリセットする
だろうという思い込みはありましたが、
やっぱり、チェックし忘れたらどうするんだっていう言い方だけでは
分かりませんよね。。。

>>428
結局そういうことですよね。
しかも、booleanがTRUEのときに、返り値のアドレスがNULLかチェックする
なんて馬鹿げてるし。
結局NULLかどうかは必ず検査していないといけないですよねw

>>430
NULLが返ることもあることを仕様書に明記すればいいみたいな話で
もういいやみたいな言われてしまいました。

でもやっぱり結局はNULLかどうかを検査するコードを常に書かないと
いけないわけですよねw

難しいですね もっと勉強します。

432: ◆hznrtioKU2
06/06/17 13:25:54
教えてください。
char *str[][] =
{
{"abc", "def"},
{"ghi","jkl"}
};

これを引数として関数側に飛ばす場合、受け側はどういう記述でいけばいいのでしょうか?
*[][]でも***でも**[]でもむりですた('A`)

433: ◆hznrtioKU2
06/06/17 13:28:05
BOOL GetIniFilePos(POINT *coordinate, short PosVal, char **chKeyPos, char *ActDir)
{
short i;
for(i = 0; i < PosVal; i++)
{
/* セクション"POS"からxの値を取得 */
(coordinate + i)->x = GetPrivateProfileInt("POS", &chKeyPos[0][i], -1, ActDir);
if((coordinate + i)->x == -1)
{
goto FUNC_END;
}
/* セクション"POS"からyの値を取得 */
(coordinate + i)->y = GetPrivateProfileInt("POS", &chKeyPos[1][i], -1, ActDir);
if((coordinate + i)->y == -1)
{
goto FUNC_END;
}
}
return TRUE;
FUNC_END:
return FALSE;
}
static char *chItemPos[POS_XY][POS_VALUE] = {
{"One_x", "Two_x", "Three_x", "Four_x", "Five_x", "Six_x"},
{"One_y", "Two_y", "Three_y", "Four_y", "Five_y", "Six_y"}
};
/* SKILLPOSキー項目テーブル */
static char *chSklPos[POS_XY][SKLPOS_VALUE] = {
{"SklOne_x", "SklTwo_x", "SklThree_x", "SklFour_x", "SklFive_x", "SklSix_x"},
{"SklOne_y", "SklTwo_y", "SklThree_y", "SklFour_y", "SklFive_y", "SklSix_y"}
};


434: ◆hznrtioKU2
06/06/17 13:29:57
GetIniFilePos()の3番目の引数に下記の配列を渡して参照させたいんだが・・・
chKeyPos部分の受けの型はいったいどうすればいいのかさっぱりなんで('A`)


435:デフォルトの名無しさん
06/06/17 13:35:33
>>431
君にはこれがきっと役に立つと思うから読んでごらん。
URLリンク(sec.ipa.go.jp)

ただ、これで先輩を納得させたり教育したりしようと思わないこと。
一人でこっそりスキルアップに励むが吉。

436:デフォルトの名無しさん
06/06/17 13:42:07
>>434
無理。
char*を二つメンバーにもつ構造体を宣言し、その配列を使うようにしろ。

437: ◆hznrtioKU2
06/06/17 13:44:05
>>436
あー、やっぱそうなのか
それとなぜ無理なのかを教えてほしいんですけどいまいち納得がいかないというか
ポインタについてまだ理解できてないというか・・

438:デフォルトの名無しさん
06/06/17 14:19:36
>>437
結論だけ言うと、多次元配列を関数に渡す場合、仮引数の型は最初の次元を除いてその大きさを
全て明記しなければならない。

詳しくはC FAQ参照。
URLリンク(www.kouno.jp)

この説明で理解できない場合は、『ポインタ完全制覇』のような(そのような書籍が実在するのか
知らないし、読んだこともないが、確かにポインタに特化した書籍は存在する)書籍を読むと良い。

あるいは、”多次元配列 仮引数”などで検索してヒットしたページを読んでみると良いかもしれない。

439:デフォルトの名無しさん
06/06/17 14:22:37
書き忘れたが、POS_VALUEとSKLPOS_VALUEという異なる値(>>433の場合はどちらも6だが)を
使う限り、配列を渡すのは無理だということ。
どちらもいつも同じというのであれば、仮引数にその大きさを明記してやれば渡せる。

440: ◆hznrtioKU2
06/06/17 15:12:12
>>438-439
参考になった。ありがとう

441:デフォルトの名無しさん
06/06/18 19:27:25
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
嫌いなコテハン投票URLリンク(vote2.ziyu.net)
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

えいいちに清き1票を!


442:デフォルトの名無しさん
06/06/19 12:54:09
>>435 もっといいやつ教えてあげればいいのに。


443:デフォルトの名無しさん
06/06/19 14:01:52
>>442
じゃ、君が教えてあげれば?

444:デフォルトの名無しさん
06/06/19 21:24:46 BE:49923252-#
>>443
それは断る。

445:デフォルトの名無しさん
06/06/19 22:31:52
例えば、その関数に至ったら1秒間止まる、といった具合に、
一定時間処理を止める関数ってありますか?

446:デフォルトの名無しさん
06/06/19 22:59:13
ある

447:デフォルトの名無しさん
06/06/19 23:00:53
sleep系の関数は「最低N(mm)秒」止まるだけ

448:デフォルトの名無しさん
06/06/19 23:16:38
>>447
thx

449:デフォルトの名無しさん
06/06/20 00:10:41
120.10 200.55 344.78 ・・・
150.66 300.78 664.13 ・・・
400.44 135.66 333.44 ・・・

上のようにファイルに実数型で記入されているものを
整数型に型変換したいのですがどうすればいいのでしょうか
小数点以下の数値は切り上げでも切捨てでも構いません
一つずつならできるのですが、複数だとうまくできません
どなたかご助力ください


450:デフォルトの名無しさん
06/06/20 00:13:26
その、一つずつなら出来るというコードを見せてもらおうじゃないか。

451:デフォルトの名無しさん
06/06/20 00:16:36
>>449
一つずつってつまりは複数なんじゃないの?

452:デフォルトの名無しさん
06/06/20 00:25:49
言い方が間違っていました
一つずつではなく、一つのみなら整数型に変換できる
ということです
コードは他のサイトから拾ってきたもので
double d = 2.5;
int i = (int) d;
のようなやり方をして型変換していました


453:デフォルトの名無しさん
06/06/20 00:29:05
んーそれをファイル内のすべてに対してすればいいんでないの?

454:デフォルトの名無しさん
06/06/20 00:29:15
>>452
一行読み取って、スペースで区切りながら、atofを使うか、
一行読み取ってsscanf("%lf %lf ....")とかする(個数固定の場合)

455:デフォルトの名無しさん
06/06/20 00:31:56
>>453
>>454
ありがとうございました
やってみます

456:デフォルトの名無しさん
06/06/20 00:51:08
>>454
strtod()という選択肢はないのかね。

457:誰か教えてください・・・。
06/06/20 11:03:59
(OS)XPでソフトはVC++なんですが、こんな問題が解けないのでお願いしたいのですがいいでしょうか?
得点に負の値が入力されるまで得点を入力し、その最大値と最小値を求め、その差が30点以上であれば
「差が大きい」と表示するプログラムを作成せよ。
です。もしよかったらおしえてください。

458:デフォルトの名無しさん
06/06/20 11:05:04
スレ違い

459:デフォルトの名無しさん
06/06/20 12:28:55
>>457
#include <stdio.h>

int main(int argc, char* argv[])
{
  printf("得点に負の値が入力されるまで得点を入力し、"
      "その最大値と最小値を求め、"
      "その差が30点以上であれば「差が大きい」\n");
}

460:デフォルトの名無しさん
06/06/20 13:15:15
>>457
人にものを聞くのに「せよ」なんて命令形使うのは人間として間違い。


461:デフォルトの名無しさん
06/06/20 13:40:54
>>460
ちょwwwwwwおまっwwwwww人にものを聞くじゃなくて
その部分は「問題文」だからwwwwwwww
>>457
>もしよかったらおしえてください。
って言ってるじゃんwwwwwwwwwww

まさか、あんたが受けたことある試験や問題集に書かれていた問題って
次の○○を解いて下さい。 みたいな、丁寧口調なものばかりだったの?w

462:デフォルトの名無しさん
06/06/20 14:11:09
【問題】
  得点に負の値が入力されるまで得点を入力し、その最大値と最小値を求め、
  その差が30点以上であれば「差が大きい」と表示するプログラムを作成して
  戴けましたなら幸い至極に存じあげ奉り候。

463:デフォルトの名無しさん
06/06/20 14:12:12
何が候(そうろう)だよー!早漏なんて卑劣すぎ!

464:デフォルトの名無しさん
06/06/20 14:14:33
精神年齢低すぎ

465:デフォルトの名無しさん
06/06/20 15:09:48
>>457
URLリンク(kansai2channeler.hp.infoseek.co.jp)

466:デフォルトの名無しさん
06/06/20 15:12:39
>>457
>>465はミスった
URLリンク(kansai2channeler.hp.infoseek.co.jp)


467:デフォルトの名無しさん
06/06/20 17:23:01
>>461
昔から問題文の命令形はおかしいと思ってました。
自分が先生をやっていた時も自分で問題文書きながら
絶対おかしいと思ってました。w


468:デフォルトの名無しさん
06/06/20 17:29:46
それじゃ「解いてみよう」でいきますか?

469:デフォルトの名無しさん
06/06/20 17:30:42
なんなら「点数が欲しいなら解いた方が良いよ」とか?
「解かないと単位取得が危ういよ」とかそことなくやらせる気を起こさせる?

470:デフォルトの名無しさん
06/06/20 18:12:29
ゆとり世代もここまできたか

471:デフォルトの名無しさん
06/06/20 20:29:38


472:デフォルトの名無しさん
06/06/20 20:34:42
* 斬新な試み
1. 問題文を若者言葉にしてみる。
2. 問題文を絵文字満載にしてみる。
3. やたら顔文字を使う。
4. (爆)が文末に意味なく挿入されている。
5. wが文末に意味なく挿入されている。
6. 藁が文末に意味なく挿入されている。
7. 最後に「欝」の文字が入っている。


473:虫歯18本
06/06/20 21:24:54
超伝導量子干渉素子のプログラムを作ってください。
ちなみに水銀が超伝導状態になるのは、4.2K(ケルビン)の時です。

474:デフォルトの名無しさん
06/06/20 21:32:34
ΣΣ{(内積)の二乗}
を計算するプログラムはどのようにつくったらよいでしょうか?
forつかっただけでできますか?


475:デフォルトの名無しさん
06/06/20 21:51:10
彼女ができません。
forつかっただけでできますか?

476:デフォルトの名無しさん
06/06/21 00:25:24
for(int=0;i<N;i++)if(kokuhaku(girlfriend[i]))break;

477:デフォルトの名無しさん
06/06/21 01:44:00
残念。 N = 0 だ。

478:デフォルトの名無しさん
06/06/21 09:22:11
   ∧ ∧
ΣΣ(´Д`)


479:C++風に
06/06/21 12:42:16
>>475
for( i=0; i<My->GirlFriendCount; i++ ) {
  try {
    /* 告白 */
    Declared( My->GirlFriend[i] );
  } catch( DeclaredSuccessException exp ) {
    /* カップル成立 */
    DeclaredSuccess( exp );
    break;
  }
}


480:デフォルトの名無しさん
06/06/21 13:50:46
なるほど。彼女が出来る方が例外的なことであると。


481:デフォルトの名無しさん
06/06/21 14:04:24
どうせなら一生彼女ができない無限ループじゃね?
無限と言っても人生が終わった時点でプログラム終了だが

482:デフォルトの名無しさん
06/06/21 14:26:58
両親からforkした段階で変数kanojyoが宣言されてないと思う。
ext(1)で氏ぬのを待つだけ。

483:デフォルトの名無しさん
06/06/21 16:05:32
int life(const char *job)
{
 int age, lifetime;

 if (strcmp(job, "プログラマ") == 0)
  lifetime = 50;
 else
  lifetime = 70;

 for (age = 0; age < lifetime; ++age) {
#ifdef IKEMEN
  if (age >= 10)
   printf("%d 人目の彼女が出来ました。\n", age - 9);
  else if (age == 25)
   puts("結婚しました。");
  else if (age >= 30)
   printf("%d 人目の愛人が出来ました。\n", age - 29);
#endif
  sleep(31536000);
 }
}


484:デフォルトの名無しさん
06/06/21 17:02:40
>>483
生まれた時には職業は決まってないだろう。

485:デフォルトの名無しさん
06/06/21 17:15:48
age35ってドラマがあったよね?

486:デフォルトの名無しさん
06/06/22 19:28:42
生まれながらのプログラマー。


487:デフォルトの名無しさん
06/06/22 19:29:44
>>484
神は何でも分かっているのです。


488:デフォルトの名無しさん
06/06/23 01:26:54
ファイルから構造体の配列への読込と、書き込みがいまいち
分からないので、教えてください。

489:デフォルトの名無しさん
06/06/23 01:30:06
>>488
マルチ乙

490:デフォルトの名無しさん
06/06/23 01:32:42
まるちはだめよ。

491:488
06/06/23 01:35:37
>>489>>490
マルチになってスイマセン。
どーしても知りたくて。緊急なんです。
良ければ教えてください。

492:デフォルトの名無しさん
06/06/23 01:48:02
>>491
情報が曖昧過ぎて何をしたいのかわからない。
宿題スレに、構造体の配列を使った課題があったと思うから探してみたら?

493:デフォルトの名無しさん
06/06/23 07:45:58
>>488
struct foo { ... };

void write_foo()
{
FILE* fp;
struct foo f[10];
fp = fopen("foo.dat", "wb");
fwrite(f, sizeof(struct foo), 10, fp);
// fwrite(f, sizeof(struct foo), sizeof f / sizeof f[0], fp);
// fwrite(f, sizeof f, 1, fp);
fclose(fp);
}

void read_foo()
{
FILE* fp;
struct foo f[10];
fp = fopen("foo.dat", "rb");
fread(f, sizeof(struct foo), 10, fp);
fclose(fp);
}

494:デフォルトの名無しさん
06/06/23 09:31:22
実行するとgetsやfgetsのコードがスルーされるのですが、原因が全くわかりません。
しかし、例えば
gets(str);
gets(str);
と二回続けて書くと1つだけが実行されます。
原因が解る方いらっしゃいますか?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch