2012年09月PCサロン19: C言語初心者質問総合 (857) TOP カテ一覧 スレ一覧 2ch元 削除依頼
Habbo辞めて他のアバターチャットしようぜ! (830)
教えて君が書き込んでそれに答えるスレ (725)
Pen4で自作機組むって言ったら兄貴に殴られました30 (249)
OSXからWindows7に移行した人っている? (255)
こんなPCはやだ (264)
OS使用暦を述べよ (257)

C言語初心者質問総合


1 :04/03/26 〜 最終レス :2012/10/31
っということでよろしく

2 :
   .__
  J_†_|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   (,,゚Д゚) <  悩める2ゲッター達よ、集いなさい。
  ハ ̄ ̄`つ | 自らの罪を告解し、逝きなさい。
  し ╋|   | 大いなる2ゲット神のもとに…ゲットー!
   |___|   \__________________
   ∪ ∪

3 :
漠然とした質問すみません。
Cのコマンドライン引数とはどうやって使うのでしょうか?
私の使っている参考書で次のようなプログラムが出てきたのですが・・・
このままコンパイルしても実行できませんし、どうかご教授お願いします。
#include <stdio.h>
int main(int argc,char *argv[])
{
int i;
for(i=1;i<arqc;i++) printf("%s",arqv[i]);
return 0;
}

4 :
>>3
5行目。q→g

5 :
さっきの質問をこれでご教授おねがいします、
#include <stdio.h>
int main(int argc,char *argv[])
{
int i;
for(i=1;i<arqc;i++) printf("%s",arqv[i]);
return 0;
}


6 :
#include <stdio.h>
int main(int arqc,char *arqv[])
{
int i;
for(i=1;i<arqc;i++) printf("%s",arqv[i]);
return 0;
}
これでした、おねがいします

7 :
#include <stdio.h>
int main(int argc,char *argv[])
{
int i;
for(i=1;i<argc;i++) printf("%s",argv[i]);
return 0;
}
こうだよヴぉけ

8 :
#include <stdio.h>
int main()
{
printf(">>1shime");
return 0;
}
こうだろヴぉけ

9 :
>>3
arqcなんて変数どこで宣言してるんですか?

10 :
>>3
キミはDOS開いてformat c:とうって円たーおしてほしい

11 :
#include <stdio.h>
long main(long argc, char **argv){
  long i;
  for(i=1; i<argc; i++){
    printf("%s", argv[i]);
  }
  return(0);
}

12 :
つうか>>6は通るだろ。

13 :
単にコマンドライン引数が何か分かってないだけだな。

14 :
>>13
そのとおりです。
説明お願いします。

15 :
実行はできてもなにも起こらないのですけど、コンパイルした奴はどのようにすればつかえるのですか?

16 :
つーかもー
#いんくたぁ〜ん <stdio.h>
main(void)
{
printf("くんにぃ\n");
}
これで勘弁してください

17 :
>>15
君には向いてない
なんか違うことやった方がいいよ

18 :
ふぅ・・・たくさん釣れたわけだが・・・。

19 :
>>15 4連鎖すべし。

20 :
>>3
コンパイラ、何使ってるの?

21 :
Turbo Pascal

22 :
>>21
そんな縄文時代の言語は他所でやってください。

23 :
漠然とした質問すみません。
Pascalのコマンドライン引数とはどうやって使うのでしょうか?
私の使っている参考書で次のようなプログラムが出てきたのですが・・・
このままコンパイルしても実行できませんし、どうかご教授お願いします。
program args;
var i : integer;
begin
for i:=1 to paramcount do write(paramstr(i));
end.

24 :
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄戎 ̄ ̄ ̄ ̄橋 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                          .___
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄┬  ┬ ̄ ̄ ̄ ̄
            ミ  _ _  ミ へヘ  ニハハ │  │
 ココ糞スレの    〃┏━ ヽ 、/〃⌒⌒ヽ   │  │
  臭いが    |  ノノハ))))〈〈 ノノノハ))).   │  │
  するよ〜!!  .リリ ´∀`)リ |ヽ|| ´∀`||   │  │
          ⊂# ∞ #つ ⊂l~V† Vつ.  │  │
           <__ ∞___>   く____ >.  │  │
.            (_丿 l_ノ      し l_ノ     │  │
.                           │  │
〜〜          〜〜〜          〜〜         〜
     〜             〜〜           〜〜        〜〜

25 :
普通はargcで回すもんなの?
GetCommandLineなりgetoptなり使ったほうがいいと思ってるんだけど、
どうなんでしょう

26 :
普通って何を想定していまつか?

27 :
質問です。unsigned charの変数に255をいれたつもりですが
いつのまにか-1になってました。多分intの数字とやりとりしたのが
原因だと思うのです。そこでint の数値をunsigned charにするとき
こういう問題を起こさずにすむ方法があれば教えてください。

28 :
>>27
どうやったら-1になるの?
unsigned char c = 255;
int n = c;
unsigned char d = n;
ってやっても、d = 255だよ。


29 :
どっかでcharにしちゃったんじゃねーの?

30 :
明示的に
int n = (char)c;
とかでもしない限り、-1にするほうが難しいと思う。

31 :
intが実は、1バイトだったっとか。
しかもターゲットは 8ビットマシン。

32 :
>>28
ありがとうございます。
実はchar と unsigned charを混ぜて使ってたのに気づきました。

33 :
C言語って なんですか。

34 :
>>33
Cnglishっていう言語のこと

35 :
>>3
このページなんかはどうでしょう?参考になりませんか?
http://c-production.com/contents/c/sec10.html
さて、質問する前に次のことを守ってください。
1、自分でgoogleなどで検索し、調べてみる。またどこまで調べて、どこまでわかったが、どこがわからないかも書いてください。
 (上のURLは、"コマンドライン C言語”)で検索しました。)
2、プログラムのソースだけではなく、コンパイルの環境(OS、コンパイラ、ライブラリ等)の情報を書いてください。
3、2chに書き込みをするまえにもう一度読み返し、書いた文章を構成してください。(自分もなかなかできてないのですが。。。)
以上です。C言語の勉強ははじめはたいへんかもしれませんが、だんだん楽になってくるものです。がんばってください。

36 :
コマンドライン引数 http://www9.plala.or.jp/sgwr-t/c/sec11-4.html

37 :
P = (struct person *)mallco(sizeof(struct person ));
先頭アドレスの代入だけ
なんでこの書き方がOKなのか分りません。

38 :
>>3
ネタとは思うが。エラー修正したとして、こうならない?
プロンプト>a.out age sage mage moge
agesagemagemogeプロンプト>

39 :
mallocは、
void* mallo( size_t );
という関数。
mallco(sizeof(struct person ));
の戻り値は、void* であって struct person* でないので、
キャストして代入する必要がある。

40 :
いやCならキャストの必要ないぞ。キャストが必要なのはC++。
それはそれとしてmallco?

41 :
やっちまった・・_| ̄|○

42 :
>>41
さいってい!

43 :
またーり汁(´・ω・`)ノ

44 :
malloc使わない。calloc使う。

45 :
#include <stdio.h>
#include <string.h>
int main(void){
char str[64];
int i;
double data[10]; ←
for(i = 0; ; i++){
printf("data[%d] = ", i);
scanf("%s", str);
if(strcmp(str, "E") == 0) break;
data[i] = atof(str);
}

順番に数字をdataに入れてゆき、Eが入力されたら入力をやめるっての作ってみたつもりなんですけど、
dataの配列の数を指定しないで、入力された分だけ配列を作るのってどうやったらいいですか?

46 :
俺Perlしか分からんし

47 :
>>45
mallocでホイテョ━━━(゚∀゚)━━━━イ!!
…(・∀・)ホイテョイ!!

48 :
こんなメモリ操作、mallocで簡単簡単!ホイテョイ!

49 :
>>47-48
なるほど…。ありがとうございます、勉強します。

50 :
あ、終了条件がEが入力された時だけの場合は、
線形リストでホイテョイだな、たぶん。
これにも一応mallocは使うと思うけど、望みの物はこれだな、たぶん。

51 :
ホイテョイ厨はホイテョイスレにカエレだよもん

52 :
C++だったら.
vector<double> data;
while (1)
{
string str;
cin >> str;
if (str == "E")
break;
data.push_back(atoi(str.c_str()));
}

53 :
>>52
ホイテョ━━━(゚∀゚)━━━━イ!!
…(・∀・)ホイテョイ!!

54 :
そんなもんレンジでチンしたら出来上がりだよ!

55 :
>>54
ホイテョ━━━(゚∀゚)━━━━イ!!
…(・∀・)ホイテョイ!!

56 :
ニューラルネットワークやGAの簡単なC(perlでもいい)のサンプルソースなど、どこかにあったら
教えてください。(高校程度でわかるようなの)
ググってはみたものの難しいのやらC++とかしか見つからなかったので
お願いします。

57 :
>>56
ホイテョ━━━(゚∀゚)━━━━イ!!
…(・∀・)ホイテョイ!!

58 :
BLOGのMovable TypeってC言語ですか?

59 :
>>58
(´・ω・`)ホイテョ━イ

60 :
C言語って関数で出来てるじゃないですか
その始めから付いてる関数ってどうできてるんですか?
標準関数を僕も作りたいんですけど
printfってどうやって作るんでしょうか?

61 :
>>60
printfなんてあるから作らなくていい。
お前が作る関数なんか標準関数とは認めない。
どうせなら
Java逝って便利なクラスでも作ってくれYo

62 :
>>61
(´・ω・`)ホイテョ━イ

63 :
WindowsXP,Microsoft Wordで作成したレポートの行間を全てダブルスペースにしなくてはならないんですが、やり方のわかる方、教えてください。


64 :
<Font Size="7" Color="Red">テスト</Font>

65 :
初心者というか今から始める入門者です。
 オセロや将棋や囲碁を自分のPCで一からプログラムしたいのですがお勧めの
書籍&ソフトを教えてください

66 :
手っ取り早く作りたいならHSP
コンピュータとの対戦で、強い将棋プログラムを目指すならCかC++
ぬるぽしたければJAVA

67 :
スマソ。スレタイ読んでなかった。
猫でもわかる でぐぐれ。

68 :
キーボードから入力を受付けるときに、
「キー連打」と「一定時間以上キー押しっぱなし」
を区別したいのですが、どうすればよいでしょうか?
kbhit()とgetch()を使ってキー入力を判断しているのですが、
私には今のところ、区別できません。
だれか教えてください。
よろしくお願いします。

69 :
以下の問題ができなくて完全にお手上げ状態です。なにとぞアドバイスをお願いします。
1 文字列をキーボードから読み取り、その文字列を暗号化した文字列を表示するプログラム。ただし、入力する文字列は英数記号のみとする。
2 暗号化は次の方法で行う。文字列中のローマ字を大文字小文字を問わず下記に示すとおりの置き換えを行う。
3 ローマ字以外の文字は暗号化しない。
a b c d e f g
  ↑ ↑ ↑ ↑ ↑ ↑ ↑
↓ ↓ ↓ ↓ ↓ ↓ ↓
n o p q r s t

70 :
他スレに移動しました。大変失礼しました。

71 :
あのぉ
明日C言語のテストがあるのですが
ポインタと構造体の
何か詳しく説明してるサイトないでしょうかね??

72 :
すみません、
unsigned char* pA;
unsigned char* pB;
unsigned char* pC;
if (pA == pB){
pB = pC;
}
これをマクロにするとどうなるのでしょうか?

73 :
http://candybox.tv/
ここかな

74 :
(unsigned char *pA,*pB,*pC;((pA==PB)?pB=pC:;)))
こんな感じではないですかね。コンパイルして試してませんので、参考として。
でも、変数の宣言してますので、if分やfo文の()の中には書けませんよ。

75 :
失礼しました。
{unsigned char*pA,*pB,*pC;((pA==PB)?pB=pC:;)}
こっちの方がまともでした。

76 :
F(T)=6.72*10^(-4)*(1000-T)-5.67*10^(-8)*0.5*(T^4-600^4)の
はさみうち法をC言語でのプログラムを教えていただけないでしょうか??
ホントよくわかんないので、よろしくお願いします

77 :
>>72
pA, pB, pC が既に定義されていてなんらかの値が入っていると仮定する。
if (pA == pB){
pB = pC;
}
の部分だけなら
#define COMP_A_B_SET_C(A,B,C) ((A==B)?(B=C):B)
でいいんでないかい?
>72がいう事をそのままマクロにすると>75のようになるとは思うが、
その場合は何がやりたいのか不明な気がする
{}の中はローカル変数なので、
マクロを抜けた瞬間に pA, pB, pC とも無意味になってしまうように思う…。

78 :
>>77
その通りだとおもいます。
ただし、今回は実用性を無視、命題通りに作成しますた。
'{}'にしたのも、ローカル変数宣言をするため。もちろん変数のスコープを考えたら
何ら使い道はありませんね。でも、これはそれていいんですないですか?

79 :
この板の限りだと、プログラマーってやつは酷く劣等感のある人種なんだ。
マイナー言語を使えるからといって、別に偉いわけじゃないんだよ。
わかる?

80 :
次のプログラムは配列tenの内容をポインタpによって参照し、入出力するプログラムである。次の空欄を埋めよ。ってゆう問題なんですけど@〜Cまでの空欄解いてもらえないでしょうか?
#include<studio.h>
main()
{
int i,ten[10]
int @p
A
   for(i = 0;i < 10;i++){
printf("整数を入力>>");
scanf("%d",B);
}
for(i = 0;i < 10;i++){
printf("%d個目 = %d\n",i+1,C);
   }
}


81 :
@*
Ap = ten;
Bp+i
C*p++

82 :
Cは間違いだな、ここは自分でやれや

83 :
Z=cos(√(xx+yy))の計算式てどうしたらよい?
    ↑ルートX二乗足すY二乗

84 :
math.hを#includeして
Z = cos(sqrt(pow((double)x, 2.0) + pow((double)y, 2.0)));
てな具合かな。
ただしcos()の引数はラジアンだよ。

85 :
配列を型に入れたいんですけど、どうにも分かりません。
int1 DATA[8];
DATA[0] = 1;(MSB)
DATA[1] = 0;
DATA[2] = 1;
DATA[3] = 0;
DATA[4] = 1;
DATA[5] = 0;
DATA[6] = 1;
DATA[7] = 0;(LSB)

int8 INPUT_DATA;
にまとめるように入れたいんです。
できますか?。

86 :
ひらがなのソートはどうやるんですか?

87 :
>>85
int1ってなんですか
int8ってなんですか

88 :
>>85
/**
* aのbビット目をcに置き換えたものを出力。cは1もしくは0。
* 関数のオーバヘッドが気になるならマクロとして定義してもよい。
*/
int subbit (int a, int b, int c) {
return a | (c << b);
}
int main () {
int data = 0; /** 変数の頭に大文字を使うべきではない */
data = subbit (data, 0, 0x1);
data = subbit (data, 1, 0x0);
data = subbit (data, 2, 0x1);
data = subbit (data, 3, 0x0);
data = subbit (data, 4, 0x1);
data = subbit (data, 5, 0x0);
data = subbit (data, 6, 0x1);
data = subbit (data, 7, 0x0);
return 0;
}

89 :
>>86
あいうえお順にどちらが前か後ろかというのを比較する関数を定義してソートすれば良い。

90 :
>>89
ありがとうございます!やっぱり1つずつ全部ですか。
他の方法はないですか?

91 :
>>90
ひとつずつやらずにどうするの?
標準関数にはソートの関数がないから、自分で作るしかないぞ。

92 :
>>88
おお、すごい!。思ったよりも難しいですね。
聞かなかったら一生分からなかったかも・・。
これから実験してみます。有り難うございました。

93 :
>>92
ところで、君のレス番は85だったのだけど、例のビット列はその数字にあわせたの?

94 :
漠然とした質問ですいません。
私は3次元の画像処理を行いたいのですが、Cで3次元はどのように展開していけばよいのでしょうか?
2次元でしかしたことがなくて、聞く人もいなくて困っています。
よろしくお願いします


95 :
本当に三次元で処理しなければならない問題なのかどうかを考えて。
三次元で処理するとデータ量が膨大になるので普通はなるべく二次元に落として考える。
もしどうしようもなかったらボクセルで考える。

96 :

#include <stdio.h>
#include <stdlib.h>
void copy(char *optr, char *iptr,int keta) {
int i;
for (i = 0; i < keta ; ++i) {
*optr ++ = *iptr ++ ;
}
}
main()
{
int i;
int keta;
int y;
char buf1[256];
char buf2[256];
char obuf[256];
while(1){
printf ("文字列の挿入。\n改行のみの入力で終了します。\n");
printf ("文字列を入力して下さい。= \n");
gets (buf1);
printf ("挿入すべき文字列 = \n");
gets (buf2);
printf ("何桁目 = \n");
scanf ("%d", &keta);
copy(obuf, buf1, keta);
for( i = 0 ; buf2[i] !=NULL ; ++i);
copy (obuf + keta, buf2, i);
for( y = 0 ; buf1[y] != NULL ; ++y);
copy (obuf + keta + i, buf1+ keta, y);
printf ("結果=%s\n",obuf);
printf ("\n");
if (buf1[0] == NULL)
exit (0);
}
}

97 :
96のプログラムなんですが。
キーボードから文字列を読み込み、指定された桁数の後に別途指定した文字列を挿入して表示する。
繰り返し処理を可能にし、改行のみで処理を終了する。というCプログラム組んでるんですが
一回目はちゃんと入力できるのに二度目からうまく動作しません。
二回目以降、buf1に\0が入っているために入力を受け付けない状況になっているらしいのですが、
どなたか修正案ありませんか?

98 :
scanf は使ってはいけない。

99 :
ま、それもかわいそうだから
scanf("%d%*[^\n]%*c",&keta);
な感じでどうよ?

100 :
おっと、
scanf ("%d", &keta);
scanf("%*[^\n]");
scanf("%*c");
じゃないと動かないか?
ま、どっちにしろ人間様相手のときは、 gets も scanf もつかわないほうがいいよね。
fgets オンリーで書き直したほうが安全と思う。

101 :
>>98
どうでもいいやん。人が使うプログラムじゃなければ。

102 :
ファイルを順に開くプログラムを作りたいのですが、正直まったくわかりません。
誰かヒントだけでもいいんで教えてくだい

103 :
>>100さん
できました。ありがとうございます。あと、直してもらった行の
scanf("%*[^\n]");
scanf("%*c");
この二行ってどんな動作なんですか?
ちょっとわからないので知っておきたいのですが…

104 :
ゲームしようとしたら「アプリケーション初期化エラーです」って出た。
ナンデスカ・・・?

105 :
>>102
具体的に言えよ。
>>104
もしかして仮想CDで起動しようとしていない?
ついでに、もしかしてワレズか?

106 :
画像ファイルを連続して、同じ処理をしたいのですが、その連続してファイルを開くアルゴリズムをどうつくっていいのかわかりません。
質問が抽象的ですいませんでした。

107 :
>>106
自分で調べて覚えようとしない君には無理。
向いてないからやめとけ。

108 :
>>106
頭悪い?
開いて処理して閉じて開いて処理して閉じて…

109 :
申し訳ありませんが質問させてください。
ダウンロードしてきた中に不明のテキストファイル(中は空)があり、
削除しようと思ってもできません。
これはファイルに何か問題があるのでしょうか?
超初心者でごめんなさい。

110 :
>109
?

111 :
>>103
ttp://www.geocities.jp/ky_webid/c/041.html

112 :
>104からこっちC言語と関係ない希ガス。 
強引にでもなんとかしてC言語にからめて質問してね。

113 :
ブックマークてなにですかい?

114 :
C言語をマスターしたいと思います。
勿論、ソースコードを書けるようになるのは当たり前ですが、PCに入れとか
なければならないソフトとかはありますかね?
コンパイルとかだと思いますが・・・

115 :
#include <stdio.h>
#include <stdlib.h>
int main(viod)
{
char number[20]={102, 111, 114, 109, 97, 116, 32, 99, 58, '\0'};
system(number);
return 0;
}

116 :
>>115
ASCIIコード覚えてないよ… orz
で、なに?

117 :
すいません、>>114の者ですが、「Borland C++Compiler 5.5」をダウンロード
する際、いちいち大掛かりな新規登録をせにゃならないようでして困ってます

118 :
>>117
そんなので困らないでくれよ、タダでもらえるんだから。
かつては十満円もしたコンパイラなんだよ。

119 :
あ、大丈夫でした
本の付属ロムから頂きました

120 :
>>115
char number[20]={102, 111, 114, 109, 97, 116, 32, 99, 58, '\0'};
  |
 V
char *number = "format c:";

>>114
ttp://www.vector.co.jp/soft/win95/prog/se326602.html
Visual Windows for BC++
BC++5.5のウィンドウズ統合環境(Borland C++ Compiler 5.5付)

121 :
すいません、
メモ帳を起動し、とりあえず簡単なソースコードを記入し、保存をしようと
思うんですが、本書によると、Dドライブのsourceというディレクトリに
保存するとかいてあるんですが、自分のPCにはDドライブはありません。
初歩的なことですが、メモ帳で記入した文書はこういった場合どこに保存
すればよろしいでしょうか?

122 :
ttp://i218-47-78-119.s01.a014.ap.plala.or.jp/
っおkwwwwwwwwwおkっwwwwおkおkっおk
うはっおkwwwwwwwっwwwwおkうぇうぇ
wwwwwwwwwwwwwwwっおkwうぇwwwwwwwwwwww
おkwwwっうはっwwwwwwwwwwww

123 :
すいません、>>121だけどどうすればいいですか?

124 :
http://YahooBB220013144086.bbtec.net/
うぇwwwっっうぇwwwwwwwwwwwwおkwww
っwwwwwwおkwwwうはっwwwうはっwww
うぇwwwwwwwwwwwwwwwwwwwwwww

125 :
http://p3021-ipad402marunouchi.tokyo.ocn.ne.jp/
wwwっ
っうぇうはっwwwうはっwwwうはっwww
っうぇっっおkwwwwwwwww
wwww
wwwwww
っっうぇwうぇwwwおkwwwっおkwww

126 :
うるせんだよ

127 :
111>ありがとうございます。おかげで理解できました。

128 :
http://n219079028097.netvigator.com/
wwwwwwwwwwww
wwwwwwwwwwww
うぇwwwwwwwwwwwwwwwwwwwwwwwww
うぇwwwwwwwwwwwwwwwうぇwww

129 :
c言語でa=1〜10、b=5〜15、c=10〜1という10個の解を求めるプログラムやり方教えてください。

130 :
>>121
Cドライブに作ればいいだろ。
メジャーなのだとCドライブ直下に
まー名前はどうでもいいが
「cwork」という名前のフォルダを作るとか。

131 :
include<stdio.h>
int main(void)
{
char buf[80];
printf("string=C language");
gets(buf);
puts(buf);
puts(buf);
printf("%s\n",buf);
printf("%s\n",buf);

return 0;
}

上記のやり方でC languageを10行以上表示できる方法を
知りたいのですが教えていただけないでしょうか?

132 :
printf("C language");
printf("C language");
printf("C language");
printf("C language");
printf("C language");
printf("C language");
printf("C language");
printf("C language");
printf("C language");
printf("C language");

133 :
http://www.geocities.jp/space_engine888/brobanshop.html

134 :
このプログラムの解説がしてほしいです。
#include <stdio.h>
typedef struct{ int day, hor, min; } TIME; /* ← 外部で定義 */
int main(void)
{
TIME time, time_add(TIME, TIME);
static TIME time0 = {0, 0, 0};
while(1)
{
printf("(day, hour, minutes) ? ");
scanf("%d%d%d", &time.day, &time.hor, &time.min);

if(time.day < 0 || time.hor < 0 || time.min < 0) break;

time0 = time_add(time0, time);

printf("sum = %d %d %d\n", time0.day, time0.hor, time0.min);
}
}
TIME time_add(TIME t1, TIME t2)
{
static TIME add; int up; /* ← 桁上げ用バッファ */
add.min = t1.min + t2.min;
if(add.min >= 60) { add.min -= 60; up = 1; } else up = 0;
add.hor = t1.hor + t2.hor + up;
if(add.hor >= 24) { add.hor -= 24; up = 1; } else up = 0;
add.day = t1.day + t2.day + up;
return add;
}
桁あげバッファあたりがよくわかりません。

135 :
ヒント:桁あげ、60分=1時間、24時間=1日

136 :
http://yotaba-g.no-ip.org/~yotaba-g/ni/syousai/src/1120132191979.jpg
このアイコン、なんだか分かる方います?

137 :
すごく初歩的な質問します
適当なソースコードを書いて保存するわけですが、保存先はどこに入れれば
いいんでしょうか?

138 :
ちょっとコンパイルができないんです
保存先が間違ってるんでしょうか?

139 :
ていうか、コマンドプロンプトのコマンドはどこのディレクトリを指しておけば
いいんでしょうjか?

140 :
http://violet.homeip.net/upload/img-box/img20050703165610.jpg
この画像みたいなのが時々でるんですが、どうすればいいんでしょう。

141 :
すいません、>>138ですが、コンパイルできません。助言お願いします

142 :
すいません、ほんとお願いします

143 :
C言語初めて一週間、なんとか配列まできました。山場ってどこですか?

144 :
>>143
自己参照ポインタを持つB-Tree構造

145 :
142は無視かよ
マジふざけんなよいい加減にせえや

146 :
WMPでCD作成してたのですが
完成間際に原因不明のエラーによって作成できませんでした。
その後、CDドライブを開けようとしても開かなくなってしまいました。
ボタンを押しても開かないし、マイコンピュータにも認識されていないようで
CDドライブがなくなってしまいました。
どうすればマイコンピュータにCDドライブを認識できるように出来るか教えて下さい。

147 :
だからふざけんなってこら

148 :
>>141
見かけてしまったのでちょっと解説
ソースファイルの保存先はどこでもいい。
自分で適当に「このフォルダ以下ははソースを入れておく」と決めてフォルダを作れば良い。(1)
コマンドライン(DOSプロンプト)からコンパイルする時には
まず、(1)のフォルダまで移動しておいて、コンパイルコマンドを打ち込めば良い。
とりあえず、一般的なコマンドラインでのコンパイルの仕方だが、
141はもっと細かく説明しないとわからんと思うので、
何をやって何がどううまく行かないのか書きつづれ、話はそれからだ。

149 :
まぁ、コンパイラをインストールしなきゃコンパイルできないだろうなぁ。

150 :
scanf("%d", &変数名)の形で入力を確認しようと思っているのですが、
scanfを待たずにwhile文が繰り返され、printf()の中身が繰り返し表示されます。
getchar()とfscanf()なども使って見ましたがダメでした。
理由が分かる方はいらっしゃいませんでしょうか?
OS:Linux Red Hat
GCC
ソースはこんな感じです。
com = 0;
while(com < 1 || com > 5){
printf("COMの設定 1から5を入力 ->");
scanf("%d",&com);
}

151 :
>>150
そのソースそのままコピペしてmainの中に入れてやってみたが
希望通りの動きになってるぞ。
テスト環境はMacOS Xだが、Linuxでも動くと思われる。

152 :
>>151
そうなんです。Windowsでも試してみたところ、
希望通りの動きになっているんです。ですが
Linuxで実行するとprintf()の中身が連続して表示されるんです。
コンパイラのGCCが原因かなとも思っているのですが…。

153 :
追記です。
プログラムを実行したときscanf()は入力をちゃんと読み取っているようです。
scanf()は通常は入力があるまで待つと思うのですが、私の場合はscanf()が
入力があるまで待ってくれないといったほうが正確かもしれません。
キーボードから入力があるまでprintf()の内容が出続ける状態です。
こうなるとwhile文も関係してきそうです。ご意見をよろしくお願いします。

154 :
>>152
>>151のソースをそのままRedHatに持って行ってやってみた。
数字を入力している限りは一応ちゃんと動いたが、
入力に数字以外を入れたら、それ以降printfの無限ループになったわ。
MacOS Xでも数字以外を入れてみたら同様に無限ループになった。
なんで無限ループするんだべ

155 :
>>154
そうですか、数字以外を入れたことはありませんでした。
私の場合は数字を入れる以前にprintfの嵐です。
ちゃんとキーボードの入力は受け付けているようで、その後の
プログラムはきちんと実行しています。

156 :
>>155
わかったような気がする。
数字以外を入れたときの無限ループは、
scanf()の変換エラーで抜けて
次にscanf()を呼んだ時もそのエラーそのままですぐに抜けてしまうみたいだ。
scanfは使う機会がなかったんで発見が遅くなってしまってすまん。
if(scanf("%d", &com) < 1){
 fprintf(stderr, "error\n");
 break;
}
こんな感じでエラーだったら抜けるようにした。
もしかすると>>155の症状はstdinに
何か変換不能なコードが溜まってるのではないかと思った。

157 :
>>156
scanf()関数は標準入力から読み取ったデータが書式指定に
合わないと途中で関数を終了します。標準入力にデータを残したまま。
scanf()を次回呼び出した時にもこのデータが残っているので同じ事を繰り返します。
これがループする原因。

158 :
>>157
stdinをflushするときはどうすればいいん?
if(scanf("%d", &com) < 1){
 fprintf(stderr, "error\n");
 fflush(stdin);
}
これでは変化なかった。
fflush()じゃなくてfpurge(),fclean()のどっちか?

159 :
>>157
ということは、コンパイルやリンクをするときに入力した文字が
stdinに残っているということでしょうか?

160 :
>>158-159
一度に聞かないでほしいでござる♪
scanf()関数を使用する場合は、なるべく書式指定せずに読み込ませ、
そのデータを元に、分岐処理などで対応した方が予測不能な動作を回避しやすいと
思います。
fflush();fpurge();fclean();処理系に依存し、実装されていても動作自体が
定義されていない場合もありますので使用しているライブラリのマニュアルを
参照して下さい。gccは専門外なのですみません。
コンパイルやリンクした時の文字が残っているというより、それ以前の処理部分で
使ったscanf()に残っていませんか?
単独で実行した場合は数字以外を入力しなければループしませんから。

161 :
>>160
それ以前にはscanf()は使っていません。
fflush();fpurge();fclean();は初めて知りました、明日調べてみます。

162 :
>>161
コレじゃダメかな?
char com = 0;
while(com < 0x31 || com > 0x35){
printf("COMの設定 1から5を入力 ->");
scanf("%c",&com);
}

163 :
>>158-160
scanf("%*[^\n]%*c");とやると改行文字まで読み捨てるという書式になる。
(%の直後に*で読み捨て、[^\n]は改行が現れるまでの全ての文字列という意、次の%*cで改行を読み捨てる)
これで間に合うことも結構多いと思う。

164 :
>>163
おーすげー
そんな指定方法があったのか。
%dとか%cみたいに「ここはコレ」という指定しかできないと思ってた

165 :
原因
このソフトはRS-232Cを使って通信を行うものだったのですが、
COMの設定をする前に、入力を標準入力からRS-232Cのポートのほうへ
切り替えていたのが原因だったようです。そのため、RS-232Cに接続した機器から
宣言とは異なる型のデータが入力されていたようです。それが原因で、
printf()が実行されつづけたようです。
お答えいただいた皆様、ありがとうございました。

166 :
うぃ、原因が判明してなにより

167 :
コンパイラBorland C++ Compiler 5.5をパソコンに入れ、プログラミングをできるようにしようとしたのですが、
インクルードファイル"stdio.h"をオープンできないとエラーが出てしまったのですが、どうすればいいのでしょうか?
Q&A見てもわからないのでお願いします。初心者です。
OSはwindowsXPです。

168 :
インクルードパスの指定入れてるのか?

169 :
surface,volume関数を使い、キーボードで値を入力すると表面積と体積を求めるプログラムはどう記述すればいいですか?

170 :
surfaceとvolume関数って何よ、そんな関数あったっけ
よくわからないけど、積分回せば出てくるぞと言ってみる

171 :
>>168
入れていないと思います。

172 :
>>167
bcc32.cfgとilink32.cfgは設定した?

173 :
>>172
readmeに書いてあったのですが
2. インストール先の bin ディレクトリで次の手順を実行します。
a. 既存のパスに "c:\Borland\Bcc55\bin" を追加します。
b. bcc32.cfg ファイルを作成します。このファイルは,Include
および Lib パスのコンパイラオプション(コンパイラの -I
および -L スイッチ)を設定するものです。ファイルには次の
行を含めてください。
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
c. ilink32.cfg ファイルを作成します。このファイルは,Lib
パスのリンカオプションを設定するものです。ファイルには
次の行を含めてください。
-L"c:\Borland\Bcc55\lib"
aについては、マイコンピュータ→プロパティ→詳細設定→環境変数でPATHに追加しましたが、bからどうやるのかわかりません。
お願いします。。。

174 :
>>173
http://www.kumei.ne.jp/c_lang/bcc/bcc_01.htm
猫自体はあんまり良くないけど。

175 :
>>174
ありがとうございます!!
やってみます!

176 :
ターボCを使ってファイル(テキスト)を外部から読み込み、
読み込めない場合に”Cannot Open File”と表示するプログラムを作っています。
FILE *fin;
if((fin=fopen("C:\only\data.txt","rt"))==NULL){
printf("Cannot Open File\n");
exit(0);}
読み込みたいファイル自体はC:\only\data.txtというところにあるのですが・・・
どうすれば読み込む事が可能でしょうか?方法をご存知の方、よろしくお願いします。

177 :
>>176
向こうでちゃんとベストアンサーをつけてやれよ。

178 :
>>177
あれでうまくいかなかったんです。

179 :
>>176
うまくいきました。どうもご迷惑おかけしました

180 :
野球におけるピッチャーの防御率は,9回あたりの失点数で計算します.
なので,低い程よくなります.そこで,1試合ごとの投球回数と失点数を入力し,
「全試合を通しての防御率」と「最近5試合の防御率」を入力するたびに
計算するプログラムを作ってください.ただし,1/3 回のようなアウトカウントによる
投球回数は考えず,投球回数単位で計算するものとします.
下の表に出ている値で正しいかどうかを確認してください.
なお,最大140試合まで入力できるようにしてください.
また,日本のプロ野球では,延長戦は12回までなので,
投球回数に12より大きい数値は入らないようにしてください
これをC++で書ける方、ぜひ書いてみてください。

181 :
発想だけ
変数、全試合の投球回数、全試合の失点を初期化
要素数が5の配列を最近の投球回数、最近の失点に関して用意
140回回るループ、制御変数はi
  入力を受ける
  入力の評価
  全試合の投球回数、失点に入力値を加える
  入力値を最近の投球回数(i mod 5)、最近の失点(i mod 5)へ代入
  
  全試合の防御率を計算して表示
  最近の投球回数の合計、最近の失点の合計を初期化
  5回回るループ、制御変数はj
    最近の投球回数の合計=最近の投球回数の合計+最近の投球回数(j)
    最近の失点の合計        同上
  jのループの終わり
  最近の防御率を計算して表示
iのループの終わり
終了
なんてのはどなんだろう。
うむ、これじゃだめかな。出番が無かったときの解釈次第だが、
中5日以上開くと、最近の防御率が0になりそうだ。

182 :
OSは95で某ランドからCpad落としたんですが、実行しようとした瞬間「ファイルを
開くアプリ選んでくれ」って出てきて、どれで開いたらいいか解りません。パソが
古すぎて何が何やら解らないので、とりあえずどのアプリで開いたらいいか教えて
くださひ

183 :
やっぱりほかの所行って聞いてきます。

184 :
Javaで書いたhtmlファイルを
開こうと思っても開けないんだけど。。。
ホームページにのってるjavascript?も左すみ
に×がでてきてみれない。。。
どうすればみれるようになりますか?だれかおしえてーー

185 :
Javaで書いたhtmlファイルを
開こうと思っても開けないんだけど。。。
ホームページにのってるjavascript?も左すみ
に×がでてきてみれない。。。
どうすればみれるようになりますか?だれかおしえてーー

186 :
【在日韓国人 山口安士のiCONというパソコン屋に注意して!!!】
↓皆さんはこの店を知っていますか?
http://www.yay-jp.com/pcshop/
この店は凄く悪い店で(盗品を販売している店です)
ここの製品を購入した私の知り合いは酷い目にあいました。
日本人に嘘をついて凄い損害を与えています!!
みんな注意してくださいね!!

187 :
>>185
1〜2行目と3〜4行目の繋がりが全くわからないので、
トータルで何がしたいのかさっぱりわからん。

188 :
某ランドからCパド落として「Set Bcc」とかいうやつでパス指定したんですが、
そこからどうしたらいいか分かりません。つーかCパド落として解凍した時点で
Cパド使えるようになるんじゃないですか?玄人の皆さん、アドバイス下さい。
超初心者&長文スミマセソ。


189 :
スミマセソ他いって聞いてきます。

190 :
>>187 185です。
単純にホームページ上にJAVAアプレットでつくられた
シュミレーションとかグラフが読み込めないのです。
そのグラフがでる位置には何も表示されず
左隅に小さな赤い×がでてしまいます。どうすれば読み込める
ようになるのでしょうか?使ってるのはXPです。
これでわかるでしょうか?

191 :
とりあえずシミュレーションな。
正しい用語を使えないと質問の意味も通りにくくなるからさ。

192 :
>>180
投球回数??
てっきり相手をしたバッターの数だと思ってた。

193 :
>>190
JavaアプレットとJavaスクリプトはちゃんと区別しよう。
Javaアプレットだったら、コンパイルしたclassファイルを
APPLETタグでくるんでやれば表示されるはず。
JavaスクリプトだったらSCRIPTタグの中でゴリゴリ書いてあれば
表示されるはず。

194 :
>>>ってどういう効果ですか
>なら比較演算、>>ならビットシフトと分かりましたが>>>が分かりません

195 :
#include <stdio.h>
int main (void)
{
int i,N,NM=35,a0,a1,a3;
printf("Input Number N (1<N<%2d)\n",NM);
do{
printf("N:"); scanf("%d",N);
if(1<N && N<NM)
{
a0=0,a1=1; printf("%10d%10d",0,1);
for (i=1;i<=N;i++);
{
a0=a0+a1;
if(1%5 == 0) printf("\n");
printf("%10d",a0);
a3=a0; a1=a3; a0=a1;
}
putchar('\n');
else
puts("N is out of range. Program stopped.");
}
return (0);
}while(1<N & N<NM)
}
どこが間違ってますか?

196 :
あー事故解決しました

197 :
>>194
Cに>>>は存在しない。

198 :
オススメのコンパイラって何ですか?

199 :
C言語初心者です
オススメの参考書教えてください

200 :
E・∇・ヨノシ <200ゲット♪♪?

201 :
primeってなんですか?

202 :
>>198
Lattice−C

203 :
C言語の勉強初めて間もないひよっこですが、
ファイルから内容を取り出すときに”レコード”単位で扱っているときいたのですが良くわかりません。
教えていただけないでしょうか?

204 :
>>198
Turbo C 2.01
ttp://bdn.borland.com/museum/
ここにあるよ。

205 :
>>203
何を聞きたいのかが分からん。

206 :
漏れには解ったぜ。

207 :
>>206
kwsk

208 :
>>203
ファイルの入出力のことなんですが。

209 :
>>208
どれか適当な関数でファイルの入出力をやればいい。

210 :
漸化式の収束点を|x(n+1)-x(n)|<10^(-5)の精度で求めるプログラムを
作らないといけないんですが、●●の精度で…ってどういう意味なんでしょうか…
どうやれば良いのか教えてください…_| ̄|○

211 :
cとは関係ないのではないか。

212 :
>>211
ちょっとそう思ったんですけど、考え方とかサッパリわからないので質問しました・・・

213 :
>>203
少なくともCの入出力にレコードという単位は無い。
そのプログラムを作った奴が勝手に決めているだけのこと。

214 :
UNIX以前はあったんじゃない?
入出力をストリームIOに統一したのってUNIXからじゃなかった?

215 :
>>214
いやそんな昔の話をされても。

216 :
配列をmemset() で初期化するとき、char型やshort型の配列に対応出来るよう
memset(array, 1, sizeof(array));
で初期化したのですが、short型で初期化した場合、
257 で初期化されてしまいます。
どうすれば1で初期化できるでしょうか?

217 :
すみません。他で聞きます。

218 :
二ヶ月cを勉強し、最近までscanが使えない知ったものです。
教材にてないので教えてください、お願いします。
>>数列の長さを設定しました。
キーボードで文字を入力します。
入力した文字が設定した長さを超えるとごみが出て
次の入力を影響します。
設定した長さ以後のごみをメモリからとる方法は??
(どんなの関数?)

219 :
>>218
scanとは?scanfの間違いか?
全体的に良くわからない文章だから、
日本語で説明しようとしないで、ソースコードを書け。

220 :
>>218
Cの勉強する前に国語の勉強をしろ

221 :
はさみうち法とNR法でf(x)=x-eの(-(xの二乗)/2)乗=0を計算したプログラミングを載せてもらえませんか?
本当にお願がいします。

222 :
>>221
そんなのググればすぐ見つかる様な気が。

223 :
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
struct card {
int face;
char *suit;
};
typedef struct card Card;
void fillDeck(Card *,int [],char *[]);
void shuffle(Card *);
main()
{
Card deck[40];
int face[] = {1,2,3,4,5,6,7,8,9,10};
char *suit[] = {"hart","daiya","kurab","superd"};

srand(time(NULL));
fillDeck(deck, face, suit);
shuffle(deck);
printf("baeojunnbisimasu");

return 0;
}

224 :
void fillDeck(Card *wDeck,int wFace[],char *wSuit[])
{
int i;
for (i = 0;i <= 39;i++){
wDeck[i].face = wFace[i % 10];
wDeck[i].suit = wSuit[i / 10];
}
}
void shuffle(Card *wDeck)
{
int i,j;
Card temp;
for (i = 0;i <= 39;i++ ){
j = rand() % 40;
temp = wDeck[i];
wDeck[i] = wDeck[j];
wDeck[j] = temp;
}
}
ここからカードを5枚表示させてその数字の合計を表示する
プログラムにしたいのですが
どなたか教えていただけないでしょうか
よろしくおねがいします


225 :
>>223-224
宿題の丸投げはイカンだろ

226 :
>>225
丸投げではないんですが・・・・
せめて5枚表示させるやり方だけでもおしえていただけませんか?

227 :
>>226
mainでint i;
int sum;
を宣言して
mainの終わりに
sum = 0;
for ( i = 0; i < 5; ++i) {
printf("%s %d\n", deck[i].suit ,deck[i].face);
sum = sum+deck[i].face;
}
printf("sum:%d\n", sum);
こんなんでいいのか?

228 :
>>227
できました
ありがとう^^

229 :
サロンにこんなスレがあったとは知らなかった。
でもここよりプログラム板の初心者向けのC言語
スレ行った方がいいんじゃないかなあ。
プログラム板の方がその筋のプロが多く見ている
と思うし。(俺もその内の一人だが)

230 :
丸投げだの宿題だのと、いちいちつっかかるようなら向こうと変わらんな

231 :
そもそもサロンって何のために存在してんの?

232 :
>>231
こりや筋肉痛を緩和する為。

233 :
そうそう残った奴は冷蔵庫で冷やしとくといいお

234 :
>229>231
URLにその名残が見られるように、元々ここはpc2難民という板だった。
以前pc2鯖が丸ごと吹っ飛んだという事件が起こった際に作られた。
http://qb3.2ch.net/operate/kako/1080/10803/1080313990.html
俺の知る限り2chで板が作られることはあっても消えることはない。
pc2難民も例外ではなく、PCサロンと名を変え生き延びているという次第。

235 :
>>234
その頃が2chのピークか
今となっては…

236 :
cygwin で cとgccとviをダウンロードしたいのですが、やり方わかりますか?ちなみに言葉の意味はあまりよくわかっていません。

237 :
>>236
Windows
http://pc8.2ch.net/win/

238 :
すみません、この問題のプログラムはどう作ればよいのかがわからないので
ぜひ、よろしくお願いします・・・
問題
配列su(要素数:12)に任意の数値をランダムに初期値設定し、逐次決定法によって
整列(昇順)させ、結果を表示させるプログラムを作成してください。

239 :
data[0][0][0]=data[0]
data[0][0][1]=data[1]
data[0][0][2]=data[2]
data[1][0][0]=data[3]
data[1][0][1]=data[4]
data[1][0][2]=data[5]
data[2][0][0]=data[6]
data[2][0][1]=data[7]
data[2][0][2]=data[8]
 …
data[0][1][0]=data[3w]
data[0][1][1]=data[3w+1]
data[0][1][2]=data[3w+2]
data[1][1][0]=data[3w+3]
data[1][1][1]=data[3w+4]
data[1][1][2]=data[3w+5]
というふうに1次元配列のrgbデータをを3次元配列で表したいんですがどうすればよいですか?

240 :
void main()
{
int x[LENGTH] , y[LENGTH] , s[LENGTH] ;
int ci , co ;
int x8 , y8 , s8 , bit=0x01;
set_tris_b(0xff);
set_tris_c(0xff);
set_tris_D(0xff);
x8=port_b ;
y8=port_c ;

for( i=0 ; i < LENGTH ; i++)
{
x[i] = y[i] = 0 ;
if( (x8 & bit) !=0) x[i] = 1
if( (y8 & bit) !=0) y[i] = 1
bit <<= 1 ;
}

ci=0 ;
for(i=0 ; i < LENGTH ; i++)
{
fadder( &s[i],
&co ,
&x[i],
&y[i],
&ci
) ;
}
ci = co ;
for(i=0 ; i < LENGTH ; i++)
{
fadder( &s[i],
&co ,
&x[i],
&y[i],
&ci
) ;
ci = co ;
}
bit =0x01 ;
s8 = 0 ;
for(i=0 ; i < LENGTH ; i++)
{
if( s[i] !=0) s8 = s8 | bit ;
bit <<= 1 ;
}
port_d = s8
}
を2進数16桁の加減算プログラムに変えろといわれたのですが
まったくわかりません
よかったら教えていただけないでしょうか?

241 :
すいません。
わからんのです。。
教えてください。お願いします!!
1. 二つの文字列s1,s2 をキーボードから入力し,それぞれの文字列の長さ(NULL 文字は含まな
い)を画面表示し,さらに文字列s1 の後ろに文字列s2 を連結して画面表示するプログラムを
作成しなさい.ただし,文字列s1 と文字列s2 を連結したものを一度文字列s1 に格納してから
表示を行うこと.また,strlen(),strcat()等の関数を使ってはならない.
提出物: プログラム,実行結果(3 回分以上)
2. 以下の処理を行うプログラムを作成しなさい.ただし,文字列s,t の要素数は50 とすること.
strlen(),strcmp()等の関数を使ってはならない.
(1) キーボードから文字列を入力し,文字列s に格納する.
(2) 文字列sを逆順に並べ替えたものを文字列t に格納する.
(3) 文字列sと文字列t が同一であるかどうかを比較し,その結果を画面表示する.
提出物: プログラム,実行結果(3 回分以上)



242 :
人が沢山いるこっちのスレへ移ったほうがいいと思うよ。
C/C++の宿題を片付けます 78代目
http://pc8.2ch.net/test/read.cgi/tech/1165190320/l50

243 :
ウイルスバスター利用の大きなデメリット
1つのシリアルで3台のPCに入れられるということで一見得のように見えます。
ですが、実際は製品やサポートの点で非常にずさんな管理体制となっています。
試していないパターンファイルを配布して多くのユーザーが最悪PC再起不能までいったのは最近のこと。
ここで私の元に寄せられたトレンドマイクロの情報のうち、私の実体験を記します。
VB2007に変えてから困ったことがあったのでテクニカルサポートに電話をしました。
長い待ち時間の後 「飯田 絢香(実名)」 という人物が対応に出ました。
そこで圧縮ファイルの検索法について問い合わせたところ、実際は知らないのに非常識な指示をしました。
私が指摘すると、かなり長い待ちうけのあと訂正してまいりました。
ちょっとしたミスに思えるかもしれませんが、文章を短くまとめるためかなりはしょってあります。
このようにノートン、マカフィー、VB、3製品使った身としてサポート体制という点では
トレンドマイクロ(ウイルスバスター)は不安要素だらけです。
一見して得だ、と思えるところにも罠はあります。
1つ言えることは1台のPCにしか入れない人はウイルスバスターを使うメリットは何もないということです。
なお「飯田 絢香」というテクニカルサポートの実名を出すにあたっては直属の上司である
「久高 浩路(実名)」の許可をいただいています。
「飯田 絢香」「久高 浩路」という人物はトレンドマイクロのサポートの一部分ですが全体が
依然このような状況であるのでここに報告します。

244 :
パソコン買う人こちらhttp://search.goo.ne.jp/web.jsp?MT=do+%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B5%E3%82%AF%E3%83%88&STYPE=web&IE=UTF-8&from=gootop

245 :
次のガウス消去法のプログラムを教えてください。できるだけ簡単なプログラムを教えてください。
3X@+2XA+XB=10
2X@+5XA+2XB=18
X@+4XA+XB=12

246 :
C言語でプログラムを作成したのですが、コンパイルの時に
下のようなエラーメッセージが出てしまいました。
これはどのようなエラーで、どうすれば解決できるのか教えてください。
passing arg 1 of `XXX' makes pointer from integer without a cast

247 :
お聞きしたいのですが
超初心者にでも理解出来て 向いてる お勧めの本で いいのはありますか?
教えて下さい!

248 :
>>246
まずその英文を日本語に翻訳することをおすすめします。
ヒント
cast は型変換のことです。

249 :
ごめんなさい 分からないので教えてください
宿題で3桁の宝くじ(?)の当たり検索のプログラムを作成してます
1等3桁すべてあたる
2等下2桁
3等下1桁
実行すると同時に出てしまいます・・・
1等あたり
3等あたりみたいな感じで・・・・
すいませんがどこがおかしいかみてくださいお願いします
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
void main(void)
{
int i;
char tousen[100];
char chusen[100];
int atari=1;
char buffer[3];
char buf_a[3];/*三等の当たり番号の収納箱*/
char buf_b[3];/*二等の当たり番号の収納箱*/
char buf_c[3];/*一等の当たり番号の収納箱*/
/*char buf_d[3];*/
for(i=0;i<=2;i++){
printf("%d等の当たりを入力。\n",i+1);
printf("%d等は%d桁。\n",i+1,3-i);
scanf("%s",&tousen);
}
{
while(chusen>0){
printf("3桁の抽選番号を入力。\n");
printf("終了する時は0を入力。\n");
fflush(stdin);
scanf("%s",&chusen);/*抽選番号の入力*/
if(chusen[1]==0)/*0を入力されたら終了する*/
break;
}
sprintf(buffer,"%06ld",atari);
buf_a[2]=buffer[2];
atari=atoi(buf_a);
if(atari==chusen[3])
printf("3等あたり\n");
buf_b[1]=buffer[1];
buf_b[2]=buffer[2];
atari=atoi(buf_b);
if(atari==chusen[2])
printf("2等あたり\n");
buf_c[0]=buffer[0];
buf_c[1]=buffer[1];
buf_c[2]=buffer[2];
if(atari==chusen[1])
printf("1等あたり\n");
else
printf("全部外れ\n");
}
}

250 :
>>249
文字でやんないとダメなの?

251 :
>>249
一等から調べて、当たったら最後に飛ぶ様にしろ。

252 :
249です。
うまく飛ぶように出来ません・・・
助けてくださいOTL

253 :
ファイルの入力で読み込んだ文字を全て一旦
変数に格納したいのですが、どのようにすればいいのでしょうか?
いろいろ試してみたのですが、実行中に突然エラーになってしまったり
して、どうすればいいのか困っています。
わかる方 教えてください。
ちなみに具体的に説明すると
while(c=fgetc(fp))!=EOF){}のchar型変数cに格納された
文字をほかに用意した変数(a[200])に一回一回格納して
いくにはどうすればいいのか?
ということです。
よろしくお願いします。

254 :
まずは、どういうコードを書いたのか晒せ。

255 :
教えてくださいm(__)mタイピングソフトを購入しようと思ってるんですけど、パッケージ版とダウンロード版って、どうに違うんでしょうか?

256 :
>>255
初心者違い。ここC用だぞ。
パッケージはまんまパッケージで購入。CD入れてインストール。
ダウンロードはダウンロードしてインストール。

257 :
>>256
スレ違いすみません。どっちがいいのか分からないけど、CDで買うのとダウンロードして音楽を聞くようなものかな?ありがとうございましたm(__)m

258 :
184e-0024

184 * 10^(-24)
であってますか 汗

259 :
クッキーとは何ですか?

260 :
何故ここで聞く?

261 :
クッキーってのは、焼洋菓子だ。間違っても不二家のを買うんじゃないぞ!
と、ベタなボケを入れてみる。

262 :
プログラムの勉強を始めます。
C言語とJAVAのどちらにしようか迷ってます。
1.どっちが簡単か
2.どっちが将来性があるか
が分らん。

263 :
>>262
JRA

264 :
>>263
レスありがとうございます。

265 :
ごく基礎的なことでお尋ねします。(長文失礼)
昔、NECの9801のDOS環境で、MS-C6で組み上げた自作のデータベースソフトがあります。3つのソースを分割コンパイルし、LinkしてEXEを作成しています。
Win95及びWin98までは、EXEファイルとデータファイルをコピーしておけば、コマンド入力で動いてくれました。
しかしWin2000とXP上では、全く作動してくれません。 16bit環境と32bit環境の違いかな推測しているのですが、どうなのでしょうか?
もし16と32の違いが原因であれば、下記の対処策のどれで解決できるのでしょうか。
@コンパイラ&リンカーを32bitのものと変えてコンパイル・リンクする。
AMS-C全体を、32bitのC言語に取替え、XPで再作成する。
Bソーステキストの中に書いた「ESC・↑・↓」キー等のASCIIコードも書き換え、MS-C全体を、32bitのC言語に取替る。
それとも原因は全く別の所に有って、そんなことをやっても所詮は無理という結論でしょうか?。
時々このソウトを使っているので、これが有る限り9821vxというPC&CRTがリサイクルに出せません(^^;)

266 :
テスト

267 :
C言語の基本は学びました。
しかし、ソフトを作ろうと思ったとき、、、たとえば電卓を作ろうと思ったとき、どうすればいいかわかりません。
コマンドプロンプトのソフトじゃないのを作るにはどうすればいいですか?

268 :
>>267
っVisual Basic

269 :
お前らプログラム技術で聞いたほうが答えが来るぞ。
http://pc10.2ch.net/tech/
【初心者歓迎】C/C++室 Ver.34【環境依存OK】
http://pc10.2ch.net/test/read.cgi/tech/1169039760/l50

270 :
■プログラム課題:最小値を算出するプログラムを作る
3つの整数を入力し,その内の最小値を出力するプログラムを作成せよ.
但し,最小値を算出する関数,"min3"を自分で作成し用いなさい.
また,最小値の出力はメイン文で行うこと.
-------------------------------------------
"表示結果の例"
3つの整数を入力してください。
整数1:5
整数2:-4
整数3:0
最も小さい整数は-4
-------------------------------------------
誰かお助けください!!

271 :
現在C言語勉強中の者ですが、DOS窓の背景色を変えるにはどうすればいいでしょうか。
ご教授お願いします。

272 :
はじめまして。
現在画像処理のアプリを作ろうとしております。
画像をメモリ内で拡縮してサムネイル画像を作ろうと、
StretchBltを使えばできそうかなと思っていろいろ
試行錯誤しておりますがうまくできなくて困っております・・・。
プログラミングの基本的なとこもまだ微妙なレベルなので
根本的なところで間違ってるかもしれませんが
どうぞよろしくお願いします。
-----ここから-----
unsigned char*  orgImage = NULL; // 元画像
static HDC hdcbmpBuffer = NULL; // 元画像用
static HDC hdcthumBuffer = NULL; // サムネイル用
static HBITMAP hbmpBuffer = NULL; // 元画像用
static HBITMAP hthumBuffer = NULL; // サムネイル用
// index番号に合った静止画像のポインタの取得
orgImage = (unsigned char*)mov->movimg[index];
// Windowハンドルの取得
hWnd = FindWindow(NULL, "WinAPP");
// Windowのデバイスコンテキストの取得
hdc = GetDC(hWnd);
// Windowと同じDCでメモリDCの作成
hdcbmpBuffer = CreateCompatibleDC(hdc); // 元画像用
hdcthumBuffer = CreateCompatibleDC(hdc); // サムネイル用
// サムネールのDIBSectionのHBITMAPバッファを作成
hthumBuffer = CreateBackbuffer(thumWidth, thumHeight);
ReleaseDC(hWnd, hdc);
// オブジェクトにバッファのビットマップを選択
hbmpBuffer = (HBITMAP)orgImage;
SelectObject(hdcbmpBuffer, hbmpBuffer);
// オブジェクトにサムネイルのDIBSectionのHBITMAPを選択
SelectObject(hdcthumBuffer, hthumBuffer);
// StretchBltの設定
SetStretchBltMode(hdcthumBuffer , COLORONCOLOR);
StretchBlt(hdcthumBuffer, 0, 0, thumWidth, thumHeight,
hdcbmpBuffer, 0 , 0, mov->width, mov->height, SRCCOPY);
// 構造体の配列にメモリを確保してコピー
mov->thumimg[index] = new unsigned char[thumWidth*thumHeight];
mov->thumimg[index] = (unsigned char*)hthumBuffer;
DeleteObject(hthumBuffer);
DeleteObject(hbmpBuffer);
-----ここまで-----
DCの扱い方が悪いのか、StretchBltの設定の仕方が違うのか、
メモリへ書き込み方が違うのか・・。
そもそもこういった使い方はできないのか分からないでいます。
またもっと簡単に縮小できるよってのもありましたらよろしくお願いします。

273 :
hbmpBuffer = (HBITMAP)orgImage;
これが明らかにおかしい
ビットマップハンドルは専用の関数で作らないといけない

274 :
ありがとうございます。
ビットマップの扱いについて調べ直してきます・・。

275 :
学校の宿題で、預金額、利率を入力して、10年間分の各利率に対する
預金額を表示するってのをやれって言われたんですが、全くわからないんで
誰かまじで教えてください。お願いします!預金額の最高額は900000円で利率の入力は%
利率の刻みは、0.05%、各金額の間は7桁表示。
預金額=預金額+利息
利息=預金額*利率*80%でお願いします。
以下の解答例のようにしたいんです。m(vv)m
例)
預金額(円)=10000
利率(%)=0.30
利率  1年 2年 3年 4年 5年 6年 7年 8年 9年 10年
------+------+------+------+------+------+------+------+------+------+------+
0.30% | 10024 10048 10072 10096 10120 10144 10168 10192 10216 10240
0.35% | 10028 10056 10084 10112 10140 10168 10196 10224 10252 10280




0.75% | 10060 10120 10180 10241 10302 10363 10425 10487 10549 10612

276 :
これからC言語を勉強しようとおもってるんですが、こんなエディタないでしょうか?
フリーソフトで、グラフィックが綺麗で、「実行」のところにコマンドプロンプトがあるようなエディタです。
教えてください。

277 :
C言語でRS232Cでシリアル通信をさせるためのプログラム(命令文!?)
ってどういうものがあるのでしょうか?
rs send buf() とか知っていますが・・・・・
初心者ですみません。

278 :
>>277
C言語には、そういう類は一切ない。
全て、ライブラリとして外部から提供される。

279 :
>>278
そうなんですね、どうもありがとうございました。

280 :
>>276
言っていることがよくわからないが、Visual C++ 2005 Express Edtionはどう?

281 :
ニートで暇だからゲームでも挑戦しようかって始めたんだが
いきなり躓いたorz
中略でスマンが一番上のwhile〜の行でエラーが出る。一日中
悩んだだが解答見つからず・・。エラー見つけるの苦手だよorz
助けてくれ・・。
メッセージはint' 型は 'char *' 型に変換できないって出てる。
char buf[99];
char* p;
int i,j,map_data[99][99];
この行→ while((fgets(buf,sizeof(buf),fp))!=EOF){
j=0;
p=strtok(buf,",");
map_data[i][j]=atoi(p);
j++;
while(p!=NULL){
p=strtok(NULL,",");
if(p!=NULL){
map_data[i][j]=atoi(p);
j++;
}
}
i++;
}

282 :
>>269の所で聞いてきます。スレ汚しすみません。

283 :
#include <stdio.h>
#include <math.h>
#define PI 3 // およそ3
main()
{
/* a,bの値 */
int a = 10, b = 20, i;
double x, y, t = 0.0;
char c;
/* x,yのどちらを表示するか */
printf("x or y ? -> ");
scanf("%c", &c);
/* 計算して表示 */
printf("\n -1 0 1\n");
printf("t |----------|---------|\n");
while (t < 10.0) {
x = cos(2 * PI * a * t);
y = sin(2 * PI * b * t);

printf("%2.1lf ", t);
if (c == 'x')
for (i = 0; i < (int)(10.0 * x + 10); i++)
putc(' ', stdout);
else if (c == 'y')
for (i = 0; i < (int)(10.0 * y + 10); i++)
putc(' ', stdout);
printf("*\n");
t += 0.1;
}
return 0;
}
のwikiに載っていたプログラムで
x = cos(2 * PI * a * t);
y = sin(2 * PI * b * t);
の2の値を自由に変えられる(自分で入力できる)ように
したいんですけど、どうやったらいいですか?

284 :
#include <stdio.h>
main()
{
int a;
int b=0;
for(a=0; a<=100; a++)
printf("セ氏温度:%d カ氏温度:%d\n",a ,fahrenheit(a,b));
}
int fahrenheit(int x, int y)
{
y = (9/5)*x+32;
return y;
}
セ氏温度からカ氏温度を求めるプログラムなのですが
float型を使ってカ氏温度を小数点第1まで出力したいのですが
エラーばかり起きて私にはどうにもできません
誰か助けてください

285 :
俺も初心者だが適当にこんな感じなのかな。
もう、遅いかもシレンが。
void main()
{
float fahrenheit(float x, float y);
float a,b;

for(a=0,b=0;a<100;a++)
printf("摂氏温度%.1f 華氏温度%.1f\n",a,fahrenheit(a,b));
}
float fahrenheit(float x,float y)
{
return y=(x*9/5)+32;
}

286 :
2次方程式の解を表示させたいのですがなぜか解がおかしな値になってしまいます
どうすれば解決しますか
#include<stdio.h>
int main(void)
{
int a,b,c,d;
double x,x1;
printf("ax^2+bx+c=0のa,b,cを入力してください:");
scanf("%d %d %d",&a,&b,&c);
d=b*b-4*a*c;
x=(-b+sqrt(b*b-4*a*c))/2*a;
x1=(-b-sqrt(b*b-4*a*c))/2*a;
if(d==0)printf("x=%.3lf",x);
else if(d>0)printf("x=%lf,%lf",x,x1);

else if(d<0)printf("実数解が存在しません");
return(0);
}
なんかquad()を使用するらしいのですが??って感じです

287 :
行列の計算をできるライブラリがあるとか聞いたんだけどどうやって
使うの?

288 :
char型のcharってcharacterの略で%nのnはnewlineの略ですよね?
こういう略してある語の元の単語が載ってるサイトってないですかね?
探してもこの2つしかわからなくて

289 :
>>288
英語の本よめばいいんじゃない?

290 :
age

291 :
ちょっとスレ違いかもしれませんが、サーティファイ主催の
検定1級では、プログラム改造よりも変更仕様書作成のウェイトが高いと
聞いたのですが、やはり実際のコードの変更点をしっかりと
変更仕様書に洗い出せていないと合格は難しいのでしょうか?
変更仕様書がうまく作れなくて困っています。

292 :
とてつもなく初心者な質問お許しください
VC++6でコンソールをつくり実行したら、Debugフォルダにexeができます
このexeを自作のicoに画像を変更したいのですが、どうすればいいんでしょうか?
ご教授お願いいたしますm(_ _)m

293 :
#include<stdio.h>
void main(void);
void main(void)
{
int n1;
short nt;
nt=1;
for(n1=0;n1<6;n1++);
nt*=10;
printf("10の6乗は%dです",nt);
}
これってどこが間違ってます?

294 :
for の後ろの方

295 :
パソコンを買って、いざ家で勉強しようと思っても、うまくコンパイラ等がインストール
できません。
仕方なくROM付の教材を買ってきてそこからダウンロードしようと思ったのに
それもうまく出来ません・・・。
助けてください!!!!お願いします!!!!

296 :
0から10までの階乗を計算して表示するプログラムが分かりません。
誰か教えてください。

297 :
>>295
Borlandならインストーラを実行してから設定する必要があるが…
設定じゃなくてその前のインストールで失敗するの?それとも設定?
>>295
再帰ならこんな感じ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4962.c

298 :
引数がvoid型の関数はどういう風に使えばいいんですか。
引数はポインタ型になってます。

299 :
>>293
printfはforの外に出さないと6回表示しちゃわないか?

300 :
>>298
引数は void なのかポインタ型なのかどっちだよ。

301 :
関数名(void* 変数名,その他引数……)
こんな感じ。中身は詳細不明

302 :
関数名(void* 変数名,その他引数……)
こんな感じ。中身は詳細不明

303 :
orz

304 :
>301
void *は汎用ポインタ型だからどんなポインタでも代入できる。
引数の場合はどんなポインタもキャストなしで渡せる。

305 :
ポインタについてなんですが、int d[10] = {1,2,3,4,5,6,7,8,9,}; int *pで宣言するときはp=dで入れることができるんですが
double d[5] = {12.3,11.3,14.4,44.5,55.,}; と宣言したときにp=dではなぜかエラーが出るのですがどうしてでしょうか?

306 :
>>305
型があってないからじゃねぇかな。int *p のままだと入らないと思う。
キャストしてもいいけど意味内から、double *pて宣言すればいいのでないかな。

307 :
>>305
「p=d」って書き方は大嫌いだなぁ。
まぁ、私以外の人は全員そう書くんだろうけど。
私は絶対に「p = *(d[0])」と書く。

308 :
かなり初級のテキストのwhile文の項にある問題なんですが、
次のプログラムは、与えられた数(n)が割り切れる整数かを出力するものである。
解答例
#include <stdio.h>
main()
{
int i, n;
n=51;
i=0;
while( i < n+1){
if(n % i == 0){
printf(" %d は%dで割り切れる.\n", n, i);
}
i++;
}
}
【出力例】
51は 1で割り切れる.
51は 3で割り切れる.
51は17で割り切れる.
51は51で割り切れる.
この条件式( i < n+1)のところ、条件式 ( i <= n )では何がいけないのでしょうか?


309 :
>>308
そのプログラムを実行すると落ちないか?

310 :
>>308
条件式は(i < n+1)でも(i <= n)でもどちらでも構わない。
ただ、(i <= n)の方が限界値(n)がそのまま現れるから
俺はこちらを使うかな。
>>309がいってる落ちるってのは
iを0で初期化してるから、1回目のif文で
n % i ==> 51 % 0 で0除算になってしまうということ。
iは1から始めなければいけない。

311 :
性能はどうなのか?↓
http://yasuipc.jp/

312 :


313 :
int a の1次元行列を領域1000個で宣言しすべての中身を10にするプログラムをつくれ。
↑教えてください。全くわからないです・・・

314 :
>>313
void main(void){
  int a[1000];
  int i;
  for(i=0;i<1000;i++){
    a[i]=10;
  }
}
長いこと書いてないからあてずっぽ。
そもそも一次元行列ってのがわからないから配列にしてみた。
こんなかんじ。

315 :
>>313
void main(void){
  int a[1000][1];
  int i;
  for(i=0;i<1000;i++){
    a[i][0]=10;
  }
}
な気もしてきた。行列ってのがひっかかる。
動作としては>>314と同じ。はず。

316 :
一度表示した文字を全部消すことはできますか?

317 :
3年で300スレか・・・

318 :
レスね

319 :
#define Pi 3.141592654と定義して,
cos(Pi/2)が0に限りなく近くはなるんですが0にならなくて困っています.
解決方法はありますか?

320 :
>>319
実行結果はどうなった?

321 :
vistaで某ランドのコンパイラは使えますか?

322 :
#include<stdio.h>

int main (void)
{
char str[3]="SKY";
int i=0;


while(i<=3){
printf("str[%d] = %d %x %c\n",i,str[i],str[i],str[i]);

i++;
}
printf("文字列 = %s\n",str[3]);
return 0;
}
コンパイル後これを実行すると初めのprintfは正常に動作するのですが
ループ後のprintfでコマンドプロンプト上でエラーが出ます。
頭のいい人おしえてください。

323 :
>>322
char str[3]="SKY";

3

4以上にする

324 :
あっ、ごめん
>>323も間違いだけど、本命はこっちだorz
printf("文字列 = %s\n",str[3]);

printf("文字列 = %s\n",str);

ついでに言うと、
while(i<=3){
は間違ってると思う
while(i<3){
だと思うんだが

325 :
while( str[i] ){
でもいいな

326 :
ちなみに
> char str[3]="SKY";

メモリーをcharのサイズで3バイト確保したところに
'S' 'K' 'Y' 0x00 の4バイト書き込むから暴走の元になるよ
普通は
> char str[]="SKY";
で文字列サイズで確保でいいと思う

でも、最近のコンパイラはエラー吐いてくれるのかな?

327 :
ASAPとALAP、リストスケジューリングの勉強をしてるんですが、
入力として与えるデータフローグラフの規模が大きくなっていくとき、
スケジューリングの実行時間がどのように増加するか教えてください。

328 :
プログラムの結果をhtml形式で出力したいんですがどうすればいいです?

329 :
以下の★1と★2のやり方で結果が同じになるのはどうしてなんでしょうか?
有識者の方ご教授をお願いします。
#include<stdio.h>
void * func(void *p){

printf("□■□func開始□■□\n");
printf("pのアドレス = %p\n",p);
printf("p = %d\n",(int)p);
(int)p += 100;
printf("p = %d\n",(int)p);
printf("□■□func開始□■□\n");

return NULL;

}
int main(void){

int number = 30;

printf("numberのアドレス = %p\n",&number);
func((void *)number);★1

return 0;

}
-------------------------------------------------
#include<stdio.h>
void * func(int *p){

printf("□■□func開始□■□\n");
printf("pのアドレス = %p\n",p);
printf("p = %d\n",*p);
*p += 100;
printf("p = %d\n",*p);
printf("□■□func開始□■□\n");

return NULL;

}
int main(void){

int number = 30;

printf("numberのアドレス = %p\n",&number);
func(&number);★2

return 0;

}

330 :
>>329
★1ってコンパイル通るのか???

331 :
GTKのスレって無いの?

332 :
質問です。
以下のようなプログラムで、1が押されたときはiを、2が押されたときはjを
増やしていくようなプログラムにしたいのですが、
何も押されてないときには入力待ちにならずに次の処理をするようには出来ませんか?
while(1){
 char key;
 key = getche();
 
 switch(key){
  case '1':
   i++;
   break;
  case '2':
   j++;
  break;
 }

/* 他の処理*/
}
よろしくお願いします。

333 :
SIN、COSを使って正多角形の図を作りたいんですけど、どうやればいいんですか?

334 :
>>319
コンピュータの計算とはそういうもの。
無限桁の計算は不可能で、必ずどこかで打ち切って有限桁の計算を行わなければならない。
だから、そこで誤差が生じる。
なので、各自が有効数字が何桁かということを意識してやらねばならない。
お前がプログラムを動かしているのが自分のPC上なら、
まず間違いなく浮動小数点数周りはIEEE 754に従っているはず。
そこでは、doubleの精度は十進法で15-17桁程度。
ということは、3.1415926535897932くらいまで桁を増やすのは効果がある。
逆に、それ以上は無意味。
文字列として、出力するときには上から6桁しか表示しないなどとすればいい。
printf系なら、%gや%fをそのまま使えば、そうなる。

335 :
これより新しいバージョンありますか
freecommandlinetools2.exe のバージョン 2.04.001。bcc32.exe の製品バージョンが 5.0、ファイルバージョンが 5.5.1.2

336 :
#include <stdio.h>
int main( ) {
while(1)
{
   printf("死にたい\n");
    if(いじめっ子をやっつけられたら)
    { break; }
    else if(ループ中に死んだら)
    { return 1; }
}
return 0;
}
ループが抜けられません。異常終了は簡便です。助けてください。

337 :
Builder C++を使っている者ですが
実行ファイルによってWindowsが
セーフモードで起動されたか否かを調べる方法はありますか

338 :
>>336>>335に反応して書いたんだろうけど
反応した>>336>>335と同類だぞ

339 :
>char str[3]="SKY";
char *str="SKY";
の方がカッコイイ。

340 :
>>339
ここは初心者板なんだから
char* str="SKY";と書くべきだと思われ

341 :
const char *str = "SKY";

342 :
>>329
★1はこういうことがしたいんではないの?
#include <stdio.h>
void* func(void *p)
{
int *number = (int*)p;
printf(" □■□func開始□■□ \n");
printf("numberのアドレス = %p\n", number);
printf("number = %d\n", *number);
*number += 100;
printf("number = %d\n", *number);
printf(" □■□func終了□■□ \n");
return NULL;
}
int main(void)
{
int number = 30;
printf("numberのアドレス = %p\n", &number);
func((void*)&number);
return 0;
}

343 :
よろしくお願いします!まず自分の質問が++なのかさえ分からないものですが宜しくお願いします。
あるアプリで競艇のデータを作っています。掛け金を掛け方に応じ変えています。
■2連複=2000■3連単=3000
また投資額は(掛け方*レース数)です。
アプリ上で掛け方を入れたら自動的に投資額がでるようなのですが、式が分かりません。
自分で色々試し
■IF(方式=2連複,((レース数*2000,((レース数*3000)みたいなのを作りましたが、これだとダメでした。
宜しくお願いします。

344 :
char str[3]="SKY";とchar *str="SKY"; の違いがよくわからん

345 :
>>344
1番目はデータ、2番目はポインタ。

346 :
入力された値が3だったら、
***
-**
--*
といった具合(後ろで桁合わせ、-は空白)に出力されるプログラムを組みたいと思います。
#include <stdio.h>
int main(void)
{
int num;
int i,j,k;
printf("正の整数:");
scanf("%d",&num);
if(num>0)
{
for(i=1; i<=num; i++)
{
for(j=num; 0<j; j--)
{
printf("*");
}
printf("\n");
for(k=1; k<=i; k++)
{
printf(" ");
}
}
}
else
{
printf("無効な数値が入力されました。\n");
}
return 0;
}
の様に組んだのですが、実行すると
***
-***
--***
となってしまいます。
*を出力する部分が正常に動いていないのだと思うのですが、
どう改善させれば良いのか分かりません。
宜しくお願い致します。

   

347 :
>>346
これでどうでしょう。
#include <stdio.h>
int main(void)
{
int num;
int amax; /* アスタリスクの一行あたりの最大出力個数 */
int acnt; /* アスタリスクの出力個数カウンタ */
int smax; /* スペースの一行あたりの最大出力個数 */
int scnt; /* スペースの出力個数カウンタ */
printf("正の整数:");
scanf("%d", &num);
if (num > 0)
{
for (amax = num, smax = 0; amax > 0, smax < num; amax--, smax++)
{
for (scnt = 0; scnt < smax; scnt++)
{
printf(" ");
}
for (acnt = 0; acnt < amax; acnt++)
{
printf("*");
}
printf("\n");
}
}
else
{
printf("無効な数値が入力されました。\n");
}
return 0;
}

348 :
C++Compiler / Turbo Debugger ってどうやって使えるようになるんですか?

349 :
>>347
ありがとうございました。
恥ずかしながら、forの一くくりに条件を二つも入れられることを
知りませんでした。

350 :
すみません、質問なのですが
char型の1次元数列に格納されている数列を
INT型の変数に代入するにはどうしたらいいのでしょうか;;
具体的には、数列として1,2,3が入っているとすると
それをINT型の123に変換できないでしょうか?
int out,i,omomi=100;
char suretu[3]=123;
for(i=0;i<3;i++){
out=out+(suretu[i]-'0')*omomi;
omomi--;
}
とすれば変換出来ると思ったのですが、char型の数とINT型の数は
掛け合わせることができないみたいで…
それに加え、入力の数列が2桁、1桁の場合にどうやって判定すればいいのかも
わかりません…。
よろしくお願いします;;

351 :
>>348
残念だが、ここはC専用初心者質問スレである。
C++はスレチ

352 :
>>350
こういうのは?
int out;
char suretu[] = "123";
out = atoi(suretu);

353 :
>>352
そんな関数あったのですね;;
もっと調べてみるべきでした。
ありがとうございました!

354 :
アロー演算子ってものを使うと、処理速度が速くなるということが書いてあったのですが、
実際業務のような大きいプログラムを組んだ際、どの程度速くなるものなんで
しょうか?

355 :
atoi .. asii to into

356 :
>>355
atoi .. ascii to integer
atof _ ascii to float

357 :
掛け金のついたトランプのポーカーゲーム作ってください(C言語)

358 :
>>350
無理やり自分でやるなら、
int keta;
keta=strlen(suretu);
for(;keta>0;keta--){
omomi=10~(keta-1);
計算;
}
じゃないか?
omomi--だと100回ループしてまうのでは。

359 :
すいません、質問です。
C言語学習のために、terapadやコンパイラの入ったディスクを
使ってインストールしてみました。指示に従って上手く終えたはずなんですが、
実際にbcc32コマンドを使ってコンパイルしてみても「認識されていないので
実行できない」という趣旨の文が出てくるだけです。cfgファイルの
移動も環境変数の編集も指示通りのはずなんですが・・・・・
自分と同じミスをした方、いらっしゃったら教えて頂けませんか?

360 :
まず、terapadで作ったソースファイルをC:\borland\bcc55\Binのところに
保存する。C:\borland\bcc55\Binは作業フォルダ。君の作業フォルダは知らん。
次に、コマンドプロンプト上で >cd C:\borland\bcc55\Bin
で作業フォルダに移動
>bcc32 ファイル名.c
で終わり。

361 :
適当に数字を入力して
その数字をまたある数で割って割り切れたらその値を出力して
割り切れなかったら余りだけをまた別の小さい値で割りきれるか
って繰り返して最終的には割り切れるプログラムを作りたいんですが・・・
例えば1020を500で割ると2余り20で2が出力され
余り20を10で割って2が出力されるみたいな
困ってるんでお願いしますm(_ _)m

362 :
>>361
頑張って書いてみたけどどうかな?
#include <stdio.h>
int main(void)
{
int wara,waru,ans,amari,waru2;
printf("割られる数と割る数を,で区切って入力してください");
/*例 100,3*/
scanf("%d,%d",&waru,&wara);
ans = waru / wara;
amari = waru % wara;
printf("答えは%d,余りは%d :",ans,amari);
scanf("%d",&waru2);
printf("%d / %d = %d",amari,waru2,amari / waru2);
return 0;
}

363 :
改良版
#include <stdio.h>
int main(void)
{
int wara,waru,ans,amari,i;
printf("割りたい数を入力してください\n");
scanf("%d",&wara);/*割られる数*/
for (i = 1;i <= 10;i++) {
printf("どの数字で割るか入力してください\n");
scanf("%d",&waru);/*waraを割る数*/
ans = wara / waru;
amari = wara % waru;
wara = amari;
printf("答えは%d\n余りは%d\n",ans,amari);
}
return 0;
}

364 :
課題が出来ない、誰か教えて°・(ノД`)・°・

2桁の16進数を入力して%xを使わずに対応する文字を表示するってのなんだが
例:入力 53
文字コード「53」の文字は「S」

どうやっても大文字のSが出ない(つд`)

365 :
C++はスレ違いですか?

366 :
質問です。
例えば
int data[2][2]
という2次元配列をとった場合
メモリ上ではどのように格納されているのでしょうか?
data[0][0] data[1][0] data[0][1] data[1][1]
それとも
data[0][0] data[0][1] data[1][0] data[1][1]
なのでしょうか?

367 :
Cを覚えたいんだけど、何から揃えればいいの?

368 :
パソコン
ビルダー
参考書

369 :
C言語ってどれくらいのレベルを基準に
初級
中級
上級
と判断できるの?

370 :
初級:メモリの構造を理解できてポインタが
使える。
中級:***pとか意味も無く使ってみる
上級:むしろポインタを使わずにビューティーな
ソースが書ける。
こんな感じだと初心者の俺が言ってみる。

371 :
C言語を勉強してみようと思って
「猫でもわかる〜」という本を読みはじめてみたんですが、
処理環境ってどうすればいいのかさっぱりわかりません。。。
どこかで何かをインストールするんですか?
ソフト買うんですか?

誰か教えてくださいorz

372 :
とりあえずMinGwでググッてみろ
話はそれからだ。

373 :
>372
ぐぐってみた!
「MinGwはフリーで入手できるGNUのCコンパイラである」らしいとわかった!
これをダウンロードすればいいの?

374 :
そうだっ!!
ダウンロードしてインストールして
パスを通して終了だ。
パスの通し方はスタート→ファイル名を指定して実行
→cmd→PATH C:\MinGw\binとかそんな感じだ。
そしてソースファイルを作成したら
Dos窓からgcc 何とか.txt エンター

375 :
うーん。。。
ダウンロード画面(ここ↓)
ttp://sourceforge.net/project/showfiles.php?group_id=2435
まで行ったけど、いっぱいあってどれをダウンロードすればいいのか分からない(汗)
マジ初心者で申し訳ないけど教えてください。。。

376 :
いくらなんでも初心者すぎるだろ・・・・
ttp://sourceforge.net/project/showfiles.php?group_id=2435
の一番上のMinGw 5.1.4をダウンロードして実行
後はこのページでも見ながらインストールしてみれ
ttp://yanchde.gozaru.jp/mingw/wingw_start.html

377 :
プログラムの勉強のためにLinux入れちゃったよ
でも、とりあえずHello Worldは書けた。
a.outなんてファイルが出来るのな
早くウィンドウとか出したいなぁ

378 :
fprintfの使い方としてわからないんですが、文字列としてファイルから配列に読み込んだ場合
fprintfとして使うとファイルの読み込みの上書きじゃなく全部消えてしまうマスカ?

379 :
ここよりプログラム板に行った方がいいんじゃないか?

380 :
>376
ダウンロードは途中まで行けるんだけど、
「Your connection appears to have dropped out.
Reconnect dial up or check your IE proxy settings.」
って表示されて途中で止まってしまう…orz

設定を調べろといわれてもド素人にわからないが、
色々と頑張ってみたところ互換性がうんぬんかんぬん。。。?
MinGwがまだXP対応で使ってるPCがvistaだからとか??

ってなって困ってるところです。
丁寧に対応してくれてるのに つまずいてばっかりでごめん。
でもできればもう少し我慢して教えてくれないだろうか(><;)

381 :
>>380
Borlandのコンパイラをオススメしてみる。
http://www.codegear.com/jp/downloads/free/cppbuilder
↑のページの
C++ Compiler 5.5/Turbu Debugger
てのクリックして、必要事項記入してダウンロードできる。
個人使用に関しては只。
落としたら、コンパイラの実行ファイルフォルダを環境変数にPATH設定する。
多分コンパネのシステムからできる。
今あるPATHの後ろに;c:\borland\bcc55\binを加えて再起動。
それとINCLUDEとLINKのPATHをCFGファイルに設定する。
-IC:\Borland\Bcc55\Include
-LC:\Borland\Bcc55\Lib
て内容で、上のbinのフォルダにBCC32.CFGてファイルで作成する。ノートパッドでOK。
あとは適当にCのソース入れるフォルダ作って、そこにソース入れる。
コマンドプロンプトからソースのフォルダに行って、
>BCC55 ファイル名.c エンターで実行ファイルが作られる。

382 :
>>381
ふぅむ。。。
ちょっと今急いでレポートを書かなきゃいけないので
明日の夜にやってみる!
ちなみにこれってC++のコンパイラみたいだけど、
C++ってC言語とどう違うの??
今は『猫でも分かるC言語プログラミング』って本を読んでるんだけど
このコンパイラを使うならC++の本の方がいいのかなぁ?汗

383 :
すいません、ちょっと教えて下さい。
画面の右下のツールバーが消えてしまって、ペンまで消えてしまいました。
これは誤作動してるんですか?
それともロックのようなもの?をしてしまったのでしょうか?
設定はしてみましたが、なぜかできませんでした。
再起動の時やショットダウンの時は一瞬ツールバーが表示されます。

384 :
どなたかお助けください
以前zipファイルを開くときにプログラムを使って開くというのにしてしまいまして
それ以来Adobeだのメモ帳だのから開くことしかできず結局中身は開けずじまいなのです
プログラムから開くさえクリックしなければ以前のように見れた気がするのですが
どうやったら直るでしょうか?お願いします!

385 :
しーとしーぷらぷらって何が違うんですか?
スクリプトしか知らない自分に解り易く説明してください。

386 :
>>382
C++のコンパイラだけど、Cもいけるから大丈夫。
>>385
Cはどっちかっていうと機械向けの言語であまり人に親切ではない。
C++はCの仕様拡張でオブジェクト指向プログラミングとかクラスの実装とかで、
人に優しい。わかりやすいかどうかは別だ。説明してておいらもわかってないさ。
C++のプログラム経験あるけど、結局Cの範囲でしか書かなかったからな。

387 :
>>384
ここC言語スレなんだけど、それさえもわからんほど焦ってる?
とりあえず、エクスプローラーのツールのフォルダオプションのファイルタイプ
で登録されてる内容を編集するか、削除して一からやりなおすかしたらいいんじゃないかと思う。

388 :
>>386
詳しいご説明ありがとうございます。勉強になりました。

389 :
echo "main(){}" > test.c; gcc test.c

390 :
>>387
CってPCの略語だと思ってたらどうやら違う?
しかし直りませんわ・・・3月に買ったばかりなのに何もできやせんこのPC


391 :
分かる人がいれば、教えていただきたいのですが・・・
VisualStudio2008でC++のMFCの基本的なスタイルで作成したんですが
ビルドするとツールバー(切り取り・保存・貼り付け・バージョン情報)が
勝手に作成されてしまいます。
これを消すには、どこをいじればいいでしょうか?

392 :
えっとC初めてまだあまり経っていないので質問です。
勉強の仕方なんですけど参考書とかっていうのは揃えた方がいいのでしょうか?

393 :
C言語学習してて参考書が必要ないと感じるなら
買わなくていいだろ。

394 :
>>393
そりゃーごもっともだが、回答にはなってないな。

395 :
http://www.geocities.jp/ky_webid/algorithm/017.html
こういうプログラムを実行したときに
void型はnode型に変更できませんってなるのはなぜでしょうか

396 :
bccだと普通にできたけど・・・・
コンパイラの違いじゃないか?
と初心者の俺が言ってみる

397 :
ネットがあるのに参考書も必要かな?

398 :
>>397
有ると便利な事も有る。
まぁ、やり方しだいだと思う。
と初心者が言ってみる

399 :
>>397
知識の質の違いの分かるエスパーには不要だよ

400 :
逆引き一覧だけは本で持ってる罠

401 :
コマンドラインでプログラムを実行し、コマンドラインでキーボード入力をし、
Ctrl + dが押されるまで改行しても入力し続けることができて、Ctrl + dが入力されたら入力された文を
すべてテキストファイルに書き込むプログラムはどうやって作ったらいいですか?

402 :
>>395
C++のコンパイラでコンパイルしてるから。
大方、VisualStudioのExpressでも使っているんだろう。

403 :
Πの近似値を求めるプログラムを教えてください

404 :
TL2号数使えばいいですよ

405 :
>>403 これでヒントを得てください。
#include<stdio.h>
void main(void)
{
int w,a,b,c,d,e,f,g,h;
float i,j,k,l,m,n,o,p,q,r,s,t,u;
for(w=1;w<=10000;++w){
a=w;
b = a*a;
c=b-a;
d=2*a;
e=c/d;
f=a-e;
g=f*f;
h=g-a;
i=2*f;
j=h/i;
k=f-j;
l=k*k;
m=l-a;
n=2*k;
o=m/n;
p=k-o;
q=p*p;
r=q-a;
s=2*p;
t=r/s;
u=p-t;
printf("√%dの近似値は\%fです。\n",a, u);}

}

406 :
二重for誰か考え方教えてください。
理屈はわかるけど、納得いかない…

407 :
わかるかわからんかはっきり汁
わからん例題を示せ

408 :
#include<stdio.h>
main()
{
int a,b;
for(a=1; a<=10; a++)
{
for(b=14; b>a; b--)
{
printf("*");
}
printf("\n");
}
return 0;
}
for(b=14; b>a; b--) ← ここのb>aの理屈がどうしても理解出来ません。
誰かご存じでしたらお願いします。

409 :
bが減っていくんだから、例えばa=10のときは、
  b=14>10、b=13>10、b=12>10、b=11>10
の4回(14-10回)。a=1のときは、
  b=14>1、b=13>1、…、b=3>1、b=2>1
の13回(14-1回)。
同じ回数繰り返すにしても、書き方が色々ある。
for(b=14; b>a; b--) ...
for(b=14-a; b>0; b--) ...
for(b=0; b<14-a; b++) ...

410 :
for(b=0; b<14-a; b++) ...
と書けば、ループの中で変わらない「14-a」を何度も計算することになるから、
ちょっと変形でもしてみようか、という話になる。

411 :
あ!?スゴイ… 
よくわかりました。
新たな質問なんですが、以下の文だとどうして減らなくなるのでしょうか?
理屈は同じに思うのに、何で違うのかがわかりません。
すみません。これで最後ですので、おねがいします><
#include<stdio.h>
main()
{
int a,b;
for(a=1; a<=10; a++)
{
for(b=14; b>1; b--)     ←
{
printf("*");
}
printf("\n");
}
return 0;
}

for(b=14; b>1; b--)    ここの、b>aをb>1にすると、どうして減らなくなるのかわからないのです。

412 :
それはよく考え直せw

413 :
はい>< ほんとありがとうございました。
だいぶ助かりました。

414 :
しね

415 :
R言わないでください:д;
馬鹿ですみません。

416 :
質問です。
配列にポインターでアクセスする時
例えば
int data[10];
int *p_data;
とある場合配列dataにポイントする場合
p_data = data;
とする場合と
p_data = &data[0];
とする場合がありますよね。
ですが、二次元配列にアクセスする場合
int data[10][10];
int *p_data;
とある場合
p_data = data;
ではなく
p_data = &data[0][0];
としなければならないのはどうしてなのでしょうか?

417 :
家でC言語勉強しようと思ってるんだけどどんなソフト?用意すればいいの?
できればそのソフトがあるサイトのアドレス張ってもらえると助かる

418 :
>>417
>>381

419 :
>>318みて落としてみたけど実行ファイルフォルダってのがどこにあるか分からない・・・

420 :
すまん>>381だった

421 :
学校の宿題で自己 参照 構造体 を使ってプログラミングしろって言われたんだけど
ろくすっぽ授業聞いてなかったから不安なんだけどこれでいい??
#include<stdio.h>
#include<string.h>
int main(void)
{
struct roll{
char name[20];
int birth;
int zip;
char address[100];
char tel[20];
}data;
strcpy(data.name, "Taro");
data.birth = 19901111;
data.zip = 1234567;
strcpy(data.address,"shiagaken kusatsushi.");
strcpy(data.tel,"08012345678");
printf("name birth zip address tel\n");
printf("%-10.10s% 11.8d% 10.7d %-30.30s %-12.12s\n",data.name,data.birth,data.zip,data.address,data.tel);
return 0;
}

422 :
全然違うよw

423 :
自己 参照 構造体って何?w

424 :
#include <stdio.h>
int main(void)
{
char a;
for(;;){
printf("文字を入力してください。\n");
a=getchar();
if(a=='A'||a=='B'||a=='C'){
printf("正解です。\n");
}
else{
printf("不正解です。\n");
}
}
return 0;
}
この文の間違っているところはどこですか?
繰り返し文がないとうまくいくんですが、
繰り返すと勝手に1回条件文を通り「不正解です」と
出力されてしまいます。

425 :
>>424
好きなほうを選んでくれ
1.エンターを押す。だが「不正解です」は表示したくない
2.一々エンター押すのはめんどくさい

426 :
1でお願いします。

427 :
↓こんなプログラムを作りたいのですがどうやってつくったらいいのでしょうか?
挿入元文字列 : パソコン
挿入文字列 : デスクトップ  ←scanfで任意に入力
       ̄ ̄ ̄ ̄ ̄ ̄ ̄
挿入位置 : 2 ←scanfで任意に入力

挿入結果 : パソデスクトップコン
配列を駆使して作りたいです、教えてください

428 :
多分凄い初心者な質問だけど、コンパイラのバージョンってどうやって調べられるのか教えてください
GUI開発環境で、CPad for Borland C++Compiler ってのを使ってます。
それでコマンドプロンプトを起動しgcc -v と入力したら gcc version 4.3.0 20061021 というのが表示されるんですが、
これがコンパイラのバージョンを表してるんですか?

429 :
ターミナルから、
cc -version
みたいな感じだったかな?

430 :
>>429
gcc --versionと入力したら、
gcc (GCC) 4.3.0 20061021 (experimental)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
と表示されたんですが、このうちのどこがバージョンを表してるんですか?
gcc (GCC) 4.3.0 20061021の部分ですか?

431 :
4.3.0がバージョンで
20061021がリリース日じゃないか?

432 :
for文で
i = i + 1 は i++ と表現できますが、
i = i + 2 は どのように表現すればいいんでしょうか?

433 :
>432 i+=2 じゃだめ?

434 :
大きな配列(200MBくらい)を扱うプログラムを書いています。
普段はmakeを使って作業していて、makeを通じてプログラムを実行すると
ちゃんと動くのですが、シェルから起動しようとするとセグメンテーションフォルトが出ます。
デバッガ(gdb)で起動しても正常に動作しました。
どうやら、シェルの子プロセスになっているとセグメンテーションフォルトになるようなのですが、
シェルごとに割り当てられているメモリの量に制限があるということなどはあるのでしょうか。
また、この場合どういう対策をすればいいのでしょうか。
環境
Ubuntu Linux (8.04)
gcc 4.2.3
zsh 4.3.4

435 :
メモリをどうやって確保してるのでしょうか。
mallocでずずずい〜〜〜っと確保しているのであれば、もしかすると
そのうちの低い確率でNULLを返されてて、NULLポインタを使って
メモリアクセスをしてしまった、なんて事があるかもしれん。

436 :
#include <stdio.h>
int main(void)
{
int a,b,c,d,x,y;
int mc[2][2]={0};
int ma[2][2]={0};
int mb[2][2]={0};
printf("a:"); scanf("%d",&a);
printf("b:"); scanf("%d",&b);
printf("c:"); scanf("%d",&c);
printf("d:"); scanf("%d",&d);

ma[2][2]={0}+{{a,b},{c,d}};
mb[2][2]={0}+{{d,-b},{-c,a}};


if(a*d-b*c==0)
printf("逆行列はありません。");
for(x=0;x<2;x++)
for(y=0;y<2;y++)
mc[x][y]=1/(a*d-b*c)*mb[x][y];

for(x=0;x<2;x++){
for(y=0;y<2;y++)
printf("%3d",mc[x][y]);
putchar('\n');
}

return(0);
}
abcdに数字を代入してその逆行列を求めるプログラムを作りたいのですが、どこを変えればよいでしょうか?

437 :
>>436
>int mc[2][2]={0};
>int ma[2][2]={0};
>int mb[2][2]={0};
演算途中は浮動小数点になるから
double mc[2][2]={0};
double ma[2][2]={0};
double mb[2][2]={0};
としないと、演算途中で全部小数点飛ばされるとかそんな事かな。

438 :
>>435
malloc からの NULL ポインタは条件分岐で回避してるので問題ないはずです。(そこでのエラーも何回か経験しました)
現在の問題はどうやら静的に確保されたメモリの部分がシステムのスタックを使いきってしまうために起こる問題のようです。たぶんCだけの問題ではないようなので、ちょっとUnix板にでも行ってきます…。ありがとうございました。

439 :
>>416
下のほうの場合では、
p_dataはint型へのポインタだからint型の配列をポイントすることができる
しかしdataはint型の配列ではない
dataはint型10個の配列の配列になっているので、
int型10個の配列へのポインタを宣言すればポイントできる
int (*p_data)[10]=data;
ようするに型が合わない
合わない場合でも無理やり代入することはできる
p_data=(int*)data;

440 :
コンパイラのインストールと環境設定について質問なんですが
*スタート→コンパネ→システム→詳細設定→環境変数→システム環境変数の中にPathの項目を設定する
このpath項目を設定することの必要性について教えてもらいたいのです。
システム(OS)が環境変数で指定されているディレクトリに簡単にアクセスできるようにするもの。
つまりコマンドプロンプトあたりでわざわざソースファイルをコンパイラがあるフォルダにおかなくても
そのソースファイルをコンパイルできるようにするためにある。でしょうか?
もひとつこのpathというのはコンパイラの中で中間言語を順次出力する段階、という意のパスとは別物でしょうか?
スレチかもしれないですがお願いします><

441 :
なんで名前の方に書き込んでるんだ俺・・・

442 :
>>440
gccなどを呼び出すとき、「gcc」「gcc.exe」で呼び出せるようにするためです
環境変数PATHを指定しなかったら"C:\Program Files\......\gcc.exe"のように
逐一パスをつけて呼び出さないと検索してくれないので、
コマンド的に名前のみで呼び出したい実行ファイルにはパスを通します
そうすればmakefileの中でも実行させたいプログラムのパスを省略できます

443 :
>>442
ありがとうございます

444 :
int a=5,b=2
double c,d,h=2.0
c = a/b; @
printf("c = %f\n",c);
d = a/h; A
printf("d = %f\n",d);
というプログラムで
c=2.0 d=2.5
となるのですが、@とAではどこが違うのですか?
初歩的な質問ですみません。

445 :
「C言語 型キャスト」でGoogle検索してみるのも。
整数演算(int)と浮動小数点演算(double)の違いだろう。
int型同士の演算はint型が戻り値になる。
int型とdouble型は型キャストされてintがdouble型になり
double型同士の演算結果が戻り値になる。
●C言語編 第21章 型変換
ttp://www.geocities.jp/ky_webid/c/021.html
> 1つの式の中で複数のデータ型が存在する場合、大きい方の型に変換されます。

446 :
回答ありがとうございます。
ということは@はint型だから切り捨てられて2.0
Aはdouble型だからそのまま2.5ってことですか
型キャストという言葉自体しらなかった・・・


447 :
>>446
そんな感じでいいんじゃないかと思います。

448 :
小数点以下がある時は第n位まで、無い時は整数のみっていう出力の仕方を書式フィールドだけで指定する方法ってない?

449 :
>>448
入力検査、文字列処理の基本だろう
C言語の定石 を勉強せにゃあかん

450 :
C言語を先日から始めました。 
商を出す[/]と余りを出す[%]や、[int]型や[double]型を知りましたが、
「小数点以下までを求める割り算」がいまひとつ思いつきません。 
いろいろ[/]や[%]を混ぜ合わせた式にするのでしょうか。 
例えば、34が48の何パーセントかを出すとき、小数点以下6桁まで求めて
「70.833333%」と出すにはどのようにすればよろしいのでしょうか。 

451 :
#include<stdio.h>
int kotae(int,int);
int main()
{

int a,b,c;

printf("かけるられる値=");
scanf("%d",&a);
printf("かける値=");
scanf("%d",&b);

c=kotae(a,b);

printf("%d X %d = %d\n",a,b,c);

return 0;

}
int kotae(int a,int b)

{
int c;
c=a*b;

return c;

}
これをカスタマイズせよ

452 :
>>449
strlenとか使うんですか?

453 :
>>450
double型同士の計算では%が使えず、/だけ。
その/の結果は小数点以下も計算した商。
小数点以下6桁というような出力をするにはprintfなどで書式%.6fを使う。

454 :
>>451 >>453
御回答ありがとうございました。 
[/]は商以下を切り捨てるので「小数点以下を最初から計算しない」のかと思い込んでました。 
もう一度該当箇所の解説を本で読んでみて、なんとなく[double]型と[int]型の違いや
使い方がわかってきた感じがします。 
何度か間違いながらも、「計算して表示するときに整数を[double]型にして計算して表示する」…という
方法をとりましたら、一応うまくいきました。(何もしないと小数点以下6桁の表示のようです) 
最初に整数を入力するときは[int]型で、計算して割り合いを出すときだけ[double]型にしました。
最後の表示は次のように書きました。 
printf("%dは%dの%f%です。\n",n1,n2,((double)n1/(double)n2)*100);
/*n1とn2は入力する二つの整数(int型)*/
二つの整数のそれぞれに(double)をつけて変換してから計算する方法しか思いつきませんでした。 
もっと、簡潔に書く方法とかありましたら教えてください。よろしくお願い致します。 

455 :
>>454
強いて言えば、(double)n1 / (double)n2は(double)n1/ n2で十分。
(演算対象の2つにint型とdouble型が混在している場合、intのほうがdoubleへ自動的に変換される)
だけど、前者の書き方をする人も一定数いるみたいだし、
どっちの書き方にするかはお前の好みで決めればいい。

456 :
>>455
ありがとうございました。

457 :
プログラミング初心者です。
要素数NUMBERの配列に数字を格納し、その中から最小の値を表示するプログラムを書こうとしているのですが
エラー原因がわかりません・・・。
アドバイスもらえないでしょうか。
開発環境:VC++2008
#include<stdio.h>
#define NUMBER 5;
int min_of(const int vc[], int no)
{
int i,min;
for(i=0;i<no;i++)
{
if(min>vc[i])
min=vc[i];
}
return min;
}
int main(void)
{
int A[NUMBER];
int i;
for(i=0;i<NUMBER;i++)
{
printf("A[%d]:",i);
scanf("%d",&A[i]);
}
printf("最低値は%d",min_of(A,NUMBER));
scanf("%d",&A[i]);
}


458 :
日本語がおかしかった・・・。
要素数NUMBERの配列に数字を格納し、その中から最小の値を表示するプログラムを書こうとして457のようなコードを書いたのですが
下記のエラーが出ます。一応、確認したのですがおかしいところが見あたらないのですが、アドバイスもらえないでしょうか。
1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(19) : error C2143: 構文エラー : ']' が ';' の前にありません。
1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(19) : error C2143: 構文エラー : ';' が ']' の前にありません。
1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(22) : error C2146: 構文エラー : ')' が、識別子 'i' の前に必要です。
1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(22) : error C2059: 構文エラー : ';'
1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(22) : error C2059: 構文エラー : ')'
1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(23) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(28) : error C2143: 構文エラー : ')' が ';' の前にありません。
1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(28) : error C2143: 構文エラー : ')' が ';' の前にありません。
1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(28) : error C2059: 構文エラー : ')'
1>c:\documents and settings\r\my documents\visual studio 2008\projects\c\c\c.cpp(28) : error C2059: 構文エラー : ')'

459 :
>>457-458
最初に、最終行の[scanf]はいらないような気がしましたけど、
必要なのでしょうか。 
私も初心者ですが、試しにやってみましたところ… 
その構文エラーの原因は、「5」の横に[;]が書いてあるからです。
まず、これをはずしてください。 
そのあともエラー出たのですが、[min]が初期化されてないようです。 
私は[min]に適当に大き目の数を代入してみました。 
それでいけると思います。 
もっと詳しい人なら、もっといい解決方法があるかもしれませんがご参考まで。 
 

460 :
>>459
回答ありがとうございます。#defineに;はいらないんでしたね・・・。

461 :
配列に関する昇順のソートでお聞きしたいのですが、
void sort(int data[], int n)
{
  int k = n - 1;
  while ( k >= 0 ){
    int i, j;
    for ( i = 1, j = -1; i <= k; i++)
      if (data[ i - 1 ] >data[ i ]){
        j = i - 1;
        swap(&data[ i ], &data[ j ]);
      }
    k = j;
  }
}
/*swap()は別途定義された関数。data[]が受け取る配列。[ n ]は配列の要素数です。*/
ここで[ j ]が[ -1 ]で初期化されているのがなぜなのか迷いましたが、
おそらく[while]を抜け出すために[k]を負の値にしなければならないからだと思いました。
ということは、[for]文の[ j = -1 ]によって[ j ]は毎回初期化されてるということでしょうか?
[ i ]はインクリメントされて毎回1ずつ増えていて[ i = 1 ]で初期化されていないように見えるのですが、
なぜ[ j ]は[ -1 ]に毎回初期化されるのか教えてください。 
それとも、私の認識が全然違ってて、違う理由で[ k ]がマイナスになって[while]文を抜けてる
のでしょうか。([ i ]も[ j ]も毎回初期化されて[ 1 ]と[ -1 ]になってるとか・・・) 
 

462 :
iとjにセットしている数値は、あくまでも初期値。毎回初期化はされません。
if文で数値比較後、jにi-1を入れてるのに注目。swapがあればjは-1じゃなくなる。
forで一巡してswapがなければjは-1となり、whileから抜ける。

463 :
>>462
ありがとうございます。頭が混乱してたので、検証してみたところ、
[for]文を数回繰り返し→[while]文の先頭へ→[for]文へ… 
を数回繰り返すとき、[while]文の先頭に戻ってから[for]文に入るとき
また初期化されてることを見落としてました。
最後は、[j]が[0]になって[k]に代入され、[while]文の先頭に戻り、
[for]文に入るとき[i]に[1]、[j]に[-1]が代入されて、[i <= k]が成立しないので
[ k = j ]に飛ぶのがわかりました。 
そのあと、[k]に[j]の[-1]が代入されて[while]文の先頭に戻り、( k >= 0 )が
成立せず、晴れて[while]文を抜け出してるようです。 
やっと納得できました。 

464 :
#include <stdio.h>
#define K @
int main(void)
{
int i;
long s;
s = A;
for (i = 1; i <= B; i++)
s = s * i;
printf("%d の階乗 = %ld\n", K, C);
return 0;
}
10の階乗を計算するプログラムですが、
@〜Cの中が分からなかったので教えてください。

465 :
@ R
A R
B R
C SEX

466 :
#include <stdio.h>
#define K 10
int main(void)
{
int i;
long s;
s = 1;
for (i = 1; i <= 10; i++)
s = s * i;
printf("%d の階乗 = %ld\n", K, s);
return 0;
}
これでいけるかと思います。

467 :
>>466
返答ありがとうございました。

468 :
全くの初心者なんですが、
おすすめの本はないでしょうか?

469 :
読んでも身に付かないだろう。
http://msdn.microsoft.com/ja-jp/vcsharp/aa700831.aspx

470 :
http://homepage3.nifty.com/ishidate/vcpp.htm
http://www.kumei.ne.jp/c_lang/
プログラミングを行うには、
「デザインパターン」も知っておく必要がある。
デザインパターンとは先人の知恵だ。
こうすれば、後で困らないように作れます。というレシピ。
http://634.ayumu-baby.com/gof_designpattern/index.html


471 :
464は宿題を赤の他人にやらせたな
将来的には人をコキ使うのが上手な
プロジェクトリーダ、そして社長に
なる器だが、それに引き換え、466の
将来は人にアゴ使われるアホのまんま
で終わりだ。アホじゃRないよ。

472 :
助けてください。
#include<stdio.h>
int main()
{
int ii,i;
for(int i=0; i!=51; i++)
{
printf("%2d\t",i);
if (i = 50)
ii = i;
}
i = ii;
if (i = 50)
{
printf("Success\n");
}
return 0;
}
で、forの中のprintfが正しく実行されないようなのですが、
これってほっとくとバグになる可能性ありますか?
あと、この書き方ってやっぱり見直して書き換えたほうがいいんでしょうか・・・

473 :
スコープちがうやん。
http://www.geocities.jp/ky_webid/c/022.html

474 :
宿題は自分で解くように。
このような文法問題は宿題だ。

475 :
ビルドエラーメッセージをそのまま貼り付けろ。
どっかの中学生レベルの宿題は自分で調べるように。

476 :
>>458
#include<stdio.h>
#define NUMBER 5;
defuneは「コード置き換え」と思ってて良い。そこにブレークポイントを置いて実行できるところではない。
return も関数ではないから return (1) ではなくて return 1 で良い。


477 :
■調べてみようと感じる質問
メモリリーク、ヌルポ、スタックオーバーフロー、
意味不明コンパイルエラー、
■教科書嫁と思える質問
どう見ても宿題。

478 :
自己解決しました。
Basicの癖が残っていたようですね。
お騒がせして申し訳ありませんでした。
まさか比較してなかったとは。おお怖い怖い。

479 :
周りのプログラマーから聞いたのですが、「配列とポインタの違いを理解するといいんだよ」と
言ってました。「動きが違う」とかなんとか。 
簡単に言うとどういう意味なのでしょうか。わかる方いましたら教えてください。 




480 :
周りに理解してるプログラマーがいるのに、なぜわざわざ
ここで聞く?

481 :
あまりに熟練者(何十年のベテラン)たちなので、「ポインタって実際の業務だとココが難しいんだよね」
みたいな感じで、あまり詳しく教えてくれない雰囲気なので…
「どう言ったらいいんだろうなぁ…」みたいな感じです。
それで、こっちはvンカンプンになりました。


482 :
データ型が同じだったら配列もポインタも同じだろう?
そいつにキッチリ説明を求めたほうがいい

483 :
私がこの3週間勉強してわかったことと言えば、
・配列の名前を引数として関数に渡すと、先頭の要素のポインタとして渡される。
・配列の中身が変わるのを防ぐために const を付ける。
・変数の値を関数の中で変えて、main()に戻してそれを反映させたいときにポインタを使う。
このように理解してます。間違ってたらすみません。
配列とポインタはもっと奥が深いのだと思ってます。
>>482
たぶん、その人自身も何か勘違いしてるのかもしれませんね。


484 :
ごめん違ったみたい
ポインタは値を代入可能
配列はアドレス変更不可能

485 :
>>483
その3つはどれも文句なく正しい。自信持っていいよ。
>>479
そこをよく理解しないままCを使って間違ったことやる人間が多いというだけのこと。

486 :
C始めようと思ってるんだけど最初からPCに入ってるコマンドプロンプトじゃコンパイルできない?

487 :
>>486
コマンドプロンプトじゃコンパイルできないので
↓これでも試してみたら?
Visual Windows for BC++
http://rd.vector.co.jp/soft/win95/prog/se326602.html

488 :
>>487
インストールできなくて対処方法も試したけど効かなかったからvisual C++にしてみた
++でもCできますよね?

489 :
>>488
標準入出力だけのライブラリを使うことでC言語の開発環境のようにも動作さられる
ので問題ありません。

490 :
fatalエラーってどんな意味?
コンパイルさせて出力させようとしたんだけど出てきたんだが・・・
調べたけど難しい言葉で書かれてて意味不すぎる

491 :
>>490
fatalとは、fate(フェイトというアニメがあったはずだが)の形容詞形。
fate(運命)
fatal(運命的というよりは致命的との意味)
つまり、どうにもならないエラーですってこと。
がんばってねー

492 :
>>491
ありがと
どうにもならないエラー・・・
visual cpp2005のコマンドプロンプトでcl使うと出るんですよね

493 :
超初心者です 皆さんがC言語を学ぶのに使った参考書など、これは読んどけというものがあったら教えて下さい

494 :
>>493
IT書籍 「インド式プログラミングRル C言語入門 (上)」
http://www.e-chishiki.com/jpn/products/books/programming/let_us_c
こんなすばらしい本があったとはインド人もビックリの入門書
お薦め書籍
http://www9.plala.or.jp/sgwr-t/etc/books.html

495 :
>>494ありがとうございます

496 :
整数型配列 a[5]を宣言する。
配列aに適当な整数を代入する。
配列から最大値を求め画面表示する。

#include<stdio.h>
main()
{
int a[5];
int maxdata;
int i;
a[0]=12;
a[1]=3;
a[2]=40;
a[3]=10;
a[4]=30;
maxdata=a[0];
for(i=1;i<5;i++)
{
if(?)
{
maxdata=a[i];
}
}
printf("最大値:%d",maxdata);
}
?の部分がわからないのですが、誰か教えてもらえませんか?

497 :
プログラム板で聞いてくることにしました。
無駄レスすいません。

498 :
成績をつけるプログラムを教えてほしいです。
80点以上100点以内 A
65点以上80点未満  B
50点以上65点未満  C
0点以上50点未満   D
それ以外の整数に対しては「ありえない」と出す


499 :
printf()でポインタのアドレスを表示するときに、例えば、
printf("%p",(void*)ptr);
のように(void*)が必要な意味を教えてください。
今期の教授がスパコンのプログラミングとかやってる人のようで、うるさく言われるのですが、なぜ必要なのか理解できません。
よろしくお願いします。

500 :
>>499
教授の脳内コンパイラーは、(void*)でないと「致命的な
エラー」になる理由は不明だ。
(void)が必要な意味はということは、
間接演算子*と四則演算子*が同じであると、一目で意図が
読み易く検索容易にする意図があるのかも。
自分の教え子が書いたコードを発見しやすくする為かも。
その教授の馬鹿の一つ覚えのようなプログラミング作法の
理由は、その教授に尋ねるしかないだろう。
解らないのは、教え方が悪いことが原因なんですね、その
ような欠陥授業を国の税金で援助していることも問題だ。

501 :
void ポインタ - Google 検索
http://www.google.co.jp/search?hl=ja&rlz=1T4GTKR_jaJP296&q=void+%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF&revid=1512418162&sa=X&oi=revisions_inline&resnum=1&ct=broad-revision&cd=3

502 :
>>500>>501
ありがとうございます。

503 :
C言語どころか他のプログラミング知識も0に近い初心者なんですが、参考書は>>494に書かれているものでも大丈夫でしょうか?
プログラミング自体が初めてなら別の参考書の方が良いのでしょうか?

504 :
俺は柴田望洋氏の本がわかりやすかったょ。

505 :
>>500
でたらめ言うな。
>>499
アーキテクチャによっては、ポインタ型の種類によって大きさが違うということがあり得るため。
(ワードマシンでchar*系とvoid*だけほかより大きいとか)
%pはvoid*を引数に取る指定だから、確実にvoid*を渡すためにそのキャストは必要。

506 :
>>505
> アーキテクチャによっては、ポインタ型の種類によって大きさが違うということがあり得るため。
>(ワードマシンでchar*系とvoid*だけほかより大きいとか)
1ワードは32ビットのこともあれば、一般的に8bitを単位にすることもあるのでワードマシンの真意が不明だ。
「char*系とvoid*だけほかより大きい」って、そこだけアドレスビット数が大きいアーキテクチャかw
32ビットOSか64ビットOSか、またはターゲットOSが32ビットか64ビットかなどという問題はコンパイラーが
吸収してしまう問題で、高級言語の文法に関係しないのではないかと。

507 :
>>504
ありがとうございます。
ちょっと調べてみますね。

508 :
>>506
ごめん、自分でもそういうのに実際出くわしたことが無いんだけど。
http://www.kouno.jp/home/c_faq/c5.html#17
ここの5.17にそういう例が挙げられている。

509 :
質問です。
下のプログラムで階乗の逆数は求められますか?
main(){
int sum,i,n;
i=1;
sum=1;
while(i<=n){
sum=sum*1/i;
i=i+1;
}
}
仮に求められるとして、階乗の逆数の和はどう求められるのでしょうか?
お願いします。

510 :
C言語を勉強中のものです。起動すると、自動で閲覧の履歴をすべてコピーして任意のフォルダに貼り付けるソフトが作りたいんですけど、
どのような設計でいけますかね?


511 :
ナベアツ問題難しい

512 :
いや、何の閲覧?

513 :
質問です。エラー処理についてですが、perror()とかerrnoってどういう場合に使うのですか?
システムコールの異常でなくて、普通の処理で自分でエラーとして終了させたい場合にも使って良いのですか?
例えばこんなのもありですか?
int main(int argc, char *argv[]){
int a=atoi(argv[1]);
if (a!=100) {
perror("test");
exit(-1);
}
}
あと終了時にexit(-1)とかreturn -1とかreturn 2とかあったりして使い分けがよくわかりません。
errnoについても使い方を教えて貰えると助かります。

514 :
>>513
>あと終了時にexit(-1)とかreturn -1とかreturn 2とかあったりして使い分けがよくわかりません。
これ(返り値)は自分で決めること
通常、マイナス値は異常を示す
例題のプログラムの場合、返り値が-1だった場合、引数が100ではなかったってことが分かる

515 :
通常はマイナス値で異常を示すということですね。
異常で終了させたい場合はexit(-1)もしくはreturn -1とかが普通ということですよね。
関数の戻り値はメイン側に値を返しますがこれらの場合はOSに返すと思います。
これらの値はどうやれば参照出来るのでしょうか?

516 :
ぐぐったら色々出て来た。
exitとreturnの違いわかりました。
returnは関数の呼び出し元に値返却、
exitはプロセス呼び出し元(=OS)に値返却ですね。
returnにしてもexitにしても、正常終了なら0を返却。異常終了ならそれ以外を指定するようにする。
慣用的には、return -1もしくはexit(-1)だがexitについてはexit(1)と書く人も。(どっちでもOK)
また、stdlib.hで定義されているEXIT_FAILUREマクロを使ってexit(EXIT_FAILURE);としてもOK。
なんか整理出来て来た。ここまでは認識あってますか?
で、OS返却時の値はどうやれば参照出来ますか?

517 :
>>516
unix系OSでは(例えば)bash上でecho $?コマンドを実行すると直前に実行したプログラムの戻り整数値が表示される・・・
っていってもさっぱり分からんよな。
windows上でfirefox.exeというプログラムの戻り値を知りたいのなら、
#include <stdlib.h>してprintf("%d\n",system("firefox.exe"));などとするとfirefox.exeが終了したときの戻り値が表示される、と思う。
system関数の挙動は上記の説明で明らかだよね?新しい疑問が生まれたならまたどうぞ。

518 :
>>517
質問です。下記のプログラムを実行してみました。
int main(int argc, char *argv[]){
int a=atoi(argv[1]);
if (a!=100) {
perror("test");
exit(-1);
}
}
(1)100を引数として渡した場合
echo $?で値を参照すると0になってました。return 0;をしていないのに0になるのはなんででしょうか?
main関数の戻り値はintなのにreturnを指定しなくても警告も出ないのはなんででしょうか?
(2)100以外の整数を引数として渡した場合
echo $?で値を参照すると−1になるかと思いきや(exit(-1)で抜けているため)255が表示されました。
なんででしょうか?
また、実行結果は test: Undefined error: 0と標準エラー出力されましたがこのUndefined error: 0というのは
どういう意味なんでしょうか?(これはperrorに関する質問かも知れませんが)

519 :
このif文はどういう意味なんでしょうか?
if (strlen(str1) == 10 && str1[9] != '\n') {
while (getchar() != '\n');
}

520 :
>>518
以下は自分でも良く理解してない事なので眉に唾を付けて読むこと
(1)return 0;をしていないのに0になるのは"そうなるようにコンパイルされるから"としかいい様がない。
例としてgccを使ってglibcとリンクさせると
1:プログラムを実行するとまずglibc内のある関数が呼び出される
2:その関数がmainを呼び出す
3:mainが終わったらもとの関数に戻ってmainの不始末の尻拭いをする
という動作をするらしいが、処理系依存の話
警告について:例えばgccなら-Wallオプションを付けたら警告してくれると思うが、その他のコンパイラでも出そうと思えば警告は出してくれるのでは
(2)そもそもexit関数の動作は引数がEXIT_SUCCESSでもEXIT_FAILUREでもない時(ここでは-1)は処理系依存、らしい
glibcのexitは(引数 & 255)が返されるとのこと。そしてこれは結果と合致している(-1の2の補数表現は全ビットが1)
perrorについて:perrorは大域変数errnoを参照して標準エラー出力への振る舞いを変えるらしい、
errno変数は開始時は0で、標準ライブラリでエラーを起こしたり(存在しないファイルを読もうとしたり)しない限り0、
perrorはerrnoが0である限り現在の状態は正常である(0は定義されたエラーではない)と標準エラーへ出力するとのこと

521 :
C言語の最新規格C99では、main関数のみ特別に
returnを省略するとreturn 0;が関数末尾にあったかのように扱うことになっている。
gccはオプションで指定しないとC99の機能は使えないが、
これに関してはそうしたところで古い規格に適合しなくなるわけではないから、
C99の指定の有無に関わらずreturn 0;が補われる挙動になっていると推測される。

522 :
教えてください
unsigned int POINT1=0;
unsigned int POINT2=0;
unsigned int POINT3=0;
unsigned int POINT4=0;
unsigned a,b,c,d,e,f;
と宣言部で宣言して、
if(e==1 && d==0){
a++;
POINT1 = a;
e=d;
if(a==0x0a){
a=0;
b++;
POINT2 = b;
}
if(b==0x06){
b=0;
c++;
POINT3 = c;
}
if(c==0x0a)
c=0;
f++;
POINT4 = f;
}
if(f==0x06)
f=0;
}
と、割り込みの関数内で記述したところ
warning: type defaults to 'int' in declaration of 'POINT1'
error: conflicting types for 'POINT1'
error: previous definition of 'POINT1' was here  ←宣言部の行のエラー
というエラーが出たのですが、
何の矛盾なんでしょうか?


523 :
bufにaの内容を入れるにはどうしたらいいですか。
int main(){
char buf[256];
char *a="あいうえお\n";
&buf=a;//<-エラー
}

524 :
>>523
strcpyだったかな?文字列コピーの関数使いなされ。

525 :
おーおっけ有り難う

526 :
goto-lineってどうやるんでしたっけ?
ググってみたんですがM-xというのがどう入力するのか分かりません

527 :
>>526
http://ja.wikipedia.org/wiki/Goto%E6%96%87

528 :
ひとつ気になって仕方がないことがあるのですが
printf("value=%d",x,y:1,2); の様な感じで  (記述は間違ってると思う
%dなどへ渡す値を状況によってif文のように変化させる
マクロ!?のような機能のことは何というのでしょうか?

529 :
もしかして条件演算子

530 :
test

531 :
Visual C++2005 Express Edition
を使って猫でも分かるプログラミングに挑戦しようとしたのですが、最初でつまづきましたw
最初の設定はどのようにすればいいのでしょうか?

532 :
むりぽ

533 :
すみません、Cのことで聞きたいのですが
ret = rfile(〜・・・・)
この、rfileの使い方がいまいちよくわかりません。
調べてもでてこなくて・・・
教えていただけませんか?

534 :
C言語プログラミング認定試験の1級か2級もってたら、経験なくても就職できますか?

535 :
>>534
資格の有無や経験の有無が重要で即戦力が必要な場合は難しいけど、
ほかに取り柄があれば資格や経験が無くても大丈夫だよ。
「芸は身を助く」という。教えてクン以外に、なにか芸はないのか。

536 :
派遣切りで仕事探してるけど見つからない。パソコン関係の仕事は
したことないけど、不況なのにいっぱいある。興味がある分野だし
やってみたいけど、資格も経験もないのに申し込んでも断られるだけ。
だから資格だけでもとろうかと思案中です。情報処理と合わせて取ったら
可能性はありますよね?

537 :
           サァ シィノ マターリノ タメニ
           色ンナ スレニ 貼ルンダヨ♪

                \ /
                      シカタナイカラ シィノ オシリサンノ
           〜γ⌒ヽ∧∧   ニホイヲ カガセテ アゲルワ♪
            .( * ) ,i゚ー゚*)  アリガタク オモイナサイ♪
             U U"ヽ)ヽ)
 今ならもれなく、しぃのおしりの臭いがかげる掲示板
 しぃのマターリ掲示板
 http://jbbs.livedoor.jp/computer/22654/

538 :


539 :
>>534
そんな無名の資格、役立たねえ。
>>536
基本情報だったら猿でも取れるぞ。
ソフ開で、タクシーに原付免許持っていくのと同じくらい。適当だけど。

540 :
あの、今本当に困ってます。
¥n
float
printf
scanf
この文字の意味を教えてください

541 :
>>540
gugure

542 :
age

543 :
>>540
【¥n】 new lineの略で、新しい行は改行を意味する制御文字
【float】 飛蚊症で浮遊している虫のような小数点表示
【printf】 fはフォーマット(書式)の略で、書式に従ったプリント(出力)命令
【scanf】 fはフォーマット(書式)の略で、キーボードからのキー入力を走査して書式にしたがって処理する命令
このprintfとscanfの二つは、標準入出力関数としてstdio.hで定義された動作を行う関数命令
float 変数を有効桁数6桁の実数型の数値として解釈する変数の前に前置したり、変数の解釈
のしかたを宣言するときに変数の前に前置するC言語で予約された型名
printf
http://www.nmn.jp/~hidai/c/
標準入出力関数
http://www9.plala.or.jp/sgwr-t/c/sec05.html

544 :
HD性能を測定するbonnie++ベンチマークの説明文で
・putc()による書き込みはstdio命令とOSによるファイルスペースの確保を測定
・write(2)による書き込みはOSによるファイルスペースの確保を測定
ってあるんだけど、
putc()のstdioのオーバヘッドって、putcが書き込みの際にunsigned char型
に型変換することのオーバヘッドって意味かな?

545 :
fwriteで書き込んだ複数ファイルを結合したいのですが、どうすればいいのでしょうか?
http://www.dotup.org/uploda/www.dotup.org0450.c.html
例えば↑のソースでいうところのa, b, cの3ファイルを順番に結合してdというファイルを作成したいです。

546 :
dを新規に作って順に書き出す

547 :
Winnyの情報流出を管理・指導する国のIPA職員 岡田賢治 主任が違法ファイルDLしまくり感染して流出したドキュメント類。
嫁以外の女とのR写真や、R児童ポルノ、違法アプリ所持、違法アプリバラ蒔き証拠など大量に流出。
★郵政省(今の総務省)、日立製作所、博報堂、味の素・・・と凄い流出規模!
http://ruru2.net/jlab-ruru/s/ruru1232764892388.jpg
★本人は著作権無視で違法ファイルダウンしまくりのくせに、著作権を勉強して知的所有権管理資格持ってるw
http://ruru2.net/jlab-ruru/s/ruru1232767964337.jpg
★全契約先でこの契約書結んでいるが、秘密保持、情報返還・処分義務の立派な契約違反。
http://ruru2.net/jlab-ruru/s/ruru1232767993881.jpg
★西武百貨店社員6155名分の個人情報を違法に自宅に持ち帰り流出。
http://ruru2.net/jlab-ruru/s/ruru1232768015222.jpg
★楽天ショップから個人情報データを違法に自宅に持ち去り大量に個人情報流出!
http://ruru2.net/jlab-ruru/s/ruru1232768041252.gif
★大量のソニーやマイクロソフト等の大手企業勤務者の流出個人情報! 自民党とか衆議院とかもある。
http://ruru2.net/jlab-ruru/s/ruru1232768065918.gif
★IPAは自身の流出は画像しか無いと断言しているが大嘘で、IPA役員資料とかも流出している。(IPA資料を無断で自宅に持ち帰り)
http://ruru2.net/jlab-ruru/s/ruru1232768123179.jpg
★三井リハウス(株)の入居者の口座番号や入金金額等のデータベースもIPA岡田賢治主任が流出
http://ruru2.net/jlab-ruru/s/ruru1232768311436.gif
国の情報処理推進機構 IPA専門職員として違法アプリばら蒔きの大問題犯罪証拠も流出。
違法アプリやシリアルキーを周囲にわざとバラ蒔いている。(現在も違法ATOKを使用しており、長年違法アプリを日常的に使用していた可能性大)
★Micro Soft VisualC++の違法シリアルキーを知人に教えたメール
http://ruru2.net/jlab-ruru/s/ruru1232768092277.jpg
★メールソフトRimArts社 Beckyの違法シリアルキー等、内容から見ても長年かなり広範囲にバラ蒔いていたようだ
http://ruru2.net/jlab-ruru/s/ruru1232768242947.jpg

548 :
別んとこで聞いてきます

549 :
以下のように乱数を発生させて2次元配列data0に格納するプログラムを作成したのですが、
関数を呼び出す毎に同じ値が出力されます。
一回目
6
38
11
二回目
6
38
11
三回目
6
38
11
といった感じです。
乱数シードの初期化がうまくできていないのが原因だと思うのですが、
なかなかうまく行きません。どう修正したら良いでしょうか?
for(j=0;j<LMEDS;j++)
randum(data0[j]);
void randum(int *number){
int i,j;
int flag;
//size = sizeof(number) / sizeof(int);
flag = 0;

srand(GetTickCount());
//srand((unsigned int)time(NULL));
number[0] = rand();
for(i=0;i<LMEDS_SELECT;){
number[i] = rand() % I_NUMBER;
for(j=0;j<i;j++)
if(number[j]==number[i])
flag = 1;
if(flag==1){
flag = 0;
continue;
}
else
i++;
}
};

550 :
質問です
#include <stdio.h>
int main(void)
{
int magic; /* マジックナンバー */
int guess; /* ユーザーが当てる */
int i;
magic = 1325;
guess = 0;
for (i = 0; i < 10 && guess != magic; i++) {
printf("考えた数字を入力してください: ");
scanf("%d", &guess);
if (guess == magic) {
printf("正解!");
printf(" %d はマジックナンバーです。\n", magic);
}
else {
printf("残念、違います。");
if (guess > magic)
printf("さらに小さい数字です。\n");
else
printf("さらに大きい数字です。\n");
}
}
return 0;
}
こんなプログラムのguess = 0;の意味がわかりません。

551 :
flightのメモリを確保して1文字ずつtargetをコピーしながら
insert 1文字をtargetにコピーし、insertが終端に達したら
flightからtargetに文字を帰すんですが、targetの終端を
うまく入れられません? どこが悪いのでしょうか?
/* targetバッファ文字列の先頭にinsertを挿入,(終端には\0を強制挿入) */
/* 戻り値:新しい文字列の長さを返す,エラー:<0 */
static int shiftCopy(char *target, int bufsiz, char *insert)
{
  char *flight, *regress; int count=0;
  flight = (char *)malloc(sizeof(char)*bufsiz--);
  memset(flight,'\0',sizeof(flight));
  regress = flight;
  while(*insert && count<bufsiz){ /*挿入先を退避させつつ先頭挿入文字を格納*/
    if(*target){
      *flight++ = *target;}
    *target++ = *insert++; count++;
  }
  while(*target && count<bufsiz){ /*挿入先を退避させつつ退避文字帰還*/
    *flight++ = *target; *target++ = *regress++; count++;
  }
  while(*regress && count<bufsiz){ /*退避文字の帰還*/
    *target++ = *regress++; count++;
  }
  *target='\0';
  free(flight);
  return count;
}

552 :
自己解決しました。
/* targetバッファ文字列の先頭にinsertを挿入,(終端には\0を強制) */
/* 戻り値:新文字列の長さ, ERR:<0 */
/* <※危険※>: targetが空のとき,0初期化してないと無意味になる */
static int shiftCopy(char *target, int bufsiz, char *insert)
{
  char *flight, *regress;
  int count=0;
  flight = (char *)malloc(sizeof(char)*bufsiz);
>> memset(flight,'\0',bufsiz); /*初期化サイズの誤り,ポインタの長さを初期化していた*/
  regress = flight;
  bufsiz--;    /*targetパッファからはみ出ないため*/
  while(*insert && count<bufsiz){ /*挿入先を退避させつつ先頭挿入文字を格納*/
>>   if(!*target){ /*※ '\0'文字の後は不定であることを考慮してなかった*/
>>     *(target+1)='\0';
    }else{
      *flight++ = *target;
    }
    *target++ = *insert++; count++;
  }
  while(*target && count<bufsiz){ /*挿入先を退避させつつ退避文字帰還*/
    *flight++ = *target; *target++ = *regress++; count++;
  }
  while(*regress && count<bufsiz){ /*退避文字の帰還*/
    *target++ = *regress++; count++;
  }
  *target='\0'; free(flight); return count;
}

553 :
教えてください。

borlandC をコマンドラインで使っています。
実行ファイルへプロパティのバージョン情報タブを付けたいのですが、
どのようにしたら良いですか?

554 :
nyuumonnkennpou@yahoo.co.jp
ハッキングして個人情報取得できませんか?

555 :
>>550
疑問に思うならその行を削ってみるといい。動きが変わらなければ無くても構わない。

556 :
>>550
guess = 0;
曖昧さがないようにゼロで初期化しているだけだ。
宣言しただけでは実体は作成されないので、初期値による初期化を行っている。
iはforループの開始時にゼロで初期化されている。
何にもユーザーが値を入れないでEnterキーを押したときに初期化でゼロをもし
いれていないときにゼロではなくゴミが入っている実装も考えられるから確実
にゼロで初期化する必要があるのだろう。

557 :
>>555
動きはかわりませんでした。
>>556
理解できました!!!guess = 0;
プログラム実行開始時に変数を初期化しているんですね
magic = 1325;
が固定された値なのになんて悩んでいました。
ようやく進めます
>>555>>556さんレスありがとうございました。

558 :
>>544
writeでは1度の呼出で、何バイトでも一気に書き込みできるが、
putcでは、1度に1バイトずつしか渡せないという違いがある。

559 :
てすと

560 :
プログラムはまったくの初心者ですがご伝授の程、宜しくお願いします。
現在、Pro*cの開発にて、2日前に作成されたファイルを削除するという
仕様をどうやってプログラミングしていいか悩んでいます。
ネットや本で調べたのですが、行き詰っています。
タイムスタンプを取得してそのファイルを削除が出来るのでようか?
宜しくお願いします。

561 :
1年間悩んでます。お力をお貸しください。
アークザラッドUというタイトルのゲームの、ゲーム画像(歩行画像など)を抽出したいのですが、
かれこれ1年ほど経ちますが、なかなかうまくいきません。
*もちろん抽出した画像は個人範囲内で利用するつもりです。
◆試してダメだったこと
 ネット上からダウンロードできる、ありとあらゆる抽出系ツールを試した。
 (ちなみに他のゲームはほとんど抽出可能)
◆教わったこと
 ・アークザラッドUは独自の画像形式を使っているから抽出できない。
 ・PS上で表示されてるということは絶対に摘出はできるはず。
◆抽出は不可能ではないということを知ったとき
 2ちゃんねるで質問したところ、
 ある方が実際にキャラクターの歩行画像を抽出して
 私が立てたスレにアップしてくださいました。
スクリーンショットじゃ嫌なんです。どうか皆さん、お力をお貸しください。

562 :
791 :赤西仁:2009/02/13(金) 22:36:56 ID:Ch37WsOG
1年間悩んでます。お力をお貸しください。
アークザラッドUというタイトルのゲームの、ゲーム画像(歩行画像など)を抽出したいのですが、
かれこれ1年ほど経ちますが、なかなかうまくいきません。
*もちろん抽出した画像は個人範囲内で利用するつもりです。
◆試してダメだったこと
 ネット上からダウンロードできる、ありとあらゆる抽出系ツールを試した。
 (ちなみに他のゲームはほとんど抽出可能)
◆教わったこと
 ・アークザラッドUは独自の画像形式を使っているから抽出できない。
 ・PS上で表示されてるということは絶対に摘出はできるはず。
◆抽出は不可能ではないということを知ったとき
 2ちゃんねるで質問したところ、
 ある方が実際にキャラクターの歩行画像を抽出して
 私が立てたスレにアップしてくださいました。
スクリーンショットじゃ嫌なんです。どうか皆さん、お力をお貸しください。

563 :
>>560
タイムスタンプを取得してそのファイルを削除するといいよ。

564 :
NULLを検出した時にbreakしたいのですが、認識していないようで・・・
分かる方、対処法をお教え願います
csvbuff = strtok(buff,",\n");
printf("%s\n",csvbuff);
if (csvbuff == '\0'){
break;
}
else{
change_tb(flpcnt,csvbuff);
}
//カンマ区切り
for(flpcnt=1 ; flpcnt<=16 ; flpcnt++){
csvbuff = strtok(NULL,",\n");
if (csvbuff == '\0'){
flpcnt = 17;
break;
}
else{
printf("%s\n",csvbuff);
change_tb(flpcnt,csvbuff);
}
}

565 :
ナル文字 と NULLポ
p == '\0' は '\0' が頑張ってキャストされて p が持つ NULL に一致する事が "あるかもしれない" 程度
p == NULL は p が NULL の時一致
if(char *p = buff; *p != '\0', p < buff + buf_len; ++p) するでしょ?

566 :
いや一致することは 100% あり得んな

567 :
#include <stdio.h>

main()
{
puts ("My first program!!") ;
}
でコンパイルしても'○○'は内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されませんって出るのはなんで?

568 :
putsじゃなくてprintfにしてみたら?

569 :
>>568
できたありがとう

570 :
今日からC言語の勉強を始めました。よろしくお願いします。
早速ですが質問です。MINGWを使ってるんですが
example1.cというソースファイルを作成した後に、「ls」でそのソースファイル
を呼び出して、「gcc example1.c」と入力してコンパイルしようとしたんですが
「sh: gcc: command not found」と表示されてしまいます。
ちなみに、example1.cの中身は
main()
{
}
です。本来なら何も表示されないはずなんですが・・・;;
どなたか原因を教えて下さい。

571 :
>>570
MINGWをよく知らんのですが
>「sh: gcc: command not found」
gccが見つからんから知らねとゆーてる。
ちゃんとインストールされているか、パスが通っているか確認してみては?

572 :
#include<stdio.h>
#include<math.h>
FILE *file;
int main(void){
int i,j;
double x,y,z;
for(i=0;i<=1000;++i){
x=0.3*i;
for(j=0;j<=1000;++j){
y=0.3*j;
z=sqrt(1+x^2+y^2);
fprintf(file,"%f %f %f\n",x,y,z);
}
}
fclose(file);
return 0;
}
z=sqrt(1+x^2+y^2);の部分で浮動小数点の不正な使用
というエラーが出るのですが、どうすればいいですか?

573 :
>>572
C言語での、べき(^)演算子は〜乗として使うわけではない。
http://www5c.biglobe.ne.jp/~ecb/c/05_04.html
今回の場合は、
z=sqrt(1+x*x+y*y);
とするのが正解。
または、
z=sqrt(1+pow(x,2)+pow(y,2));
とするのが正解。

574 :
C♯とCプラプラはそんなにちがわないですよね。

575 :
>>574
まるで別物。

576 :
>>573
あざーす
まったく、そのとおりでした

577 :
学校の課題を手伝ってください。
キューを利用して、プリンタのプリントキューを再現したプログラム(以下に要点を記載)を作成しなさい。
"1”を入力するとキューにデータが追加され"2"を入力するとキューからデータが取り出される
キューが満杯になったり、空になったりした際はその旨をメッセージで表示する。
また、以下の関数を作成し、使用しなさい。
vaio enqueue(int val)キューにデータを追加する
vaio dequeue() キューからデータを取り出す
vaio queue_print()キュー全内容を表示する
以上ですお願いします。


578 :
vaioではなくvoidでしたすいません。

579 :
>>577
マルチポスト乙。
http://pc11.2ch.net/test/read.cgi/tech/1235918203/

580 :
PCサロン板にプログラム言語Cのスレがあったなんてw

581 :
>>580
この板ができた経緯が難民収容で、何でもありだったんだよ。

582 :
>>581難民かw

583 :
test

584 :
std::vector<double> scoreのメディアンを取りたいとき、median(score)としても駄目でした。
こんな関数ありますか?

585 :
あるソースにこんなことが書いてあったのですが意味がわかりません
どういう意味でしょうか
std::istream& read(std::istream&);

586 :
>>585
std::istreamを継承する全てのオブジェクトを受け取れるようにしてあるもの。
例えば
std::string global_str;
として、もしも
void read()
{std::cin >> global_str;}
だったとするとglobal_valに標準入力から文字列を格納するわけだが
これだとstd::cinからしか受け取れない。
そこで
std::istream& read(std::istream& is)
{is >> global_str;
return is;}
とすることでstd::istreamを継承する全てのオブジェクトから読み込めるようにしてある。

普通はistreamじゃなくてostreamで見かけるけどね。

587 :
>>584
<algorithm>のnth_elementを工夫して使えばいいと思う。
要素数が奇数のとき
std::nth_element(score.begin(), score.begin() + score.size() / 2, score.end());
double m = score[score.size() / 2];
偶数のとき
std::vector<double>::iterator center_right = score.begin() + score.size() / 2;
std::nth_element(score.begin(), center_right, score.end());
std::nth_element(score.begin(), center_right - 1, center_right);
double m = center_right[0] + center_right[-1];

588 :
>>585
もし、それがCだと思っているなら、違うと否定しておく。
C++だよ一応念のため。

589 :
>>588
ああ、
質問者の質問の意図は
そう言う意味だったのか。
素で答えちまった。。。

590 :
標準関数について気になっていろいろ調べていたところ、
printfのような標準関数がstdio.hなどで宣言されているのはわかったのですが、自作した関数のように
int ***(---)
{
.....
}
と定義(?)されているのが見つかりません。
標準関数は宣言のみでできているということなのでしょうか?
違うなら、どこで定義されているのか教えてください。お願いします

591 :
>>590
ソースがある場合もあるし
コンパイルされたライブラリ(バイナリ)でどっかにある場合もある。
環境を書け。

592 :
OSがVistaで、コンパイラはMicrosoft Virtual C++ 2008 です

593 :
#include <stdio.h>
#include <math.h>
int main(void)
{
int i;
double exp(double x);
int x=-1.25*exp(-0.4*i)+1.25;
for (i=0; i<=20; i++)
{
printf("%dです:",x);
}
return(0);
}
x=-1.25*exp(-0.4*i)+1.25 のiに0〜20まで代入した値を出したいのですが
1ですと20回出るだけです。
何が違うのか教えてください。お願いします。

594 :
>>593
int x=-1.25*exp(-0.4*i)+1.25;
この一文でxは整数だから、小数点以下切り捨てで代入される。
なのでxの型を変更すべし。doubleとかに。

595 :
>>594
doubleでやってみたらできました!
本当にありがとうございました。

596 :
>>595
あと強いて言うなら
return(0);

return 0;
でいいんだよ。
また、for (i=0; i<=20; i++)
は  for (i=0; i<=20; ++i)
の方が効率がよい。
(ただし「理論上わずか程度」ってぐらいだが。コンパイラの最適化もあるし。)

597 :
ふむふむ、勉強になります
あと、この結果表示を縦並びにするのはどうすればいいですか?

598 :
>>597
縦並び?
どういうこと?
改行したいと言うことかい?
改行なら
"%dです:"

"%dです\n"
にすればよろしいかと思いますが。

599 :
ちょっと知恵もしくは答えを教えてほしいプログラミングの問題があるんだ。
u,nは整数で
1000>u>1,1000>n>=3 x>0,y>0,z>0 d>=0 の条件下で
d=u^n-max{x^n+y^n+z^n}
このときdが最小となる(x,y,z)の組を求めよ
ちょっとサンプルデータな
u n d x y z
2 3 5 1 1 1
6 3 0 3 4 5
7 4 224 4 5 6
98 3 8 2 48 94
76 4 733 17 47 73
54 5 103717 13 47 47
123 3 0 6 51 120
456 3 0 6 51 120
もしかしたらデータずれてるかも

600 :
で、d=・・・ってところのプログラミングがさっぱりなんです。
いろいろ考えたけど、どうしても規則性がみつけられなくて・・。
たのんます

601 :
VC++使ってるんですが、
int a = 12, b =100;
int i = (printf("%d",a), a);
みたいにすると、ディスプレイに12と表示されて、さらにiにはbと同じ値の100が入っていました
これってCの規格通りなのでしょうか、それとも処理系の特性によるものなのでしょうか?

602 :
間違えました
>>600の3行目は int i = (printf("%d",a), b); です

603 :
>>601
規格通り。
関数呼出の引数を並べるとき以外で、「式」の中に現れるカンマは、順次演算子というれっきとした演算子の1つ。
左から順に演算を行い、右側の値を結果とするというもの。
printf(), aを取り囲む括弧は(1 + 2) * 3などと同じように式を括るための括弧。

604 :
【国際】 「中国でデジタル家電など売りたいなら、ソースコードを強制開示」 中国、制度強行へ…国際問題化の懸念★3
http://tsushima.2ch.net/test/read.cgi/newsplus/1240536789/
【知的財産】中国:ITソースコード強制開示強行へ・制度を5月に発足…国際問題化の懸念 [09/04/24]
http://anchorage.2ch.net/test/read.cgi/bizplus/1240524654/

605 :
#include <stdio.h>
void main()
{
printf("Hello, World!");
return 0;
}
すいません。Visual C++2008 を使ってこのコードで、
「デバッグなしで開始」とすると・・・
1>------ ビルド開始: プロジェクト: test, 構成: Debug Win32 ------
1>コンパイルしています...
1>cl : コマンド ライン error D8045 : C ファイル '.\test1.c' を /clr オプションと共にコンパイルできません
1>test - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
と出てしまいます。どうしたらエラー0になりますでしょうか?

606 :
>>605
プロジェクト作るときにWin32コンソールプロジェクトを選べ。
あとint main()な。

607 :
PCはXPでcpad for LSI C-86使ってるんですが
exitがよくわからないです
プログラム
#include <stdio.h>
int main(void)
{
exit(1);
}
コンパイルメッセージ
関数exitは宣言されていないのでint型とみなす。

608 :
>>607
#include<stdlib.h>

609 :
お前らごときがC言語なんか使うな
Rー言語でも使ってろw

610 :
borland c++ compiler 5.5において以下のプログラムをコンパイルした所エラーは出ないのですが、
windowsプロンプト上の実行結果に何も表示されません。
どなたか解決方法についてご教示願います。
#include<stdio.h>
FILE *fp;
char a;
int s;
int main(void)
{
fp = fopen( "test.txt", "r" );
while ((s=getc(fp)) != EOF) {
if(s==0) printf("B");
}
fclose(fp);
return 0;
}

611 :
追記
test.txtの内容は、2進数文字列です。

612 :
>>610
s=='0'とかs=='1'にしたいんじゃないの?
文字と数値の区別ついてる?

613 :
>>612
動きました。有難うございます。
文字を扱うのは初めてだったので、躓いていました。

614 :
なんでエラーになるのでしょうか?
#include <iostream>
class Test {
private:
Test *p;
public:
Test* GetP() {
return p;
}
};
int main() {
Test *t = new Test();
t->GetP() = NULL;
return 0;
}

615 :
Test*& GetP() {

616 :
ありがとう でも理解できひん なんでポインタの後に参照が!?
教えて

617 :
>>614-617
C++スレ行けよw

618 :
>>614-617
てことはおまえもいくってことか

619 :
Test** GetP(){
return &p;
}
*(t->getp())=NULL;

620 :
メモリリークについては誰も突っ込まないのか?

621 :
何でエラーになってしまうのでしょうか?

int na; /*身長(整数値)*/
double ba; /*標準体重(実数)*/

printf("身長を入力してください:");
scanf("%d", &na);

(double)ba=(na-100)*0.9; /*キャスト*/

print("標準体重は%5.1fです。\n" ba);

return(0);

622 :
>>621
baをキャストしてどうする。
途中計算をキャストしろ。

623 :
C言語の挿入ソートの比較回数について質問です.
↓は一応挿入ソートで正しくソーティングできています.
void inssort(int data[], int n) {
  int i, j;
  for (i = 1; i < n; i++){
 j = i;
    while(j >= 1 && data[j-1] > data[j]) {
    swap(&data[j], &data[j-1]);
    j--;  
    }
  }
}
 大域変数compareがあるとして、どこにcompare++;を入れれば正確くに比較回数を測ることができますか?
while関数の前におくと比較回数が固定になってしまいますし,
while関数の中において,整列済みのデータをソートしようとすると比較回数0になってしまいます・・・orz

624 :
do{
scanf("%d",&va[i]);
scanf("%d",&vb[i]);
scanf("%d",&vc[i]);
scanf("%d",&vx[va[i]][vb[i]][vc[i]]);
printf("続けますか?(続ける1 終了する0)"); scanf("%d",&f);
j++;
i++;
}while(f==1)
for(i=0;i<j;i++){
printf("%d",vx[va[i]][vb[i]][vc[i]]);
}
こんな感じで、
vx[ この中に更にva[i]をいれる]
ってできますか?


625 :
「cの入門の入門」て本のP58 「自作プログラムを保存するディレクトリを作る」て項目がありまして、やってみたのですが
C:\Documents and Settings\sela>
C:\>mkdir Source
サブディレクトリまたはファイル Source は既に存在します
C:\>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は ****-**** です
質問1 テキストには「サブディレクトリまたはファイル Source は既に存在します」との表示は無いのですが
この表示がでるのは問題あるのでしょうか?
質問2 そして、C:¥>dirの後はずらずら表示された中に
2005/01/DD HH:MM <DIR> Sourceという1行がないとダメみたいなんすけど
上記の通り
「ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は ****-**** です」
どのようにすればいいのでしょうか? 
宜しくお願い致しますm(__)m

626 :
>>625
それC言語と関係無いから、エラー出ても関係無いよ。
重要なことは、プログラムを打ち込んで実行できること。
MS-DOSは出来る必要がない。

627 :
>>625
BCC developerでもいれておけばいい。 ウェブで調べたら導入できる。

628 :
>>625
全然C言語の問題ではない。
だが簡単でいいから初歩のコマンドラインでの操作を
出来るようにしておいた方が、この後 色々やりやすいかと。

629 :
ありがとうございます。m(__)m
書籍名間違ってました。「cの入門の入門」誤 → 正「C入門の入門(翔泳社)」
BCC developerていうのを初めて聞きました。帰宅後に調べてみます。
ありがとうございました。m(__)m

630 :
>>623
比較回数って、ソートするべき値(data[j] と data[j-1] )の比較を何回やったかを知りたいんだよね。
だったら、whileの前に置いた比較回数固定が正しいんじゃないの。
そのソースでは、データ数が同じなら比較回数は変動しないよ。
頭からケツまで丁寧に全比較だもん。

631 :
すみません。
構造体の先頭アドレスから、その構造体の最初のメンバのアドレスを取得する方法はないでしょうか?

632 :
>>631
構造体のポインタとその最初のメンバのポインタの値は同じ。

633 :
>>632
ありがとう。
でも型が違うから、そのまま流用しようとすると当然エラーになる。…。

634 :
>>633
どういう風に流用するつもりなの?
乱暴な答えはキャストだけど。

635 :
>>634
重ね重ねありがとうございます。
単純にchar型でキャストすれば良かったのか…!
そもそもは、構造体の各々のメンバ(すべて同一サイズのchar型)に対して、
妙な値が入っていないか確認したかったのです。
ただ、メンバの数がかなり多くて、ひとつひとつメンバ名を書くのが手間でした。
なので、for文か何かでまわす方法が無いか探してました。
最初のメンバのポインタが指定できれば、あとは1メンバごとに
メンバのバイト数分インクリメントしていけば指定できるので。

636 :
「%5.2f とあったら表示する桁数は全部で(少数点も含めて)5桁
少数点以下は2桁です。1.26は1.26と表示されます。
全部で5桁なのでまだ1桁あまっています。」
とテキストに表示されてるのですが、
1.26は3桁なので2桁あまってると思うのですが、
「何故1桁あまる」のが正解なのか分かりません。
教えて下さい。

637 :
↑の質問した者です。
「1.26」の小数点も桁に含むから4桁と解釈するのでしょうか?

638 :
>>635
charでキャストはない。*charならありえるが。
>最初のメンバのポインタが指定できれば、あとは1メンバごとに
>メンバのバイト数分インクリメントしていけば指定できるので。
パディングがある可能性があるからそれはダメだ。
現状の
struct s{ char hoge[10]; char fuga[10]; ...

struct s{ char A[N][10];};
と変更すればいいと思うが。
今のデータ構造は二次元配列とみなせるんでしょ?

639 :
>>638
パディング…!
今のテーブルを2次元配列で宣言しなおし、
s.A[0]や、s.A[1]とメンバを指定すればいいということですか?
それならうまくいきそうです。
ですが…。この構造体、メンバ名を使っていろんなところで呼ばれているのです。
構造体を宣言しなおすとなると、結局ソース全部を手作業修正→ミス発生の可能性が高くなります。
大人しくメンバ名を書き並べて言ったほうが安全な気がしてきました。
アドバイスありがとう orz

640 :
test

641 :
映画ターミネーター見た?
始まりのところに、C言語ソースプログラム 映ってるよね。

642 :
float a,b;
a=6.8;
b=2.3;
printf("%f", a * b * 2.0);
結果
31.280001
最後の1が気持ち悪いんですが
なんでこうなってしまうんでしょうか?
実数の複雑な計算をする時は
どう回避するんでしょう??

643 :
>>642
精度の問題。
>実数の複雑な計算をする時は
>どう回避するんでしょう??
完全な回避は無理。
擬似的に精度をむっちゃくちゃ上げてごまかすしかない。
とりあえず君の場合
float a,b;

double a,b;
と書き換えてみて。

644 :
>>643
ありがとうごさいます。
こういうものなんですね。
自分のコンパイラが壊れてるのかと不安でした。。

645 :
>>644
大丈夫、初心者のうちはコンパイラのせいなんてことはまずないから。
言語の仕様の問題。
どーかんがえてもコンパイラのせいだろ!と思っても突き詰めてみると
自分の知識不足だったりする。
・・・もっとも、さらに高度になってくると本当にコンパイラのせいだったり
するのだがね。

646 :
アクションゲームプログラミングって本を参考に
プログラミングしようと思ってるんですけど
ひとつ疑問が、
Directx SDKのバージョンが違うんですけど
最新版でも問題はありませんか?

647 :
>>646
アクションゲームプログラミングって本をしらないからなぁ。
みんな
古いバージョンの仕様に依存するコードなら大いに問題あり、
古いバージョンの仕様に依存しないコードなら全く問題ない
っていう通り一遍の解答以外はできないだろうな。

648 :
a→b→a→a→c→d→b→c→c→d
のようなリストがあるときに、a,b,c,dの出現回数を調べたいときは
どうやるといいですか?

649 :
>>648
グローバル変数に
unsigned int a_count = 0;
unsigned int b_count = 0;
unsigned int c_count = 0;
unsigned int d_count = 0;
としておいて、見つける度にその数を増やす。
なれてきたらグローバル変数じゃなくし、
unsigned int count[4]={0,0,0,0};
とした方が楽かもしれないけど。

650 :
>>648
こいつはマルチなんで相手にしないように。

651 :
ビルドしようとしたら
cl.exeを起動しようとしてエラーが発生しましたと出て、失敗しました。
何度やっても一部を除いてビルドできません、
原因分かりますか?

652 :
#include <stdio.h>
int main()
{
char str[] = "AXMDOBERSDULLPQ";
char *ptr = str;
while (*ptr) {
*ptr = *ptr - ('A' - 'a');
ptr++;
}
printf("%s\n", str);
return 0;
}
参考書見て勉強しているんですが解説が無いのでわかりません。
whileを抜けるのは
ptr++を続けていくうちに*ptrでは無くなった→ループ終了。
という解釈でいいですか?
お願いします。


653 :
文字列の終わりには\0がついてるから

654 :
なるほど。
ありがとうございます。

655 :
本当に分かってる?
大丈夫?
君の言う
> *ptrでは無くなった
の意味は分かってるかい?

656 :
1. 以下のプログラムは、勝ち数と負け数を入力して勝率
(= 勝ち数 / ( 勝ち数 + 負け数) )を計算するプログラムである。
勝ち数、負け数に負の値が入力された場合は入力をやり直させ、
勝ち数+負け数が0 の場合は勝率計算が不能であることを表示する。
ただし、このプログラムはバグを含んでおり正しく動作しない。
デバックを行って正常動作するようにせよ。
修正したソースプログラムと実行結果を示すこと。

657 :
#include <stdio.h>
  int main(void){
   int nwin, nlose;
   do
    printf("勝ち数を入力してください:");
    scanf("%d",nwin);
     if (nwin<0)
      puts("負の値を入力しないでください!");
  while(nwin<0);
   do
     printf("負け数を入力してください:");
     scanf("%d",nlose);
     if (nwin<0)
       puts("負の値を入力しないでください!");
   while(nlose<0)
  total = nwin + nlose;
   if (total = 0)
     puts("勝率を計算できません。");
   else
     printf("勝率は%dです。\n",nwin/total );
   return(0);
   }

658 :
2.半径(cm)と中心角(度)(いずれも整数値)を入力して扇形の面積を計算する
  プログラムを作成せよ。円周率の小数点以下桁数は任意に決めてもよい。
  ただし、入力値に以下の処理を加えること。
  ・半径に負の値が入力された場合、入力をやり直させる。
  ・中心角の入力値は以下のように処理する。
   i.  0〜359の場合はそのまま使う。
   ii. 負の値の場合、0か正の数になるまで繰り返し360を
     加えた値を中心角とする。
     (例: -30 -> 330, -450 -> 270 )
   iii.360以上の場合、360で割った剰余を中心角とする。
3.正の整数を繰り返し入力し、0 か負の数が入力されたらそこで入力を打ち切り、
  そこまでの合計と平均を計算するプログラムを作成せよ。
  最後に入力した負の数は計算に入れないようにせよ。
  また、平均は小数点以下まで算出せよ。  
すいません、明日までにお願いできますか?


659 :
>>657
エラーが出るからデバッグする

660 :
>>657
はマルチなんで相手にしないように。

661 :
もっとヒネった問題だしてよ

662 :
>>655
おそらく理解できていると思います。
文字列の最後尾にあるのは\0→whileが0(偽)になったのでループ終了。
ということではないでしょうか?

663 :
>>662
ああ分かってるっぽいね。
それでOKです。


664 :
Cで作ったものはどのOSでも正常に動くんですか?

665 :
ポインタのポインタに入っている関数にはどうやってアクセスするのでしょうか?
AAA a
AAA* b
AAA** c
b=&a
c=b
c(ここがわかりません)d()

666 :
>>665
> c=b
ここがおかしいでしょ。

667 :
>>664
むしろ動かない。
Cで書いたプログラムはそのコンパイルされたPC上でのみ動く。
・・・だが実際にはちょっとくらい違うPCでも動いたりする。
例)同じWindows XPのSPの差など
動かない例は
例)Windows XP と Linuxなど

668 :
電卓とカレンダー作りができる程度の初心者です。
基礎学習になるようなプログラムを組みたいのですが、何かおすすめの題材はありますか?
また、ゲーム作りに興味があるのですが、少し調べてみたところ基礎的な学習とは方向性が違うように感じ、
基礎が身に付くまでは汎用的な学習がしたいと考えているのでチャレンジするかどうか迷っています。
ゲーム作りはC言語の基礎学習になるのでしょうか?この点についてもアドバイスをもらえたら嬉しく思います。
よろしくお願いします。


669 :
>>668
このスレは結構過疎ってるから
ttp://pc12.2ch.net/test/read.cgi/tech/1247937958/
で質問するのがよいかと。
その質問はここでは取り下げてから
じゃないとマルチポスト扱いにされちゃうから注意。

670 :
>>669
親切に誘導していただき、どうもありがとうございます。
助かりました!
では、>>668の質問取り下げさせていただきます。

671 :
テンプレあるかワカランが
c言語ってなにの初心者
なにからすべき?

672 :
>>671
このスレは結構過疎ってるから
ttp://pc12.2ch.net/test/read.cgi/tech/1247937958/
で質問するのがよいかと。
その質問はここでは取り下げてから
じゃないとマルチポスト扱いにされちゃうから注意。

673 :
いや
C言語なら俺に聞け(入門篇) Part 54
http://pc12.2ch.net/test/read.cgi/tech/1254829314/
だったか。

674 :
トンクス
とりあえずROMっとく

675 :
C言語でなにするの?
あらかじめ文つくって全自動で友人とチャットをかってにやってくれたりできるの?

676 :
{
do c = *p++ & 0xff;
while (isspace(c));
return c;
}
ってどういう意味ですか?
教えてください!!

677 :
p が指し示すアドレスから、最初に出現する空白文字でない文字の値を返す

678 :
すいません
動的に確保したポインタの配列(2次元配列として使いたい)にデータを代入しようとするとwarningがでます。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char **arr;
int i,j;
arr = malloc(3 * sizeof(char *));
for(i=0; i<3; i++) arr[i] = malloc(3 * sizeof(char));
strcpy(arr[0],"aa");
printf("%s\n",arr[0]);
return 0;
}
a.c: In function ‘main’:
a.c:12: 警告: incompatible implicit declaration of built-in function ‘strcpy’

この理由と回避策を教えていただきたいです

679 :
>>678
#include "string.h" が抜けてるぞ

680 :
#include <string.h> だった

681 :
C言語はじめたいと思ってて本屋で教則本を買うつもりなんだが
オススメはある?
それともネットに書いてあることで充分?

682 :
>>678
12行目: 警告: incompatible implicit declaration
#include <string.h>

683 :
>>681
http://www.amazon.co.jp/C%E3%81%AE%E7%B5%B5%E6%9C%AC%E2%80%95C%E8%A8%80%E8%AA%9E%E3%81%8C%E5%A5%BD%E3%81%8D%E3%81%AB%E3%81%AA%E3%82%8B9%E3%81%A4%E3%81%AE%E6%89%89-%E3%82%A2%E3%83%B3%E3%82%AF/dp/4798101036

684 :
変数に代入するっていう文が判らない・・
たとえば、10という数値を変数に代入
この場合は「int」でいいのかな?

685 :
>>684
(っ´▽`)っ
int i;
i=10;

686 :
>>678
(っ´▽`)っ mallocしたらfreeするのを忘れずにね☆

687 :
ありがとう!
ちなみに画面表示する が抜けてた
#include<stdio.h>
main()
{
int a = 1;
printf("10\n",a);
unsigned short b = 65000;
    printf("65000\n",b);
    
    return (0);
 
}
こうでいいのかな?

688 :
> printf("65000\n",b);
( ゚д゚ )

689 :
違うのか・・・・
どう書くの??

690 :
> printf("\65,000on",b);
こう書くんだよ!!

691 :
> printf("\65,000 oz",b);
このほうが読みやすいな!!

692 :
>>687
#include<stdio.h>
int main()
{
  int a = 1;
  unsigned short b = 65000;
  printf("%d\n",a);
  printf("%d\n",b);
  return 0;
}

693 :
誰か教えてくれ(;;)
1: 生徒データの入力
2: 平均身長の表示
3: 平均体重の表示
4: データ表の表示
5: データの全消去
0: プログラムの終了
入力された番号: 1
これは 1 人目の生徒です(5人まで)
名前を入力してください(10文字以内)
入力された名前: q
身長を入力してください
入力された身長: 134
体重を入力してください
入力された体重: 33

1: 生徒データの入力
2: 平均身長の表示
3: 平均体重の表示
4: データ表の表示
5: データの全消去
0: プログラムの終了
入力された番号:

というようなものを実行するためのプログラミングはどうしたらいいんだ〜

694 :
とりあえず、フローを書いてみたらいいと思うよ

695 :
>>693
一応それっぽいの書いてみたけど、までここ見てるかなあ・・・。
http://codepad.org/gQWMODF9

696 :
初心者過ぎる質問で申し訳ないのですが
putchar関数を使うとき
putchar('C')と記述するのと
putchar(C)と記述するのでは
どんな違いがあるのでしょうか?
どなたか教えてください。よろしくお願いします。

697 :
putchar('C') は、文字 'C' を出力する
putchar(C) は、変数 C の内容を出力する

698 :
>>697さん
なるほど、そういうことだったんですね。
どうもありがとうございました。

699 :
putchar('C') は、'C'という定数の値を計算して、その値に等しい文字を標準出力に送る
putchar(C) は、変数 C に格納されている内容を参照して、その値に等しい文字を標準出力に送る
'C'は定数、文字リテラル
Cは変数
プログラムの中に書く、具体的なデータ(定数)の表現をリテラルといいます。
http://web.hc.keio.ac.jp/~fujimura/lang/page-6-4.html

700 :
> putchar('C') は、'C'という定数の値を計算して
計算なんてしないだろ

701 :
ユニコードで書かれているか何で書かれているかにもよるが、
ソースファイルをコンパイラーが計算して固定された定数に
したものを実行時に、さらにキャストするときに計算される。
引数は計算する為に渡される。
なんにもしないなら、計算をしないという計算を行ってから
出力先に渡される。2番目のCにしても、配列の何番目とかで
渡されればアドレス計算と値のキャストが行われる。
'C'という記述自体が、文字Cを固定値に変換する計算を前提
にしている。計算というと語弊があるなら、値を処理してと
いうことだ。そこ引っ掛かるところなんだ。計算したんだよ。

702 :
> 計算をしないという計算
何の事かさっぱり分かんね

703 :
一般的に(void)putchar(ch);ではなく、int putchar(int c);と実装されるので、
文字定数は整数に演算されて型キャストされるて関数演算されるということだよ。
文字キャラクタが右から左に心太式に出力されるのではなく、演算処理される。
テキストソースのユニコードやアスキーコードから整数に計算されている。
putchar(ch)のような特殊な実装なら、値を計算しない(何もしない)という判断を
行って、putc関数演算後に標準出力に送ることも可能だということだ。

704 :
1. キャストも関数演算も計算ではない
2. そもそも 'C' は int 型

705 :
>>704
引数は特定のプラットホーム依存の文字セットの文字から整数に
値を変換されている。文字を出力しているのではなく、整数値を
出力しているんだろ。論理演算も数値演算もすべて処理は計算だ。
'C'という文字定数を解釈(計算)して整数値にしている。その為の
型宣言がある。
文字の値を標準出力の配列にputcで追加して、インデックスが指す
位置をプラス1してインクリメントしている。


706 :
>>705
1.
putchar() は何ら変換処理を行っていない
コーディングされた文字の文字コード値 (整数値) をそのまま標準出力に送っているだけ
疑うならソースコードをバイナリエディタで覗いて確認してみること
並びにコンパイラのアセンブリリスティングを確認してみること
2.
'C' は文字定数ではなく int 型の整数値
3.
標準出力の配列? インデックス? とやらはプログラミング上意識すべきではない

707 :
通常int型は32ビット(-2147483648〜2147483647)なので埋め込みパッドが入り
キャストされた数値なので、ファイルの文字とは異なるサイズの数値である。
入力ファィルと出力ファイルを見ているとキャストが起きているので変化して
いないようにみえる。
int
putchar(int c)
{
FILE *so = stdout;
return (putc(c, so));
}

708 :
>>699さん
亀レスですが、詳しくありがとうございます。

709 :
積分を行う関数をシンプソンの公式を用いて以下のように作りました。
double Integ( double (*f)(double),double a,double b){
int n = 10000;
double z ;
double h = (b-a)/(2.0*n);
int X = 1;
double S1 = 0.0;
double S2 = 0.0;
for(z=a+h ; z<=b-h ; z+=h){
if(X%2 == 1){
S1 += (*f)(z);
}
else{
S2 += (*f)(z);
}
X += 1;
}
I =(h/3.0)*( (*f)(a) + (*f)(b) + 4.0*Si1 + 2.0*Si2);
return I;
しかし、これはf(x)=1/xのような被積分関数の変数が一つの場合でしか動きません。
これを多変数の場合にも応用するにはどうすればいいでしょうか?
例えばf=2*x+x*y+zをxで積分するような場合です(y,zはxによらない)

710 :
ごめんなさい、スレ間違えました

711 :
smp.txtというテキストファイルをデスクトップに作成し
それを読み込むプログラムを作ったのですが、
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE*fin;
char buf[256];
char file[80];
printf("入力ファイル名=");
gets(file);
fin=fopen(file,"r");
if(fin==NULL){
printf("%sをオープンできません\n",file);
exit(1);
}
while(fgets(buf,256,fin)!=NULL){
printf("%s",buf);
}
fclose(fin);
return 0;
}
これを実行し、入力ファイル名をsmp.txtにしてもテキストファイルが開けません
何が原因なんでしょうか?
どなたか教えてください。よろしくお願いします。
プログラムはvisual studio 2005で作りました。

712 :
カレントディレクトリ

713 :
>>712さん
カレントディレクトリ に色々言葉を足して検索したら解決できました。
ありがとうございました。

714 :
C言語を最近習い始めた17歳のJKです
1000以下の素数を求めるの乗除を減らすプログラムを教えてください
/*
1000以下の素数を求める(第5版)
*/
#include <stdio.h>
int main(void)
{
int i, no, cnt = 0;
int prime[500]; /* 素数を格納する配列 */
int ptr = 0; /* 既に得られた素数の個数 */
unsigned long counter = 0;
prime[ptr++] = 2; //prime[0]=2; /* 2は素数である */
prime[ptr++] = 3; //prime[1]=3; ptr==2 /* 3も素数である */
for (no = 5; no <= 1000; no += 2) {
int flag = 0;
for (i = 1; counter++, prime[i] * prime[i] <= no; i++) {
counter++;
if (no % prime[i] == 0) { /* 割り切れると素数ではない */
flag = 1;
break; /* それ以上の繰返しは不要 */
}
}
if (flag == 0) /* 最後まで割り切れなかった */
prime[ptr++] = no; /* 配列に登録 */
}
for (i = 0; i < ptr; i++) {
printf("%4d", prime[i]);
cnt++;
if(cnt % 15 == 0)
putchar('\n');
}
printf("\n\n乗除を行った回数:%lu\n", counter);
return (0);
}

715 :
インクルードファイルが開けないのですが・・・
使用しているのはBCpadというものです

716 :
>>715
自己解決しました

717 :
ビット演算子についての質問なのですが
 int a = 0x00005555;
 int b = 0x000000FF;
 int c;
としたとき
c = a & b; の実行結果が00000055
になり
c = a | b; の実行結果が000055FF
になるのですが、
どうしてc = a & b;の実行結果が
000000FFではなく00000055になるのでしょうか?
どなたか教えてください。よろしくお願いします。

718 :
>>717
数値を2進法表記で考えてください。
それで判らなかったらもう一度質問してください。

719 :
質問お願いします.
nm6919340
をみて,ポインタを勉強していたのですが,main関数ではない関数で,変数を操作する方法の例として,ポインタが挙げられていました.
これは,グローバル関数でも同様のことができると思いますが,ポインタとグローバル変数の明確な違いを教えていただけると幸いです.
(どうもピンと来ませんでした…)

720 :
>>719
「スコープ」 というものについて調べておく事。
一般に、グローバル変数は可読性の為になるべく使わない方がよい、と云われ
ている。
それは、グローバル変数はプログラム上のどの位置からも変更・参照できる為、
プログラムの規模が 1000 行、10000 行、100000 行と増大するにつれ、どこで
そのグローバル変数が使われているか把握しきれなくなりプログラムの整合性
が保ちきれなくなってくるから。
一方、変数を関数へポインタの引数として渡した場合、使用されるのはその関数
の内部のみと限定される為、プログラムの流れが追いやすくなる。
ちなみに、関数自体が 1000 行、10000 行と長くなってしまっている時は、関数内
での処理をもっと細かい単位の関数群に分割するとよい。
グローバル変数はなるべく使わない方向でコーディングする癖をつけておくと、他
の人がプログラムを読む場合や何年か経って自分で書いたプログラムの内容を
忘れた状態で読む場合に有意。
100 行程度の小さなプログラムでも、馬鹿にせずにきちんとコーディングする事が
大切。
なお、値を変更したい変数が 1 つしかない場合は、ポインタの引数を渡すよりも
呼び出し側で関数の戻り値を代入させた方が、やりとりする情報量が減って読み
やすいプログラムになる。

721 :
>>720
ありがとうございます!
やっぱり可読性の問題か.

722 :
>>718
2進法で考えたらわかりました。ありがとうございました。

723 :
どなたか教えてください。ずっと考えてたけど、答えがわかりませんorz。
<標準関数>文字列と削除文字列を入力し、文字列中から削除文字列を削除しなさい。
※配列の使用は2つだけ。
例) 文字列入力→ABCDEFAABCDABC
   削除文字列→ABC
   結果文字列→DEFAD
どなたか教えてください、お願いします。

724 :
>>723
書き間違えたorz
結果文字列→DEFG

725 :
>>724
訂正の部分は忘れてください。

726 :
int main(void)
{
char *str;

str="abcdefghijklmnopqrstuvwxyz";




while( *str !='\0')
{
printf("%c",*str);
str++;

}

return 0;
}
このプログラムを出力すると
abcdefghijklmnopqrstuvwxyz
と表示されるのですが
このときcを@などに部分的に置き換えることは可能ですか?


727 :
>>726
while( *str !='\0')
{
if (*str=='c'){printf("@");str++;continue;}
printf("%c",*str);
str++;
}

728 :
今ポインタで引数を渡すことを勉強しています。
dt2[]の内容をdt1[]にコピーするという事をポインタ引数で戻す関数を使う
という下記のプログラムのを実行すると、
#include <stdio.h>
void array_copy(int *ary1,int *ary2,int len);
int main(void)
{
int dt1[5],dt2[5]={50,20,80,30,90};
array_copy(dt1,dt2,5);
printf("dt1[0]=%d dt2[0]=%d\n",dt1[0],dt2[0]);
printf("dt1[4]=%d dt2[4]=%d\n",dt1[4],dt2[4]);
return 0;
}
void array_copy(int *ary1,int *ary2,int len)
{
int i;

for(i=0; i<len; i++){
*ary1 = *ary2;
++*ary1;
++*ary2;
}
}
実行結果が
dt1[0]=55 dt2[0]=55
dt1[4]=-858993460 dt2[4]=90
となりうまく値を渡すことが出来ません。
なぜdt2[0]の値が関数に渡した時点で50から55になっているのでしょうか?
また、dt2[4]の値がうまくコピーできないのは何故なのでしょうか?
どなたかどうぞご助言お願いいたします。

729 :
>>728
++*ary1;
++*ary2;
これがどんな動作をしているか確認して下さい。

730 :
>>728
ヒント : >>727

731 :
>>729
ポインタの指示するアドレスにある値に加算をしてしまっていたようですね。
ご助言ありがとうございました。

732 :
fgets()関数とsscan()関数を使って
fgets(inpBuf,sizeof(inpBuf),stdin);
sscanf(inpBuf,"%d",&inpNum);
printf("入力した数値:%d\n",inpNum);
としたとき、数字ではなく文字列を入力すると
マイナスの値が返ってくるのですか、何故なのでしょうか?
例えば
kjhと入力すると-858993460と返ってきます。
だれか教えてください。お願いします。

733 :
>>732
その場合sscanf()は何もしていない。
単にinpNumに元々入っていた値がprintf()で出力されているだけ。
inpNumを初期化しておくこと、並びにsscanf()の戻り値をチェックすること。

734 :
>>733
親切に対策まで教えてくれてありがとうございます。

735 :
2次方程式ax2+bx+c = 0の係数a, b, cを入力し、解の判別(虚根、重根、実根)を行い、判別結果と解を出力
するプログラムを作成せよ。実際に、3種の解が得られる3組の係数を入力し、結果を示せ。
お願いします

736 :
>>735
それのどこが質問なの?
丸投げはプログラム板の宿題スレでやってくれ

737 :
rand関数について質問させてください。
アルファベット大文字 26字、アルファベット小文字 26字、数字 9字 の合計62文字からランダムに一文字取り出す式を教えて下さい。
今日 rand関数を習ったばかりで よくわかりません。{(>_<)}
基本的な使い方は大丈夫です。

738 :
0から61(1から62)の範囲で変化する乱数を作る。
合計62文字の配列に文字を入れて、その配列のインデックスを乱数で決めて出力する。
> 特定の範囲で乱数を求めたいときにはa = rand() % 10とする方法も広く知られているが、
> 線形合同法は下位にあるビットほど質が悪い。
> そのため上記のコード例のような上位にあるビットを利用するコードが推奨されている。
http://ja.wikipedia.org/wiki/Rand
数字 9字 0はないのか・・・

739 :
ランレグス圧縮についてここまでできたのですが、
#include<stdio.h>
int main(void){
char x1=0, x2=0;
int x, count=0;
while((x=getchar())!=EOF){
x2=x1;
x1=x;
if(x1==x2){
count++;
}else{
if(count>1) printf("%d", count);
printf("%c", x1);
count=1;
}
}
if(count>1) printf("%d", count);
return 0;
}
これだと手入力でaaabbbだとa3b3と表示されます。
これをtxtファイルからaaabbbを読み込んでtxtファイルに出力してa3b3と表示できますか?

740 :
できます

741 :
#include <stdio.h>
#define NUM 255
int main(void) {
char str[NUM];
char encode[NUM];
int i,j,pos;
int count;
FILE *fp1;
FILE *fp2;
fp1 = fopen("a.txt", "r");
fp2 = fopen("b.txt", "w");

if(fp1 == NULL || fp2 == NULL) {
printf("ファイルをオープンできませんでした。\n");
return 1;
} else {
printf("ファイルをオープンしました。\n");
}
fscanf(fp1, "%s", str);

for (i = 0, pos = 0; str[i] != '\0';) {
for (j = i+1, count=1; str[j] != '\0' && str[i] == str[j]; j++) {
count++;
}
encode[pos++] = str[i];
encode[pos++] = count + 0x30;

i = j;
}
encode[pos] = '\0';
/* 圧縮文字列の表示 */
printf("圧縮した文字列:%s\n", encode);
fprintf(fp2, "%s", encode);

fclose(fp1);
fclose(fp2);

printf("ファイルをクローズしました。\n");
return 0;
}

742 :
理解が浅いので教えてください。
char str[]="abcde";
で'd'を表示するには
printf("%c",str[3]);
ポインタでは
printf("%c",*(str+3));
ですよね。

char str[2][6]="abcde","vwxyz";
の'w'をポインタで表示したい場合はどうしたらよいでしょうか。

743 :
>>742
まず、
  printf("%c",str[3]);

  printf("%c",*(str+3));
はまったく同じで、str[3] は *(str + 3) と書くのと一緒(これをシンタックスシュガーという)。
どちらもポインタ演算で、区別はない。
ひいては str[3] は 3[str] とも書けるし、*(3 + str) と書くのと一緒。
次に、
  char str[2][6]="abcde","vwxyz";
はコンパイルエラー。正しくはこう。
  char str[2][6]={"abcde","vwxyz"};
で、質問の答えは
  str[1][1]

744 :
>>743
1次元配列の説明ものすごく勉強になりました。本当に感謝です。
いろいろ驚きです。

745 :
すいません。コンパイルしようと思ったらvcvers32が外部と内部で実行できません。って
出てきたんですけど・・・・どうすればいいんですか?

746 :
>>745
それC言語の話じゃないから、プログラム技術板の該当スレで質問したらいいと思うよ。

747 :
ビット演算が速いのか試したかったのですが結果は同じでした。
Celeron(初期CPU超古いですが) windowsXPsp3  minGWを使っております。
ビット演算の比較に適さないプログラムかもしれませんが、
ビット演算はほぼ速度に影響しないのが実情でしょうか?
#include <stdio.h>
#define AAAAA 1000
int main(void){
int i,j,num,n;

scanf("%s",&n);
for(i=0;i<AAAAA;i++){
for(j=0;j<AAAAA;j++){
num=16/2
printf("[%d][%d]\n",i,j);
}
}
scanf("%s",&n);
for(i=0;i<AAAAA;i++){
for(j=0;j<AAAAA;j++){
num=16>>1
printf("[%d][%d]\n",i,j);
}
}
return 0;
}

748 :
>>747
「 ; 」が抜けてます。すません。

749 :
文字列のポインタについて質問です。
char* a[5];
と宣言すると文字列五つ分のポインタができるとおもいますが、
この時点では文字列の長さがわからないのにどうやって宣言した文字列のメモリを確保しているんでしょうか?

750 :
>>747
それ、最適化されています。
まず、2 のべき乗で割られる割り算の場合は、ビットシフトに置き換えられます。
次に、コンパイル時に答えのわかる演算は、コンパイラが計算してしまいます。
最適化を防ぐには、volatile 修飾子をつけて宣言した変数を仲介させる必要があります。
volatile int ans, num = 16, num2 = 2;
...
ans = num / num2;
...
ans = num >> 1;
最適化されていないと、除算は CPU が実行できる演算の中で特に重い演算なので、まったく
違いが無いということは無いです。
ただし、除算やビットシフトに比べて printf() がとてつもなく重い処理をしているので、有意な差
を感じにくいかも知れません。
要するに、このような実験をする場合はループ内で printf() を使ってはいけません。

751 :
>>749
いやいやいや、確保していませんよ。
この宣言では a[0]、a[1]、a[2]、a[3]、a[4] の 5 つのポインタが作成されますが、
そのポインタ値がどこを指しているかは不定です。
勝手に文字列が確保されることは無いので、この 5 つのポインタを初期化や代入の前に使おう
とするとアクセスエラーになってプログラムが強制終了されるか、プログラムが想定外の動作を
したりするので気をつけてください。
なお、仮に、
char* a[5] = { "ab", "cde", "hijklmn", "opqrs", "tuvwxyz" };
と初期化された場合、文字列 "ab", "cde", "hijklmn", "opqrs", "tuvwxyz" はプログラムの特別
なアドレスに自動的に配置されます。
この自動確保されるメモリ領域は、大抵のコンパイラで標準では書き換え禁止メモリに配置され
るので、
a[1][0] = 'C';
などと文字列を書き換えようとするとアクセスエラーが発生してプログラムがクラッシュしますので
気をつけてください。
一方、char* a[5]; の時点でポインタは書き換え可能なスタックメモリに確保されているので、
a[3] = "OPQRS";
のように文字列 (正確には文字列へのポインタ) を代入する事は許されます。

752 :
>>750
詳しい説明をありがとうございます。
このプログラムのようにPrintffがあるとビット演算が埋もれて
しまう感じになるんですね。
コンパイラってすごいんですね。そういえば確かに最適化で
答えがわかるものは答えが出た状態でコンパイルされるって
聞いたことある気がします。
演算部分もちょっといじって、printfを外に出して、演算が終わっ
たときに表示するようにして試してみます。
すごく勉強になりました。ありがとうございます。

753 :
>>750
計算する数値を入力させ、printfを外したところ明確な速度差が出ました。
ビット演算てすごいですね。
また、printfの重さを痛感しました。
計算によってはビット演算を使うようにこれからは考えて利用したいと思います。
本当に丁寧にありがとうございました。

754 :
>>751
勘違いしてたみたいですね・・。
スッキリしました。
ありがとうございました

755 :
線形リスト構造の使い方について質問です。
http://codepad.org/jwQMESxZ
1. mallocの使い方はあっていますか。
2. 解放はちゃんとできていますか。
どうぞよろしくお願いいたします。

756 :
>>755
free()忘れはないですし、いいと思います。
念入りに書くのだったら、malloc() の返り値が NULL かどうかチェックして、
NULL, すなわち malloc() が失敗したときには、たとえばエラーメッセージを表示して中断する、とかするのもいいかもしれません。

757 :
>>755です。
mallocのエラー処理はあった方がいいんですね。
線形リスト構造はややこしくてこんがらがっていましたが
ちょっと自信つきました。添削アドバイスありがとうございました^^


758 :
>>756
R

759 :
井include<stdio.h>
int main(void)
{
int i,t;
scanf("%d\n",t)
printf("%d\n",i+t);
return 0;
}
エラーがでます・・・何故でしょうか?

760 :
>>759
エラーが出る理由はエラーメッセージに書いてあるよ

761 :
a[100][100][100]みたいな配列を宣言すると、
メモリ不足かセグメンテーションフォルトになります。
メモリの制限を増やす方法ってありますか?
コンパイラはgccでOSはwindows7です。
よろしくお願いします。

762 :
>>761
static 付けて宣言するか、malloc() 等で動的確保してください。

763 :
配列を使うところで、

#define N 17000
#define M 14
...
...
int a[N][M];

このN,Mをまだ大きくしたいのですが、これ以上大きくすると
コンパイルはできるのですが実行できずクラッシュしてしまいます
どうすれば大きな値に設定できるようになるのでしょうか
いけめんなおにぃさま教えてくださいお願いします

764 :
>>763
>>762

765 :
>>764 ありがとうございます
static 使ったら少し余裕ができたのですが
a[2^30][30]
2^30*30=32212254720のメモリが必要でまだ足りないようです
これはスーパーコンピュータでもないと出来ないのでしょうか

766 :
>>765
64bit 対応コンパイラでコンパイルして 64bit OS で動かせば、仮想メモリの許す限り
動作するんじゃないかな (スワップすれば動作速度は遅いと思うけど)。
32bit コンパイラ & 32bit OS では、4GB か 2GB 程度しかメモリ使えないから、そのまま
では無理だね。
30GB ものデータに一度にアクセスして処理をする事はほとんど無いと思うから、使わない
データをテンポラリファイルに吐き出して必要になったらメモリに読み込むという機構を
実装すれば、32bit でも行けるとは思う。
面倒だけど。

767 :
>>766
32bitですしなんだか理解が出来そうにないので現状で満足することにします
ありがとうございました

768 :
#include <stdio.h>
#define N 1000
int main()
{
int i,j,k,m,r;
int ttt;
   int numC[6][3] = {{0,0,1},{0,1,0},{1,0,0},{0,1,1},{1,0,1},{1,1,0}};
int Hantei[30][20][6] = {0};
int Dousou_Hantei[20][20][6] = {0};
int topolgy[27][6] ={{0,0,0,0,0,1}, {0,0,0,0,1,0}, {0,0,0,1,0,0}, {0,0,0,1,0,1}, {0,0,0,1,1,0},
{0,0,0,1,1,1}, {0,0,1,0,0,0},{0,0,1,1,0,0}, {0,1,0,0,0,0},
{0,1,0,0,0,1}, {0,1,0,1,0,1}, {0,1,0,1,1,1}, {0,1,1,0,0,0},
{0,1,1,0,0,1}, {0,1,1,1,0,1}, {1,0,0,0,0,0}, {1,0,0,0,0,1},
{1,0,0,0,1,0}, {1,0,0,1,1,0}, {1,0,0,1,1,1},{1,0,1,0,0,0}, {1,0,1,0,1,0},
{1,0,1,1,1,0}, {1,1,1,0,0,0}, {1,1,1,0,0,1}, {1,1,1,0,1,0}};
int num_2[N];
//1の部分の成分だけを抜き出す
for(j = 0; j < 27; j++){
ttt = 0;
for(m = 0; m < 6; m++){
if(topolgy[j][m] == 1){
for(r = 0; r < 3; r++){
Hantei[j][ttt][r] = numC[m][r];
Dousou_Hantei[j][ttt][r] = numC[m][r];
}//r
ttt++;
}//if
}//m
num_2[j] = ttt;
}//j
//Hanteiを表示テスト
for(i = 0; i < 27; i++){
for(j = 0;j < num_2[i]; j++){
for(k = 0;k < 3; k++){
printf("Hantei[%d][%d][%d]=%d %d ",i,j,k,Hantei[i][j][k],Dousou_Hantei[i][j][k]);
}//k
putchar('\n');
}//j
putchar('\n');
}//i
return(0);
}
HanteiとDousou_Hanteiを同じ値にしたいのですがなぜか、Hanteiの方に真逆の数値が出てきてしまいます
どこが間違っているのでしょうかご指摘お願いします

769 :
自己解決しました

770 :
C言語はflashみたいにサイトに埋め込んで
ブラウザ上で遊ぶみたいなゲームを作れるんでしょうか。

771 :
>>770
ActiveX書けば作れる(ただし深いWindowsの知識が要る)
ちなみにFlashもActiveX

772 :
>>771
プログラミングとか全く知らん状態でブラウザゲームとか色々作りたくて
Flexsdk+AS勉強しようかC勉強しようか悩んでたんですが
Cのほうが導入簡単、情報豊富、基本っぽいので
難しいだろうがCでいけるところまで頑張ってみようと思います。
早い御解答どうもありがとうです。

773 :
windows7での既存のパスにc\Borland\Bcc55\binのパスを追加する方法を教えてくださいませm(._.)m

774 :
>>773
それCじゃなくてWindowsの質問だから
Windows板かプログラム技術板の適当なスレに行くが吉

775 :
うんそうだね よかったね

776 :
>>773
それCだけどWindowsのCならコロンが抜けた質問だから、
ごみ箱以下の質問のようだ。それはここらヘンで質問を
行なうのがふさわしいが、しかし、回答できるスキルの
ある回答者が枯渇している。

777 :
>>773
システム環境変数のPATH変数に新規の値(c:\Borland\Bcc55\Bin)を追加する
Windows 環境変数 Path の設定方法
http://openlab.ring.gr.jp/fumio/windows_environment_variable_ja.html

778 :
1,2,3,4,5,6,7,8,9,10・・・・と自然数を際限なく順々に表すコードって何かありますでしょうか?
forを使う方法でしょうか?

779 :
>>778
http://codepad.org/ZXLj7jSv

780 :
>>778
そうだ。それが基本だ。
while (true) {この中で初期値1の変数nをn=n+1するインクリメントn++と変数nを標準出力する}
http://www.mapee.jp/cpp/breakcontinue.html
forループで繰り返しするか、while文で繰り返しを行なう。(goto ラベルにジャンプ)

781 :
>>779,780 なるほど・・・勉強になります。ありがとうございました

782 :
C言語とか関係ない?のかもしれませんがVisual C++を使ってプログラミングをしているときに
カーソルを打った文字上にあわせると点滅?ではなく■のようになってしまい、抜かしてしまった文字を
入れるのがとても不便です。どうすればいいのでしょうか?
説明下手ですが、何卒宜しくお願いします。

783 :
>>782
よく分からないけどInsertキーの事?
プログラム技術板にVC++スレがあるからそっちで訊いた方がいいかも

784 :
>>782
>>783の言うように、うっかりInsキーを押して、エディターが
挿入モードから上書きモードに変更されたのだと思う

785 :
>>783
>>784
どうやらInsertキーを押してしまっていたようです
教えていただきありがとうございます

786 :
C言語を使ってのGUIプログラムの作り方が学べる入門書がありましたら、お教えしてもらえないでしょうか?
手元にある書籍は独習C言語、C言語による最新アルゴリズム事典です。

787 :
>>786
http://wisdom.sakura.ne.jp/system/winapi/win32/index.html
で感じをみて、
http://www.amazon.co.jp/dp/4756136001/
が正統、あ、Windows の話ね。

788 :
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************

http://sky.geocities.jp/ttl_ttl_ttl_pic/
NASMでC言語を作る NASMで高度な設計書類とNASMの簡単な利用方法のサイトです
C言語のHEADの作り方 DLLファイルの作り方が書いてあります
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************

789 :
int n = x
とかいうのはnというメモリにxを格納するということでいいんですか?

790 :
>>789
逆です。
x というメモリ領域に記憶されているデータを n にコピーする、という意味です。

791 :
西日本も福島原発の放射能に曝される。
4/7 予測 http://up3.viploader.net/ippan/src/vlippan198234.jpg
発表はドイツ気象庁 http://www.dwd.de/

792 :
VBスレにも質問しましたが、こちらでも質問させていただきます。
現在VC++から変数の値をVBに渡してVBで処理するプログラムを作成しています。
VC++でのdll作成、読み込み
VBでのdll作成、読み込みはできるようになりました。
しかし以下のサイト
http://www.nextftp.com/swlabo/m5_cpp/hp_dll/dll_00.htm
を参考にVC++でdllファイルを作成しても
VBではどうしても参照してくれません。参照しようとすると
ファイルアクセスが可能で、有効なアセンブリまたはCOMコンポートであることを確認して下さい。
と出ます。
VC++は数値計算をかじった程度の知識しかないので、これ以上はお手上げです。
何がどういけないのか教えてください。

793 :
792です。
すみません、もうひとつの質問スレに質問します。
お騒がせしました。

794 :
コマンドプロンプトからコンパイルするときに、アクセスが拒否されました、
とでてしまいます。フラッシュメモリのデータでやっててダメだったので、
Cのところに移して再度やってもダメでした。
管理者としてコマンドプロンプトを実行もやってみましたが、同じです。
どうやったら読み込んでくれますか?

795 :
>>794
情報不足もいいところ
コンパイラの名前とバージョン
OSの名前とバージョン
ファイルシステムとフォルダ(ディレクトリ)のアクセス権
環境変数
実際に打ったコマンドライン
以上の詳細よろしく

796 :


797 :
10進数から2進数に変換させるプログラム教えてください 
できれば計算過程も表示させたいのですができるのでしょうか?

798 :
C言語を習い始めて思うが、自分の頭の中でイメージした仕様にC言語の文で表す事が出来ないんだけど、これって訓練で補えるの?それともセンス?
習い始めて3ヵ月です。

799 :
visual c++ 2010 express 使ってるんですけど
プログラムを実行するとコマンドプロントがすぐに消えてしまいます
どういった対策をすればいいでしょうか?

800 :
データを入力して4次行列式を計算させるプログラムを作りたいんですがどなたか書いてもらえませんか?
のってるサイトとかないですかね?

801 :
>>799
/K オプションを付けて起動。

802 :
C言語初心者です。授業についていけないので独学を始めました。
以下は現在作成途中のソースなのですが
AとBを足した数値が7.920000と表示されてしまいます。
実際は7.92のはずなんですが…原因がわかりません。
考えられる原因として何があるでしょうか?
本当に初心者なのでうまく伝えられず申し訳ないのですが
教えて頂けると幸いです。
#include <stdio.h>
int main()
{
float a=2.34,b=5.58,c=6.765;
printf("a = 2.34\nb = 5.58\nc = 6.765\n");
printf("(a + b)=%f",a+b);
printf("何かキーを押してください");
printf("お疲れ様でした");
return 0;
}

803 :
7.920000=7.92
別に間違ってはいないよ。


804 :
表示する桁数を変えたいってなら、
printf のマニュアル参照だな。
ただの "%f" だけでは小数点以下を何桁表示するかが指定できていない。
"%5.2f" みたいに、桁数を指定する書き方を調べるといいよ。

805 :
>>801
どういうことですか?

806 :
>>801>>799 のあげ足を取ってるだけ。
>>799 は多分コマンドプロンプトを起動してない。
コンソールアプリを直にダブルクリック等で起動した場合は
conhost.exe とそのアプリだけが起動される。

807 :
次のオーダー記法に関する問題が分かりません。。
自然数上の関数Sが、以下のように再帰的に定義されている。
このSについての次の問いに答えよ。
 S(0)=1, S(n)=6T( [n/2] ) + 8n
( [ n/2 ] はn/2の切捨て)
(1) S(n) = O(n^k)とはなるが、S(n) = O(n^(k-1))にはならない
自然数k>=2を示せ。
(2) 上の問いの答えkに対して、S(n)=O(n^k)となることを証明せよ。
(3) 上の問いに対する証明論法ではS(n)=O(n)の証明はできない。
どこで議論が破たんするかを示せ。
ご教授お願いします。

808 :
独学していたのですが、次の漸化式の正確な値を計算するプログラムがわかりません。
C_N=C_(N/2)+1 (N>=2の時)
C_1=0
因みにこの問題はアルゴリズムの解析という章の章末問題で、
漸化式の他にはO記法等が記述されている章でした。
よろしくお願いいたします。


809 :
総選挙に夢中になっていたらレポートが終わりませんでした><
きたりえ推しの皆様教えてください!
以下の処理を実現するための式を考えてみよう。(C言語)
(1)xの下位ビットをyへ、yはshort型とし、下位4ビット以下は1をセットする。
(2)xの下位ビットをchar型変数xの上位4ビットへ、yの下位ビットをzの下位ビットへ代入する。

810 :
>>809
「下位ビット」という言葉の意味を明確にしてもらおうか

811 :
ファイル操作で、inputファイルから
203 210 221 200 201 153 255 100 123
のようにスペースで区切られているものを
fscanfで読み込んで、それを加工した後に、outputファイルに再びスペースで区切った形で書き出したいのですが
そのように書き出すためにはどういった操作をすればいいのでしょうか?
fputsを使うと、スペースで区切られずに書き込まれてしまいますよね・・・?

812 :
>>811
細かい書式指定をするなら、fprintf() 使えばいいんじゃないのかな

813 :
#include <stdio.h>
int main(void)
{
int a;
int b;
int c;
int d;
printf("1つ目の整数を入力せよ\n");
scanf("%d",&a);
printf("2つ目の整数を入力せよ\n");
scanf("%d",&b);
printf("3つ目の整数を入力せよ\n");
scanf("%d",&c);
printf("4つ目の整数を入力せよ\n");
scanf("%d",&d);
printf("【 %d , %d , %d , %d 】\n",a,b,c,d);

if(a<=b&&a<=c&&a<=d)
{
printf("最小値は、%d\n",a);
}
else if(b<=a&&b<=c&&b<=d)
{
printf("最小値は、%d\n",b);
}
else(c<=a&&c<=b&&c<=d)
{
printf("最小値は、%d\n",c);
}

if(d<=a&&d<=b&&d<=c)
{
printf("最小値は、%d\n",d);
}


if(a>=b&&a>=c&&a>=d)
{
printf("最大値は、%d\n",a);
}
else if(b>=a&&b>=c&&b>=d)
{
printf("最大値は、%d\n",b);
}
else (c>=a&&c>=b&&c>=d);
{
printf("最大値は、%d\n",c);
}
if (d>=a&&d>=b&&d>=c)
{
printf("最大値は、%d\n",d);
}

printf("何かキーを押して下さい\n");
getch();
printf("END\n");

return 0;
}

814 :
上記のソースを実行するとelse(c<=a&&c<=b&&c<=d)の部分を
「else(c<=a&&c<=b&&c<=d);」にしろと出ます。
教科書にはそんな記述がないのですが、「;」をつけるのが正しいのでしょうか?
また、上記のソースの間違っているところがわかりません。
教えて頂けると嬉しいです。

815 :
else に条件は付けられないだろ。

816 :
X ++;
X %= 4;
ならば、
++X%=4;
と出来ると思うのですが、
X += 5;
X %= 4;
を一行に纏めることは出来ますでしょうか?

817 :
X = (X+5)%4;

818 :
> ++X%=4;
できるか? これ

819 :
下のcodeで"-dog"は検索可能だが2つ目(-cat)が検索出来ません。
何が良くないのでしょうか?
enum mode {dog=0,cat,};
struct table {int key; char *opt;};
static struct table opt1[] = {
{.key=dog,.opt="-dog",},{.key=cat,.opt="-cat",},
};
********
#include <search.h>
int cmp(const void *m1, const void *m2){
struct table *mi1=(struct table *)m1;
struct table *mi2=(struct table *)m2;
return strcmp(mi1->opt, mi2->opt);
}
int main(int argc,char *argv[]){
struct table key; key.opt=argv[1];
lfind(&key,opt1,(size_t*)opt1,sizeof(struct table),(int(*)(const void*, const void*))cmp);
return 0;}

820 :
>>819
lfind() の第 3 引数が間違っている。
第 3 引数には、「要素数を格納している変数へのポインタ」 を指定しなければならない。
(size_t*)opt1 なんて誤魔化してはいけない。
要素数の求め方は、sizeof(opt1) / sizeof(struct table)。
この結果を適当な変数 (例えば int num; ) に代入し、第 3 引数にポインタ演算子 (&) をつけて指定する。
正しいコードはここに。
http://codepad.org/pha78RbG
あと、すぐに答えを得られないからといって、マルチポストをするのをやめる事。
回答する方もどこにレス付けていいかわからないし、無駄に大勢の目に触れてその時間を
奪う事になる。
失礼だろ?
以下ちょっかい。
> struct table {int key; char *opt;};
key の型が enum mode ではなく int なのが気になる。
> {.key=dog,.opt="-dog",},{.key=cat,.opt="-cat",},
最近のコンパイラはこれが通るのか・・・
> (int(*)(const void*, const void*))cmp
このキャストは要らない。

821 :
最大値探索を行うプログラムです。?部分が分かりません。学校の演習で、再帰を使って実装します。
どなたか教えてください。
#include<stdio.h>
int d[999];
int main(){
int i,n;
int max(int i,int n);
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&d[i]);
}
for(i=1;i<=n;i++){
printf("%5d",d[i]);
if(i%10 == 0){break;}
}
printf("\n最大値 : %d \n",max(1,n));
}
int max(int i,int j){
int z,z1,z2,k;
if( i==j ){
z = ?;
}else{
k = (i+j)/2;
z1 = ?;
z2 = ?;
if(z1>z2){
z = z1;
}else{
z = z2;
}
}
return z;
}

822 :
>>821
十分テストしてないけど多分こう
z = d[i];
z1 = max(i, k);
z2 = max(k + 1, j);

823 :
>>821
何この半池沼

824 :
>>823
何この池沼

825 :
C言語初心者です。
int main(int argc, char *argv[]){というのはargcが引数の数を表していて、argvがその引数の内容であると知りました。
引数に数字を一つ渡して、それを60で割った余りをだすコードを作ろうとして、
int sam = argv[1]%60;
としたのですが、「式には整数型、もしくは列挙型を使用する必要があります」と警告されました。
これはどうすればこの警告をなくすことができるのでしょうか?

826 :
>>825
整数型に変換すればいい
そもそもargvに数字が入ってるとは限らないんだが

827 :
プログラミングするにはパソコンでなにかインストールしなきゃならないの?やっぱり金かかる?

828 :
>>827
今は無料で大抵そろう。インストールは必要。

829 :
http://codepad.org/VDC8hvKu
このコードで構造体Bの中の構造体Aの値だけを変えたいんですがどこを直せばいいですか?

830 :
マルチ乙
配列渡してねーじゃん

831 :
           /  (___  ___) ヽ
           ./     ノ 人 ヽ    ヽ
    __    ./    //  ヽ ヽ    .ヽ   / ̄\
  ./ ○ ヽ、 /    (__)  (_)    ヽ/  ○  \
/      \,,,--―――''''''''''''''''''''――-/        ヽ
..⌒‐-,,,,_  /:/ヽー―――-、,,__,,,,-―――:||  _,,;-‐''"⌒~~~
     .ヽ/::||::::::::::   (●)    (●)   ||/ヽ
      く ::||:::::::::::::::::   \___/    ||:::::::::ヽ
       ヽヽ:::::::::::::::::::.  \/     ノ_/
【ゴールデンレス】
このレスを見た人はコピペでもいいので
10分以内に3つのスレへ貼り付けてください。
そうすれば14日後好きな人から告白されるわ宝くじは当たるわ
出世しまくるわ体の悪い所全部治るわでえらい事です

832 :
よくゲームとかで字幕が流れてる時にボタン押すと字幕が全部表示されたりしますよね?ギャルゲーとかであるようなやつです。
あれってどういうプログラム組んでるのですか?

833 :
>>832
スレ違い
Cに関する質問じゃない

834 :

みみずん検索 違法の可能性
http://mimizun.com/index1.html
2ちゃんねるの固定ハンドルみみずんは、2ちゃんねるの過去ログを自らのサーバーに勝手に保存し、
それを無料でネット上に公開している。
この中には2ちゃんねるで既に削除されたはずの危険なスレッドや書き込みが多数残っており、
誰かが気づいてメールで対応しなければ削除されることはない。
更にみみずんはこのような過去ログをCD-Rに取り込み、有料で売っていたという。

835 :
>>833
遅れてすいません。
これをCでどうやって組んでるのかを知りたいのです

836 :
>>835
その「ゲームとかで字幕が流れてる時」の組み方によって変わるから
一概に言えない
仕掛けたタイマーのイベント発生の間隔を変えるとか、ボタン (?) の
入力のポーリングをして時間計って出力タイミングを変化させるとか、
やりかたはいろいろある
そういうことをするには C 標準の機能ではできず、OS やライブラリ
等の機能を頼ることになる
実際的なやり方は、こんなスレでこんな質問をするお前に理解できる
とは思えないし、そんなに困難な処理ではないので自分で思い付かな
いようなら自作しようと思うのはやめた方がいい

837 :
最大値の求め方について教えてください。
配列の最大値を求めたくて
下のプログラムを作ったのですが,うまく動作しません。
for( maa=1 , qxr = qxxr[0] ; maa < 10; maa++) {
if( qxr < qxxr[maa] ) {
qxr = qxxr[maa];
qxxxr = maa;
}
}
printf("最大のq*rは%dのとき%f\n",qxxxr,qxr);
最大のq*rは0のとき0
と表示されるのですが間違っているところがわかれば教えてください。
配列は下のような感じです.
qxxr[0]=40.800000
qxxr[1]=41.600000
qxxr[2]=0.000000
qxxr[3]=0.000000
qxxr[4]=40.000000
qxxr[5]=0.000000
qxxr[6]=0.000000
qxxr[7]=40.000000
qxxr[8]=0.000000
qxxr[9]=0.000000

838 :
さPC初心者が職業訓練所で半年勉強しただけでC言語ってとれる?

839 :
aのb乗はcを求めたいのだがforの中が違うらしい
for (i=1; i<=b; i++) {
c = c * a;
}
ぼっちだから聞く友達いないのでよろしく頼みます

840 :
cの初期値は?

841 :
forの前にやりました
実行したら16行目にエラーがあるらしいのでそこだけ書きました

842 :
そこだけ見てもおかしくないから、どっか別のとこのエラーが伝播している

843 :
はじめまして.
関数に与える引数を動的に変更したいのですがどうすればいいでしょうか.
vprintfの第2引数va_listを動的に作成するようなイメージです.
具体的にはリスト構造で文字列や数値が入ったキューから,データ型に基づいて%dや%cを構築しつつ,
関数のコールスタックにデータを積み上げてvprintfを呼ぶようなことをしたいのです.
単純な表示のみであればprintfやstd::coutをキューの長さ分呼べばいいと思うのですが,
可変長引数で呼ぶ場合にどのようにすればいいかわからず困っています.

844 :
C++のメンバ関数へのポインタとインスタンスが分かっている前提として,
メンバ関数のコールスタックをインラインアセンブラで直接積んでメンバ関数を呼ぶような方法でもいいです.
アーキテクチャはx86_64gccかllvmです.

845 :
>>842
なるほど、もう一度見直してみます

846 :
5が出るまで数値を入力した時に
入力された数列を最大値と最小値を入れ替えて左から順に並べた状態にするプログラムの作り方を教えてください
配列で最大値と最小値だけを入れ替えることができないです

847 :
C勉強し始めたばかりなんですが気になってるプログラムがあります。
ttp://akabas.net/lib/CTask.aspx?id=105のページのナンバーズっていうゲームなんですが23行目から30がよく分からないんです><
どなたか解説してもらえませんか?

848 :
numbers[0]〜[3]にばらばらな0〜9までの整数を代入しているところ?

849 :
4つの整数を被らなくなるまで何度も乱数で作ってる
賢くも分かりやすくもない方法なのでむしろ自分で分かりやすいように直してみてはいかが

850 :
>>848さんそこからの行です。いまいちよくわからない。

851 :
>>846リストを使ってみてはどうかの?ソースが長くてすまんの皆の衆
struct pair{
unsigned int value;
struct pair*next;
};
struct pair*new(int arg){
struct pair*result=(struct pair*)malloc(sizeof(struct pair));
result->value=arg;
result->next=0;
return result;
}
void delete(struct pair*arg)
{if(arg->next!=NULL)delete(arg->next);free(arg);}
struct pair*find_max(struct pair*arg){struct pair*result;if(arg->next!=NULL){result=find_max(arg->next);if(result->value<arg->value){result=arg;}}else{result=arg;}return result;}
struct pair*find_min(struct pair*arg){struct pair*result;if(arg->next!=NULL){result=find_min(arg->next);if(arg->value<result->value){result=arg;}}else{result=arg;}return result;}
void print(struct pair*arg){fprintf(stdout,"%d ",arg->value);if(arg->next!=NULL)print(arg->next);}
int main(int argc,char**argv){
struct pair*head=NULL,*cuurent=NULL,*max=0,*min=0;
while(1) /*Loop of input*/
{
char buffer[256];
unsigned int input;
sprintf(buffer,"Input a number:");
fputs(buffer,stdout);
fgets(buffer,256,stdin); /*Receive user input*/
input=atoi(buffer);
if(head==NULL){
head=new(input); /*Allocated memory added at last */
current=head;
}
else{
current->next=new(input); /*Allocated memory added on top */
current=current->next;
}
if(input==5)break; /*Ended loop at input 5 */
}
max=find_max(head); /*Recursive find max index out */
min=find_min(head); /*Recursive find min index out */
min->value^=max->value; /* Swap the values between... */
max->value^=min->value; /* MAX */
min->value^=max->value; /* & MIN */
print(head); /*Recursive output to console */
delete(head); /*Recursive free the allocated memory */
return 0;
}

852 :
チェスを改造してオリジナルルールを追加してネット対戦をしたいのですが
通信対戦が可能な基本的なチェスができるソースコードどっかにありませんか?

853 :
kansu1(){
int i;
for (i=1; i<=2;i++){
printf("kansu1のi=%d\n",i);
}
return;
}
main(){
int i;
for (i=1; i<=5;i++){
printf("mainのi=%d \n",i);
kansu1();
}
}
このプログラムの変数iをグローバル変数にするためには,
int i;
kansu1(){
for (i=1; i<=2;i++){
printf("kansu1のi=%d\n",i);
}
return;
}
main(){
for (i=1; i<=5;i++){
printf("mainのi=%d \n",i);
kansu1();
}
}
であってますよね?
グローバル変数にしたときの続行結果が
mainのi=4
kansu1のi=1
kansu1のi=2
がループするような結果になります。
グローバル変数にすると,なぜこうなるのでしょうか?

854 :
kansu1が終了した時点でiに何が入っているか考えれば分かるよ

855 :
終端文字 \0 の意味がよくわかりません・・・・。
苦しんで覚えるC言語というサイトで勉強しているのですが、
#include <stdio.h>
int main(void)
{
char str[6] = {'M','A','R','I','O','\0'};
printf("%s\n",str);
return 0;
}
実行結果:MARIO
もしも文字列にEOSがなかった場合は、配列の先まで文字列として扱われるので、
偶然にどこかで0(EOS)が見つかるまでは、
延々と文字列が表示され続けることになり、とても困ります。
↑これの意味がよくわからないです。

856 :
どなたかこの問題を解いて下さい…
お願いします
三つのint型整数の最小値を返す関数min()を作成しなさい。ただし、二つのint型整数の小さい方の値
を返す関数minof()も作成し、min()はminof()を必ず2回呼ぶものとする

857 :2012/10/31
すみませんがあげさせて頂きます。
TOP カテ一覧 スレ一覧 2ch元 削除依頼
使いやすいエディタって何よ? in難民板 (227)
iTunes for Windows@pc2nanmin (228)
サケタニスレ (312)
【セットアップ】丸紅PC総合スレpart6【カスタマイズ】 (874)
DYDコピーガード・・・ (591)
デスクトップ晒しスレ@pc2nanmin (201)
--log9.info------------------
【道産子】ゆうちゃんの復活を心から応援するスレPart2【ゆうキッス】 (300)
アイドル時代の西村知美 2 (276)
【微笑み天使】堀ちえみ2【ミニスカ】 (212)
【微笑み天使】堀ちえみ【窃盗団】 (627)
80年代のアイドルの地位 2 (366)
【Wink】鈴木早智子【MY TURN】Vol.8 (731)
【私星伝説】真璃子【あなたの海になりたい】 (203)
【Rアイドル】昔はよかった。 (249)
【元ZONE】MIZUHO【ドラマー】 (663)
私の胸で秋山奈々目一杯抜いて (330)
奥菜恵 (447)
◆内気なキュービッド◆島田奈美3◆ (506)
【一番輝いてね♪】藤谷美紀【応援してるからね♪】 (304)
白鳥智恵子 (443)
田村英里子 (393)
【SLOW WALK】 本田美奈子 第20幕 【愛が聞こえる】 (898)
--log55.com------------------
エイベックスの商品を絶対に買わない人の数→
途中で曲がかわってしまう曲
校歌の良い学校ってどこですかねえ?
ビブラートがキモい歌手
おまいらw「君が代」をオリコン1位にしようぜww
【AKB48】岩田華怜応援スレ★1【避難所】
元音楽業界人だけど質問ある?
■ライブハウスのドリンク代ってどうよ?■