C言語なら俺に聞け! Part 〈58〉

このエントリーをはてなブックマークに追加
1前スレ995
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

コンパイラを探しているなら >>2-13 を。
C machineはCに非ず

上記を逸した場合の結果は激しく未定義だゴルァ!!

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

前スレ C言語なら俺に聞け! Part 〈57〉
http://pc2.2ch.net/test/read.cgi/tech/1053725121/
2前スレ995:03/06/06 22:41
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
乙〜(^o^*)
4デフォルトの名無しさん:03/06/06 22:42
おめ
おつ
6前スレ995:03/06/06 22:43
おい、人は居るんじゃねーか(゚Д゚)
どいつもこいつも物臭ばっかりだな
7デフォルトの名無しさん:03/06/06 22:44
>>6
Yahoo!BBなんだよ・・・立てられた試しなし。
8デフォルトの名無しさん:03/06/06 22:45


218 名前:デフォルトの名無しさん :03/06/06 22:40
#include <stdio.h>
main()
{
int a;
for(a=0;a<=25;a++;){
printf("%d"\n",a);
}
}

このソースのどこが悪い!?


219 名前:デフォルトの名無しさん :03/06/06 22:42
>>218
"の数
9デフォルトの名無しさん:03/06/06 22:46
9げっと
10そこの219:03/06/06 22:47
>>8
なんだ文句あるか?
確かにforでセミコロンが一つ余計だが。
11デフォルトの名無しさん:03/06/06 22:52
いいぞ。やれやれ。
>>8>>10
 t2
δA=∫  {(∂/∂x)Lδx+(∂/∂v)Lδv}dt
t1
プログラムにすると・・・・・めんどくせ
やぁ、なんか用かい?>(∂/∂x)
δA=0

以上。
やっぱできねぇなぁ
前スレで、「UNIXでSJISで"為替"などが文字化けする」質問に答えてくれたひと、
ありがとうございました。携帯だったので遅レス。
17デフォルトの名無しさん:03/06/07 09:47
前スレでreturn,exitの質問に答えてくれた方、ありがとうございました。

ところで、プロセスと関数の違いがよくわからないのですが、
プロセスはプログラムを実行している状態のことで、
プロセスの中で関数が処理されているという理解でよろしいでしょうか?
18たく:03/06/07 10:12
正常終了は普通に終わることだと思うのですが、
異常終了って何ですか?
どういうときに発生するのですか?
具体的に教えてください。
よろしくお願いします。
>>18
一般保護例外とか。
プロセスが殺されたりとか(unixならkill/winならタスクマネージャ等)。
>>17
(Cの)関数はC言語の概念。プロセスはOSの概念。
ごちゃまぜに理解してはいけない。
CだけでなくOSの本も読むべし。

>>18
正常に終了できなかったときに発生するのでは。
>>17
関数の実行(処理)単位は「スレッド」。
実行するためのリソースの単位が「プロセス」。
return はスレッドの処理を関数から抜けさせる。
main関数からスレッドが抜けると、プログラムは終了する。
プログラムが終了すると、プロセスが解放される。

exit()はどの関数に居ても、強制的にプログラムを終了させる。
「プロセス」って言葉はOSによって意味にズレがあるからなぁ。
黄色い看板
それはプロミス
w
「へるぷみ〜だよー」
29デフォルトの名無しさん:03/06/07 14:47
対象のファイルの内容を、「スペース(連続しているスペースも含める)、
改行、タブ」ごとに区切って表示するプログラムが課題になりました。
連続したスペースなどを別々に評価するプログラムはすぐできました。
つまり、対象のファイルを
line1word1_line1word2
line2word1__line2word2
とすると(_はスペースとする)、正しくは
1:line1word1 2:line1word2 3:line2word1 4:line2word2
となるべきところが、
1:line1word1 2:line1word2 3:line2word1 4: 5:line2word2
となるプログラムです。そこで、これを修正すべく、文字列を
1文字ずつ評価する際に、一つ前の文字がスペース等であったかどうかを
記憶する変数を用いて、>>30のようにしたのですが、もっとスマートに
表現する方法はないものでしょうか?

なお、省スペースのため、コマンドライン引数の数のチェックや、
ファイルオープンエラーなどは省略しております。
filednumber→区切り番号
check→前の文字がスペース等であったかのチェック。デフォルトで0
#include <stdio.h>

main(int argc,char *argv[])
{
int fieldnumber=1,check=0;
FILE *fp;
char ch;

fp=fopen(argv[1],"r");
printf("field%d : ",fieldnumber);
while((ch=fgetc(fp))!=EOF){

if(ch==' '||ch=='\n'||ch=='\t'){
if(check==0){
fieldnumber++;
printf("\nfield%d : ",fieldnumber);
check=1;
}
}

else{
check=0;
putchar(ch);
}
}

printf(" <<<end of file>>>\n");
fclose(fp);
}
3129:03/06/07 14:50
これによって、一応
line1word1_line1word2
line2word1__line2word2
は、正しく
field1 : line1word1
field2 : line1word2
field3 : line2word1
field4 : line2word2 <<<end of file>>>
と表示できるようになったのですが、どうもまわりくどいような気が
してならないのです。どうか、よろしくお願いします。
>>29
fgets()で読みこみ、sscanf()でパース。
sscanf()はどこまで読み出したかを知ることができるって辺りがポイント。
つーか、fscanf()でいいじゃん。
3429:03/06/07 15:25
>>32
こんな便利な関数があったのですか…<sscanf()
僕が使っている独習C(1994)という本には載っていなかったので、今しがた
検索してきましたが、ぱっと見ただけでも、今よりきれいなソースになりそう
でした。もちっと検索先を読んできます。

ありがとうございました。
>>34
全標準ライブラリ関数の一覧がないの?
はるひこ本でさえあるのに。。。
3634:03/06/07 16:02
索引をひきましたが、fscanf()はあったもののsscanf()は無い様でした。
本が古いせいなのでしょうか…

いずれにせよ、ファイル入出力の項に入ったところのため、fscanf()、
sscanf()のどちらも初見の関数なので、今から勉強はじめているところです。
1994年なら古いということはない。
3834:03/06/07 16:14
ということはもしやクズ本?ガクガクブルブル

Herbert Schildt という人の Teach Yourself C なる本の邦訳で、
独習C 翔泳社発行、1994/09/30初版1刷、1997/04/20初版7刷です。
先輩にもらった本なのですが、素直にK&R買ったほうがいいかも…?

今急に不安になって索引再度確認しましたが、やはりsscanf()は無い模様でした。
>>38
一冊で済まそうなんざ虫が良すぎるぜぃ。
関数の簡単な説明ならhttp://www.bohyoh.com/CandCPP/C/Library/index.htmlをみればいいかも。完全じゃないけど。
URLエンコードするにはどうすれば?
>>41 RFC 読め
予想通りのレスでワラタ
>>38
標準関数を全部網羅してなかったからといってクズ本になるわけじゃない。
だがその本は読んだことがないのでクズ本じゃないともいえないw
で、買うのならK&RよりPractical Cをお薦めする。
http://www.oreilly.co.jp/BOOK/cpra/
これね。
>>43
そこ笑うとこじゃないよ
46デフォルトの名無しさん:03/06/07 19:15
gccっていうコンパイラはインストールしたんだけど
初心者向けでフリーのエディタって何でしょう?
>>46
kwrite
48_:03/06/07 19:21
4946:03/06/07 19:32
すいません
win用を・・・
そ  れ  な  ら  メ  モ  帳  が  あ  る  だ  ろ  う  が
>>49
TeraPad
>>49
xyzzy
5346:03/06/07 19:56
>>51-52
ありがとうございます。
さっそく試してみます。
>>53
杜やvectorであさっていろいろ使って自分にあったものを探せばよろし。
ただなんだし。
スレ違いな質問はスルー推奨
56預言者:03/06/07 20:02
57デフォルトの名無しさん:03/06/07 20:40
58デフォルトの名無しさん:03/06/07 20:50
Cで一応プログラミングようになったんだけど、
もうプログラミングする課題が尽きました。
課題を出していりるサイト知りませんか?
もしくは、課題を出してもらえませんか?
簡単なのでも結構ですので。
宿題スレに投げられた問題をやってみるとか。
>>58
>>57のリンク先にゆけ
61デフォルトの名無しさん:03/06/07 21:16
1〜10の中でランダムに一つ選ぶってのは
どの関数を使うんですか?
記述を教えてください
>>61
rand()%10+1
>>58
なんのためにプログラミング勉強してるんだろ。
課題なんてやってないで、とっとと自分の好きなソフト作ればいいのに。
課題をとくのを目的にプログラムやってるのだろうか…
64sage:03/06/07 21:39
n元一次方程式の解を求めるプログラムを作ってください
>>64
だれが作るか。
ボケが。
visual c++.netです
コンボボックスのドロップダウン型でドロップダウンした時の一番上の選択するやつのnIndex
って0ですよね・・・?そしたらドロップダウンしない普通の入力欄のnIndex
っていくつですか?−1でやるとエラーでちまうんですばい
多分すれ違い加茂
>>66
スレ違いですばい
1嫁ですばい
69デフォルトの名無しさん:03/06/07 22:48
#include <stdio.h>

void main()
{
  int  cnt;

  int  score[5];    /*  箱を5つ分、用意しています。 */



  score[0] = 86;   
  score[1] = 65;   
  score[2] = 44;   
  score[3] = 92;   
  score[4] = 72;   

  for (cnt = 0; cnt < 5; cnt++) {
    printf( "%d人目の数学の得点は%dです\n", cnt + 1, score[cnt] );
  }
}

なんでかコンパイル通らないんですけど
>>69
エラーメッセージくらい書きなよ。
全角スペースを使っているからだと思うけど
7166:03/06/07 22:51
すいません他スレいきますですはい
全角スペースはインデント維持のためじゃね?
エラーメッセージ書けは同感だが
>>72
voidとmainの間、項と演算子の間もか?
はやくエラーメッセージ書いてくれ。
気になるだろ。
>>69
漏れも、このHPで勉強したなあ…
これそのままコピーしてないか?
それなら>>70で正解だと思う。
>>75
ネタじゃなくてそういうことか・・・・
<PRE>使えよー
http://www.sgnet.co.jp/c/4-2.htm
なんだここのをブラウザからそのままコピってコンパイル
とおらないとか言ってたのか。一回氏ね。
78デフォルトの名無しさん:03/06/07 23:02
ファント・ホッフ係数の計算ロジック作って。
モティロン、ポインツァを駆使して。
「サンプルコードをコピペするな。手動で入力せよ。」
なんかの雑誌に書いてあった
80デフォルトの名無しさん:03/06/07 23:04
>>78
1.ファント・ホッフのi係数についてよくわかってない
2.C言語についてよくわかっていない
のどちらか。もしくは両方。
要求がわけわからなすぎ。氏ね。
81デフォルトの名無しさん:03/06/07 23:11
int a=rand()%10;
みたいに記述して変数aに0〜9の数をランダムに代入したいのに、
実行するといつも同じ数しか代入されてません。
何かミスがありますか?しかも0です
82デフォルトの名無しさん:03/06/07 23:11
>>81
rand()呼ぶ前に、
srand(time(NULL));
入れてみ。time.hをインクルードしてな。
>>81
真っ先にsrand(time(NULL));とでもしておけ。
rand() の前にsrand()を呼ぶ
8582:03/06/07 23:13
>>83-84
ケコーンしよう
86直リン:03/06/07 23:13
やっぱり種はグローバル変数なのかな。
>>87
は?
>>88
srandで設定したものをrandで使うんだからグローバル変数なのかなと。
9089:03/06/07 23:20
VC++では違うみたいだな。
>>82-84
ケコーン おめ!
92デフォルトの名無しさん:03/06/07 23:26
#include <stdio.h>
#include <time.h>
main(void)
{
srand(time(NULL));
int a=rand()%5;
printf("%d",a);
}

こんな感じですか?
>>92
そういうこと。
でもそれじゃコンパイル通らないと思うよ。
94デフォルトの名無しさん:03/06/07 23:29
あっ、しまった。
95_:03/06/07 23:32
>>92
stdlib.h入れろ。
宣言より前に関数呼ぶな。
おい!おまいらもすごろく作りに参加汁!
http://life2.2ch.net/test/read.cgi/offreg/1054655407/l50
ちなみにこれはコピペしてひろめてくれ。
98デフォルトの名無しさん:03/06/08 00:24
#include <stdio.h>
int main(){
printf("\n今から質問をします");
getchar();
printf("何の日ですか?\n\n");
getchar();
printf( "1 : 〜の日\n2 : 〜〜の日\n3 : 〜〜〜の日");

int a;
a=getchar();
if(a==1){
printf("正解です!おめでとう!\n");
}
else{
printf("残念!正解は1でした\n");
}
}



99デフォルトの名無しさん:03/06/08 00:25
さぁ、間違い探しをしよう(ぉぃ
int a;の場所。
101デフォルトの名無しさん:03/06/08 00:31
たかがインデントなんだが・・・。
どうしてもきれいなソースにならない!!!
インデントについて詳しく書いてあるページない?
インデントがなくてみにくい

int mainなのにreturnしてない

「今から質問します」がいきなり1回改行して出てくる上にそのあと改行しない
「3 〜〜の日」の後も同様

a=getchar() int型に直ですか
a=='1'
104デフォルトの名無しさん:03/06/08 00:42
scanfで取り込んだ整数の後ろに文字を表示させたいのですが、
自動改行されてしまって上手く表示することができません。
どうすればよいのでしょうか?
意味がわからない。
ソースきぼんぬ
>>102
getcharはintで受けるべきなのだが…
107106:03/06/08 00:53
あ、ごめん、ボケてた。そのあと、if (a==1)なんてやってたな。
5問の問題を出題して、何問正解したかを答えるものです

#include <stdio.h>
main()
{

int q,w,e,r,t,a;
a=5;

printf("問題を5問出題します\n");
printf("第一問:10+10=? A.");
scanf("%d\n",&q);

if (q==20)
printf("正解です\n");
a=a+1;

if (q!=20)
printf("不正解です\n");
a=a-1;
printf("第五問:10*10*10=? A.");
scanf("%d\n",t);

if (t==1000)
printf("正解です\n");
a=a+1;

if (t!=1000)
printf("不正解です\n");
a=a-1;

if (a==10)
printf("おめでとう!全問正解です!");

else if (a==9)
printf("4問正解です。");

else if (a==8)
printf("3問正解です。");

else if (a==7)
printf("2問正解です。");

else if (a==6)
printf("1問正解です。");

else
printf("0点です");

return 0;
}
110104:03/06/08 00:55
56です。
と表示させたいんです。

int n;
scanf("%d",&n);
printf("です。\n");

これだと、

56
です。

と表示されてしまうのです。
こんな感じなんですが、実行すると第一問の答えを20と入れても進まず、
もう一度数字を入力しなきゃいけなくなります。
2つ入力すると次の問題に進みますが・・・

第一問の際に1問目の答えの20、続けて2問目の答えを入力すると2問目は正解と言われます。
続いて2問目が出てきますがこの時3問目の答えを答えないと3問目が不正解になります。
一つづつ問題と答えがずれてしまうんですが何故ですか?
5問目になると強制終了します
(^_^;)
if (q==20)
printf("正解です\n");
a=a+1; /* ←必ず実行されるけどいいの? */

if (q!=20)
printf("不正解です\n");
a=a-1; /* ←必ず実行されるけどいいの? */

こういうのはifとelseにしよう。
あとa=a+1はa++、a=a-1はa--と書いた方がよい。
>>110
printf("%dです。\n", n);
正解でも不正解でも a は変わらないのね。
>>115
1足した後に1引くからな(笑)
aを0から初めて、正解した数だけ足したら?
んで、最後に

if(a == 5){
  printf("全問正解です!\n");
}
else {
  printf("%d問正解です。\n",a);
}

ってすんのさ。
118104:03/06/08 01:08
>>114
scanf関数の中はどんな形にすればいいんでしょうか。
119108:03/06/08 01:20
どうもです。

>113
printf("第一問:10+10=? A.");
scanf("%d\n",&q);

if (q==20){
printf("正解です\n");
a=a++;
}

else {
printf("不正解です\n");
}
こんな感じでいいんでしょうか?
120108:03/06/08 01:22
>117
あーなるほど、そういうやり方も出来ますね。
簡潔なモノを書けるよう無い頭振り絞るようにします


それで、問題と答えがズレてしまうのは何故なんでしょうか・・・?
>>119
> a=a++;
違う。これじゃ有名な未定義コードになってしまう。
a++;とだけ書く。
もっと言えば、5問の問題の文字列と正解を配列にいれといて、
forで回したほうが完結だし、あとで問題を増やすのも楽チンだな。
>>118
以前のままで。
さらに言えば、問題の数式の部分だけ別の配列にいれて、
出題時にその数式を元に答えを計算すれば、
問題と答えが食い違うことがなくなるな。

そうとう大変だけど。

ズレるのはなんでだろうねぇ。
>>108>>109の間が肝心なところなんだろうけどぶった切れてるからわからない。
今ではelseの登場によってソースも変わってるだろうし。
125デフォルトの名無しさん:03/06/08 01:49
なんで a = 5 からスタートしてるん?
どういう考えか興味ある。
a5=英語のテスト
>>121
      ヽ ̄ ゙̄\
       \  ヽ \
         ヽ    ゙!
          /      |
       /     ,.イ
      ∠___/ :|`ヽ.、
          ノ     '!   \-、
     _,.=''1      ヽ,   `'
      ヽ'" i|       |
         !       |
         呼んだ〜?
#include <stdio.h>
void main(void)
{
int a;
int b;
char c;
////////////////////////////////////////////////////////////////
// 四則演算をするための値を入力            //
////////////////////////////////////////////////////////////////
printf("1つ目の数値を入力してください=");
rewind(stdin);
scanf("%d",&a);
printf("2つ目の数値を入力してください=");
rewind(stdin);
scanf("%d",&b);
printf("演算子を入力してください=");
rewind(stdin);
scanf("%c",&c);
////////////////////////////////////////////////////////////////
//  結果の出力                //
//////////////////////////////////////////////////////////////// 
printf("\n\t\t実行結果の表示です\n");
if(c!='+')
{
if(c!='-')
{
if(c!='*')
{
if(c!='/')
{
if(c!='%')
{
printf("\t\t演算子がおかしいです。");
}
else if(b==0)
{
printf("\t\t%d%c%d=0では割れません。",a,c,b);
}
else
{
printf("\t\t%d%c%d=%d",a,c,b,a%b);
}
}
switch使いなよ。
else if(b==0)
{
printf("\t\t%d%c%d=0では割れません。",a,c,b);
}
else
{
printf("\t\t%d%c%d=%d",a,c,b,a/b);
}
}
else
{
printf("\t\t%d%c%d=%d",a,c,b,a*b);
}
}
else
{
printf("\t\t%d%c%d=%d",a,c,b,a-b);
}
}
else
{
printf("\t\t%d%c%d=%d",a,c,b,a+b);
}
printf("\n\n\n\t\t\t\t\t\t");
}
間違ってたら指摘してください。
課題で先生に
ifとfor文しか教えてないから他のは使うなといわれてます
0の時の判断もホントはしなくていいのですが
stdinにrewindって使えるの?
五則演算
rewindはしないといけないといわれまつた
全部==にしときな
そっちのほうが分かりやすいからでつか?       
というか、!= にするメリットってあるか?
演算子に変なの入れた時
>>139
elseでいいだろ
フローチャートも書かされてるんでif(c==+)if(c==-)if(c==*)とやってくと
縦に長くなり1枚に収まらないのでネストが一番かと
142104:03/06/08 03:23
>>123
そうすると、
56
56です。

と表示されるのですが・・・。
フローチャート指向プログラミング
スマソ。今度からはめんどくさがりません
145デフォルトの名無しさん:03/06/08 03:37
UNIX系でよくある設定ファイルを読み込むロジックって
なにか一般的な方式(ライブラリとか)あるんでしょうか?

例えばこんなの
##########
# This is your ID info
##########

# your name
firstname=Taro
familyname=Yotsuya

# your birthday
year=2003
month=6
#day=5
day=6

聞きたいのは「こうすれば出来るじゃん!」っでなくて
「普通こうやるよねー」とか「これ使うといいよん」って意見で。
>>142
仕方がないかと。
>>145
strtok か strchr を使うといいかと。
>>142
それはそういうもの。
入力の行と、出力の行は別々になる。これはどうしようもない。

どうしても嫌なら、プログラムの1番最初と、printfの直前に
system("clear");
とでも入れておけ。
Ctrl+D(Windows なら Ctrl+Z だっけ?)で入力終了すれば
改行されずにすむね。
A:Ctrl+D  B:Ctrl+Z
C:Ctrl+S  D:Ctrl+C

どれでファイナルアゥンサー?
コーディングスタイルで質問です
switch のときに、

switch (..) {
case 'a':
  ...

というように、 switch と case でインデントをそろえるものと、
switch (...) {
  case 'a':
    ...

のように、 switch と case で段差をつける2通りがありますが、どちらのほうが一般的ですか?
俺は下
でもどっちでもコード見る時に大差はない
153108:03/06/08 08:24
お早う

>122,124
ダイテル本持ってる人にしか解らないけどまだダイテル本の56Pのとこまでしか覚えてないんですよ
forとか解らないです。とりあえず今覚えてるので書けるかなーと思って書いてみたんですけれど。

>121
thxです

>125
今思うと何ででしょうね・・・・
自分でも解りません
154108:03/06/08 08:25
全文です>124
#include <stdio.h>
main()
{

int q,w,e,r,t,a;
a=0;

printf("問題を5問出題します\n");
printf("第一問:10+10=? A.");
scanf("%d\n",&q);

if (q==20){
printf("正解です\n");
a++;
}

else {
printf("不正解です\n");
}

printf("第二問:10*10=? A.");
scanf("%d\n",&w);

if (w==100){
printf("正解です\n");
a++;
}

else {
printf("不正解です\n");
}
155108:03/06/08 08:26
printf("第三問:10÷10=? A.");
scanf("%d\n",&e);

if (e==1){
printf("正解です\n");
a++;
}

else {
printf("不正解です\n");
}

printf("第四問:10-10=? A.");
scanf("%d\n",&r);

if (r==0){
printf("正解です\n");
a++;
}

else {
printf("不正解です\n");
}
156108:03/06/08 08:26
printf("第五問:10*10*10=? A.");
scanf("%d\n",t);

if (t==1000){
printf("正解です\n");
a++;
}

else {
printf("不正解です\n");
}

if(a == 5){
printf("全問正解です!\n");
}
else {
printf("%d問正解です。\n",a);
}

return 0;
}
qwertと5つも意味不明な名前の変数を設ける理由が判らない。
>>157
この変数を選んだ理由も知りたい(w

もっと分かりやすい変数名をつけよ。
変数名は ans とかのほうがわかりやすいな。
それと、ans[5]にして1問めから順にans[0], ans[1]…といれていったほうがいいかな。
で、ズレのはなんでだろう。漏れもわからん。
ちなみにifとelseの間は普通は1行空けたりしないぞ。

あと、みなさんへ。
ソースを晒すときは、めんどうでなければインデントは全角スペースで。
unixならviで:%s/ /  /g
秀丸ならタブとかスペース4個を全角スペース2個にすればよろし。

めんどいけど。
161デフォルトの名無しさん:03/06/08 12:35
char *str = "HelloWorld";

char str[] = "HelloWorld";
の違いがわかりません。

どうなんですか?
162YUIS:03/06/08 12:38
ONLINE DVDSHOP YUIS
http://www.dvd-yuis.com/
豊富な品揃え!新品アダルトDVDが800円〜!
http://www.dvd-yuis.com/
最速発送!!すぐ届く!!
http://www.dvd-yuis.com/
よろしくね!!!
>>158
俺には分かるぞ!
喪前のキーボードのQから右に読んでみそ。







( ´A`)

Q J K X B M W V Z
166デフォルトの名無しさん:03/06/08 13:09
>>163
ありがとうございます。

sizeof()でサイズをとりたかったんですけど
んじゃあ、ムリなんですか?

sizeof(str)だと4(ポインタのサイズ?)が返ってくるんで。。
167無料動画直リン:03/06/08 13:13
168デフォルトの名無しさん:03/06/08 13:13

あなたが探してるのってこれだよね?この中にあったよ♪
http://alink3.uic.to/user/angeler.html
http://angelers.free-city.net/page002.html
>>166
上ならポインタのサイズ、下なら配列のサイズ
>>164
俺のマシンのrootのパスワードだ ( ´A`)
最後にyがつくけど
>>154
こういうんじゃダメなの?

#include <stdio.h>
main()
{
  char *mondai[5] = {
    "第一問:10+10=? A",
    "第二問:10×10=? A",
    "第三問:10÷10=? A",
    "第四問:10−10=? A",
    "第五問:10×10×10=? A"
    };
  int kotae[5] = {10+10,10*10,10/10,10-10,10*10*10};
  int i,in,count=0;

  printf("問題を5問出題します。\n");
  for(i=0;i<5;i++){
    printf("%s",mondai[i]);
    scanf("%d",&in);
    if(in==kotae[i]){
      count++;
      printf("正解です\n");
    }else{
      printf("不正解です\n");
    }
  }

  if(count==5) printf("全問正解です!\n");
  else printf("%d問正解です。\n",count);
}
>>171
 だらけでみにくいぞ
173172:03/06/08 13:37
あら・・・・
>>171
&nbspだらけでみにくいぞ
>>172
何が?
>>174
>>171が。charの前とかA"の前とか。ほかにもいろいろ。
#include <stdio.h>
main()
{
 char *mondai[5] = {
"第一問:10+10=? A",
"第二問:10×10=? A",
"第三問:10÷10=? A",
"第四問:10−10=? A",
"第五問:10×10×10=? A"
};
 int kotae[5] = {10+10,10*10,10/10,10-10,10*10*10};
 int i,in,count=0;

 printf("問題を5問出題します。\n");
 for(i=0;i<5;i++){
 printf("%s",mondai[i]);
 scanf("%d",&in);
 if(in==kotae[i]){
 count++;
 printf("正解です\n");
}else{
 printf("不正解です\n");
}
}

 if(count==5) printf("全問正解です!\n");
 else printf("%d問正解です。\n",count);
}
nbspのあとにセミコロンがないから。
>153で教本?の最初の方までしか覚えてないっぽいからcharとか知らないんじゃない?
漏れダイテル本持ってないから解らんけど
>>164
それか!(w
そんな命名方法考え付くのに感心する。
今まで一人でプログラムを組んでた時は、統一性のない汚いソースでも別に良かったんですが
複数でプログラムを組むことになったので、読みやすい綺麗な書き方を見本にしたいので
参考になるサンプルソースないですか?
ないです。
>>180
*BSD をハックする。
>>180
2項演算子の左右は空白を空けろ
forやifにぶら下がる処理は必ず{}でブロック化しろ
{}をif()の横から始めたり下から始めたり場所によって違うのはやめろ
コンマやセミコロンでデータや式を列挙する場合は空白を空けろ
変数の命名法はある程度の指針を決めておけ
コメントはちゃんと書け
めしは上手く作れいつもきれいでいろ
>>180
設計をきちんとしる。コーディング規約つくれ。クロスレビューしる。
185デフォルトの名無しさん:03/06/08 17:19
http://jbbs.shitaraba.com/computer/6765/
Cの初心者ならここに来るしかない!
質問、雑談何でもOK!
初歩的なことでももちろんOK!
もちろん、上級者の皆様にも来ていただきたいです。





http://member.nifty.ne.jp/yamazaki/doc/code_design/vol01.html

メンバー全員で読め。っていうか印刷して配っておけ。
>186
ノイズが多いし。ハンガリアンは嫌いだ
>>186
ファイルローカルだってさ(藁
内部リンケージだろ(藁
189デフォルトの名無しさん:03/06/08 18:14
>>188
そんくらい目くじら立てるなよ。
どうせお前も他人が聞いたら変な言葉の使い方してるんだから。
190デフォルトの名無しさん:03/06/08 18:14
Cならなんでもいいんですよね。
さっきVBに技能検定があることを知り、つい笑ってしまいました。
それは置いといて・・
Cにも検定はあるんですか?
>>190
ある。糞の役にも立たないのが。

それはそれとしてなぜ「C言語 検定」でぐぐるくらいしないのか。
>>189
スマソ

>>190
C言語検定とやらがあったと思う。名前が違うかもしれないけど。
http://www.sikaku.gr.jp/main.html

ここにあるやつかな?VBもあるね。
>>190
持ってるけど
履歴書埋めるくらいの役にしかたたない
ド素人ではありませんと証明するくらいか…
195デフォルトの名無しさん:03/06/08 18:36
Cっていきなり3級なんですね。
がんばろ
>>194
見せる相手によっては「こんなもので実力の証明にしようとしやがって」
とかバカにされるので注意な。ど素人以下の扱いを受けることあります。
>>195
だから、3級も2級も使えないって。
1級は見たことないが、こんな資格の1級まで目指すやつキモい。
>>196
そのとおりです。
198デフォルトの名無しさん:03/06/08 18:58
マジっすか、まぁもし検定受かったら
履歴書に書くときは気をつけよう。
自慢げにしなければ書いてもいいと思うけど・・・・
200デフォルトの名無しさん:03/06/08 19:01
すかさず200げと。
履歴書に200げと!って書いていい?
個人的にはどんな資格でもないよりはマシだと思うけど、
過剰なくらい資格をバカにする技術者もいるんで、注意が必要だな。
C言語の試験ってCの歴史まで出題されるあれか?
203デフォルトの名無しさん:03/06/08 19:09
>>202
マジ?確かに必要ないかもな・・・
204デフォルトの名無しさん:03/06/08 19:10
Cmachineってどうなのよ?
205デフォルトの名無しさん:03/06/08 19:13
>>204
何が?
>>187
いや、とりあえず使う人間全員で統一した見解を持つのは必要だろ?
このリンク先が気に食わないなら、自分で統一ルールを作って晒してくれ。

>>204
誰も使いたがらない、不燃ゴミだな。
207204:03/06/08 19:18
なんかうちの高校ではみんなが自由つかえるようにフリーのソフト
を使っていますとか言っているんですが、もうこの高校に入学した
時点で終わりですか?
せめて、完全じゃなくてもANSI C準拠を目指したコンパイラを使った方がいいって。
>>207
その程度で高校が終わってるかどうか判断しようとする
お前が終わってるよ。確実にな。
210204:03/06/08 19:21
>>209
いやフリーならhttp://pc2.2ch.net/test/read.cgi/tech/1035882599/1
があると思った。
マジレスするならば。
C machineは標準Cと挙動が違いすぎるのでCの学習には全く適さない。
では、プログラミング一般の学習にはどうかというと、Cは抽象度が低すぎて
これまた適さないと思うんだな。何がいいかは意見が分かれるだろうけど、
おれだったらSchemeかOcamlかRubyかPythonあたりだと思う。

結論としてCの習得にもプログラミング一般の習得にも適さないので、
C machineは使わんほうがいい、と思う。その高校が終わってるかどうかはしらんw
C Machineのctype.hを見てみたら引数を複数回評価するようになっていたけどいいのかな?
普通はisalphaなどはテーブル参照で実装すると思うけど。
>>212
別にマクロであることさえ分かってればいいんじゃない?
>>212
「普通は」は使わないほうがいい
でもあまり#ifを使っていないからみやすいぞ(笑)
C machine を実際にDLしてみた。

実装していない関数が多いことも問題点として挙げられる。
mallocはあるが、callocやreallocが無かったり、
atoi/atofはあるが、strtolとかが無い。

ただ、学校で「アルゴリズムの学習」程度ならまあ使える。
BCCやらGCCをインストールするのに比べて、設定が楽だ。
標準Cにはないグラフィック関係を、簡単に使えるのもいい。

でもC言語の勉強にはならないな。
qsortはあるのにbsearchがない・・・abortもないよぉ。
>>217
作り甲斐があるねw
よくわからんが、UNIX系のマシン1台あれば勉強できるような気もするが。
telnetしてvi(なんでもいいけど)してcc(gcc)で十分だろ。
>>183
できる範囲で構わないんだな
char *argv[]とchar **argvを違うものとするのか・・・・
222183:03/06/08 19:46
>>220
ああ、忘れてくれるな。
>>222
ま、ちょっと覚悟はしておけ。
224335:03/06/08 20:04
http://proxy.ymdb.yahoofs.jp/users/502c27bd/bc/%bf%b7%b5%ac%a5%c6%a5%ad%a5%b9%a5%c8
+%a5%c9%a5%ad%a5%e5%a5%e1%a5%f3%a5%c8+(3).txt?bcWN4M_ACg9D8MEz

今度こそコーディングは終わったのですがデバックが・・・。
エラーログが微妙。
225183:03/06/08 20:08
>>224
main関数が閉じてないんだが…
独り言?
質問じゃないならいちいちageなくても。
>>224
スレ間違えていないか?
「スレ立てるまでも・・・」じゃなかったか?
>>224
scanf("%d",&atai2");
とかなってるとこあるぞ。
>>228 ボウヤだからさ ♥
230335:03/06/08 20:25
見事にスレ間違えました。
関数呼び出しに ) がない(関数 main )
文字列または文字定数が閉じていない(関数 main )
メイン関数閉じてないのはアップする時のミスです。
コンパイラではちゃんと閉じてコンパイルしてます。
>>230
なかなかうざい方ですね。
232335:03/06/08 20:44
いえいえ、それほどでも♥
激しく質問。
メイトリックスみたいに流れるコード(数字のみ)を作りたいんだけど、、、。
234183:03/06/08 22:28
#include <stdio.h>
#include <stdlib.h>

main()
{
  line10:printf("%d\n", rand() % 10);
  line20:goto line10;
  return 0;
}
>234
せめてforかwhileで回してよ…
店頭のMSXマッスィーンを思い出す…goto
237183:03/06/08 22:47
>>235
わかるやつにはわかるんだよ。>>236とかな(w
>>237
ええとしですなw
239デフォルトの名無しさん:03/06/08 23:06
文字列の中の例えば!〜〜!の間の文字を抜き出すには
どの関数使えばいいですか?
240デフォルトの名無しさん:03/06/08 23:06
>>239
strtok
241デフォルトの名無しさん:03/06/08 23:06
文字列の中の例えば!〜〜!の間の文字を抜き出すには
どの関数使えばいいですか?
242デフォルトの名無しさん:03/06/08 23:07
>>241
strtok
243デフォルトの名無しさん:03/06/08 23:07
forかなんかで自分で書け
javaでもそんなメソッドないぞ!
>>241
strtok
245デフォルトの名無しさん:03/06/08 23:08
ありがとうございます。
簡単な記述例をおねがいできないでしょうか?
>>239
strtok
>237
わからんにゃー。MSXに触ったことにゃーし
べつに分かったからって何の意味もない。
そんなもんで威張っている奴が居たらバカ。
>>245
#include <stdio.h>
#include <string.h>

int main()
{
char str[]="I!have no!money"; /* ←必ず書き換え可能なものにすること */
char *delim="!",*p;

printf("%s\n",strtok(str,delim));
while(p=strtok(NULL,delim))
printf("%s\n",p);

return 0;
}

出力結果
I
have no
money
250デフォルトの名無しさん:03/06/08 23:19
ありがとうございます。
参考にさせていただきます。
CでXMLのデータを取り出す作業に詳しい人
教えてください。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1055071590
どうすれば 表示できるようになりますか?
>>250
ちなみに二文字以上の文字列で区切ろうとする場合にはstrtokは勧められないので注意を。
第二引数のそれぞれの文字で区切ろうとするからね。
こんなのできたっち
#include <stdio.h>
#include <math.h>

int main(int argc, char* argv[])
{
const double PI = 3.1415926535;
const int pix= 40;

for (double i=0.0; i < 360.0; i++) {
double ans = sin(i/PI/2);
int loop = ans * pix;

if (loop >= 0) {
for (int sp=0; sp < pix; sp++) {
printf(" ");
}
for (int j=0; j < loop; j++) {
printf("+");
}
}else {
for (int sp=0; sp < pix+loop; sp++) {
printf(" ");
}
for (int j=0; j > loop; j--) {
printf("-");
}
}
printf("\n");
}
return 0;
}
254名無し@沢村:03/06/08 23:40
sprintf("ある晩、二人の男が風呂に入った。
一人がもう一人のちんぽを見た。
そいつのちんぽはドス黒かった。使い古した後がうかがえた。
「おまえ、ずいぶん女を泣かせただろ?」
「いや、おれはまだ童貞だ」
そいつのちんぽはせんずりで使い古したのだった。 ");
>>253
ここはCスレだYO
CStringの文字をchar型に代入したいんですがうまくいかないです
char a;
CString b;
a = (LPCTSTR)b;
どこが悪いっすか?
スレ違い・・・・
Stringなのにcharに代入できるの?
間違えた
char a[200];
CString b = "aiueo";
a = (LPCTSTR)b;

すれ違いスマソ。
え、てかできないんすか?
259デフォルトの名無しさん:03/06/08 23:52
#defineってどういうことですか?
>>256
MFCへ
b.GetBuffer();
>>258
Cの範囲ならそれはできない。配列名に代入は不可。C++はどうだか知らないけど・・・

>>259
記号定数の定義
C++でも配列名には代入できない
>>260
了解です。MFCいってきます
と思ったけど凄いスレ進行遅い。。。
文字数取得の後どうすれば?
strncpy ヲツカエ
ああああ!わかったかも。
ちょっと試してきまつ
>>265
char型でないと使えないのでわ?
>>267
CString は LPCTSTR (const char FAR *) へのキャスト演算子をオーバーロードしてあるので
CString 「から」の strncpy でのコピーは可能。
CString 「へ」の strncpy でのコピーは(GetBuffer使わないと)無理だけど。
char a[200];
iRadioCheckId = "kakikukeko";
CString str(a);
str = str + iRadioCheckId;
a = (LPCTSTR)iRadioCheckId.GetBuffer(iRadioCheckId.GetLength());
AfxMessageBox(a);

でコンパイル通らないっす。なぜにぃ
270not 267:03/06/09 00:07
やっぱりそういう仕組みか。
>>268
サンクス。試してみます。
>>269
配列名には代入できないって言ってるでしょ。
で、だ。何で CString から char 配列にコピーしたい理由は何なんだ?
「何で」を消し忘れ
URLエンコードするのに使います
URLエンコードは元のままの方がしやすいと思うけど・・・
それともchar *で受け付けるライブラリでも使うの?
元のまま・・・?
ttp://www.geocities.co.jp/SilkRoad/4511/vb/urlenc_c.htm
使おうと思ってるんですけど他にあるんすか?
みなきゃよかった(T_T)
え?え?
つーかおまいらスレ違うだろ。
>>278
まぁ、自覚してるからいいんじゃない?

>>277
>これはあくまでも「参考」程度にとどめて、悪いところを直して使って下さいね。
なので、コピペでそのまま使わないで、
自分で関数を作るか、他のを探すかするのを勧める。

まぁ、よりひどいのを作られても困るので一応何とかする方法を。
csource の型を const char* に変更して
(ついでに cbuffer の型を char* に変更して)、
 sprintf(ctemp, "%%%02X", *(csource + lcount));

 sprintf(ctemp, "%%%02X", (unsigned char)*(csource + lcount));
に変更してやれば、
csource へ CString オブジェクトをそのまま渡せるはず。
>>277
ダメソースの見本だな。
URLエンコードってもっと単純なはずだよね?
英数字とスペースと_-.*以外を%+二文字の16進数字列にして、スペースを+におきかえるだけだよね?
マジでサンクスです!
すれ違いの馬鹿野郎にまじでどうもです。
早速ためすぞこらー
エラー大量産出。。。
CのコードC++に書き換えなきゃだめかぁ。
>>276
で言ってた方法とは??
XMLのデータを取り出す方法に詳しい人おしえてくれー
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1055071590
Cでやってるから ここでいいっしょ?
287デフォルトの名無しさん:03/06/09 01:01
>>285
自分でエンコードするためのコードを書くんだと思っていたから。
どうやら>>276の二行目みたいだから>>276は忘れて。
了解です。これ以上スレ違いも痛いんで他スレに行きます。。
どもでした!
>>283
その程度の仕様っすか。

ならこんなんでええな。
全角空白を半角空白かタブにでも置換してから使うように。

#include <stdio.h>
#include <ctype.h>
#include <assert.h>

void UrlEncode(char *dst, size_t size, const char *src)
{
 size_t iDst;
 size_t iSrc;
 char let;

 for(iSrc = iDst = 0; src[iSrc] != '\0'; ++iSrc) {
  let = src[iSrc];
  if(isalnum(let) || strchr("_-.*", let) != NULL) {
   if(iDst >= size - 1) {
    break;
   }
   dst[iDst] = let;
   ++iDst;
  } else if(let == ' ') {
   if(iDst >= size - 1) {
    break;
   }
   dst[iDst] = '+';
   ++iDst;
  } else {
   if(iDst >= size - 3) { /* 3 はエンコードのサイズ */
    break;
   }
   sprintf(&dst[iDst], "%%%02X", (unsigned char)let);
   iDst += 3;
  }
 }
 assert(0 <= iDst && iDst < size);
 dst[iDst] = '\0';
}
>>277
ロジックそのままでいいから、CStringかstringをつかって書き直したほうがいいな。
わ。。
ちょっくら試してみます!今度こそうまくいけぇ〜
sprintfって便利だよなぁ。
ビルドエラータスク100件越えますた・・・
Unicode識別子はサポートされないエラーが大量発生です。
環境はVS.NETです。
>>294
全角スペースを半角スペースに置き換えた?
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
もうまじ馬鹿と言って下さい
あぁもう自分が嫌
286ですが
やっぱりだめですか?
>>298
んーと、parse 目的なの〜?
Windows なの〜?

だとしたら、msxml なんかに任せたほうがいいんじゃないの〜?
引数がよくわからんです
char *dst,←文字へのポインタ?
size_t size,←文字数?
const char *src←これ何・・・?
>>300
そのポインタが指す先の内容を書き換えないという宣言だ。
もし書き換るようなそぶりを見せたらコンパイラが叱ってくれる。
srcを変換したものをdstに入れるんじゃないの?
sizeはdstの領域の大きさだと思う。
303301:03/06/09 01:42
う。言葉足らず。301はconst char *srcについてな。
304289:03/06/09 01:50
>>301-302
説明あんがちょ。
>>299
parse目的です。
306デフォルトの名無しさん:03/06/09 02:07
char型をint型に変換する関数は知っているんですが、その逆、つまり
int型をchar型に変換(文字列のポインターを渡す?)関数ってのを知りたいのですが
教えてください。
多分sprintf
馬鹿でスマソ
UrlEncode();の引数には何をいれれば・・・?
srcを変換した物をdstに入れるって事は
dst=変換後に入れる変数のポインタ
size=その大きさ
src=変換する文字列へのポインタ
でよい?

あとこのプログラムCStringを渡せないっすか・・・?
だからスレ違いだってば。
>>308
secとしては渡せるけどdstとしては渡せない。
>>309
まじすいません。あと少しだけおながいします
ここまで来て他スレで聞いたらわけわかんなくなっちまうんで

>>310
確かに渡せました。

>>289
この関数日本語入れるとエラー出ちまいます。
マジでお手数ですが直していただけるとうれしいです。
それまで自分で直してみるけどむりっぽ。。
let を unsigned char にしてみて。
>>311
sizeは充分な大きさにしている?
最悪srcに渡す文字列の3倍必要だけど
>>312
できました!マジサンクスです!!
>>313
三倍確保してます
と、喜びもつかの間
%E3%81%82←Googleのエンコード
%A4%A2←Yahoo!のエンコード
%82%A0←上の関数のエンコード
ぐぐるのエンコードにできまつか??
やってみたらよかんべ
>>315 できます。
>>315
何がしたいのか知らんが、GoogleだってSJISで渡せば同じになる。
できるんすか?!
SJISで渡す方法はどうすれば??
とりあえず検索したら
ttp://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/j/jis2sjis.html
こんなんでてきたんすけど違うかなぁ。。
上の関数ではJISを使ってるんですか?
とりあえずCと関係ないと言っておきます。
S-JISで渡す方法?
投稿フォームのあるページをS-JISで書けば多くのブラウザはS-JISで送ると思うけど・・・

Cと関係ないね。
なにぃ・・・。
|  |
|  |_∧
|_|ω・`) <意地悪しないで教えてほしぃぽ
|  と )
| ̄|u'   旦
""""""""""
てことはプログラム上でやるのは無理・・・?
URL エンコードってものが良く分かってないような…。
いずれにせよスレ違いなのでお帰り下さい。
その関数は漢字のエンコード方法を知らない。
問題は、あんたの使っている環境だ。
>>324
まじでもうちょっと頼みます。
いまさら他にも行けないので。。。
プログラムが分かるように変換とまでしか分かってないです

>>325
環境って何を書けば・・・?
VS.NET WinXP IE6
とかですか??
文字コードを統一したいのならNKF32.DLLでも使えばいいのでは。
http://www.vector.co.jp/soft/win95/util/se020949.html
>>326
まず何がしたいのか書け。
URLエンコードなら、既にできてる。
ああああ!
意味が分かった!SJISで渡したら確かにエンコード結果一緒でした。
ググルはUnicodeでやっとりました。。
ShiftJisの文字列を関数に渡せばShiftJisがエンコードされるし、
EUCの文字列を関数に渡せばShiftJisがエンコードされるし、
・・・

自分が渡した漢字がどんなコードかも判ってないなら先ずはそこからだな。
>>328
ソフト見てもらったほうが早い気がするんで上げます
http://ex.2y.net/guguruno.zip
>>331
見ないよ。
がーん。めっちゃ簡単なプログラムなんで
さらっと見ていただけたらいいんすけど。
じゃあ口答で。。
ソフトで検索ワード入れてアドレス直接精製して
そこから直接ぐぐる検索するためにソフト作ってます。
・・・・・Googleのトップページをダウンロードしてちょこっとソースいじるだけでよさそうな・・・
それやろうと思ったんすけどどうやればいいのか
さっぱりわからんかったんでアドレス精製しようと
思ったんです。
336デフォルトの名無しさん:03/06/09 18:37
http://jbbs.shitaraba.com/computer/6765/
Cの初心者ならここに来るしかない!
質問、雑談何でもOK!
初歩的なことでももちろんOK!
もちろん、上級者の皆様にも来ていただきたいです
>>335
何でそんな面倒なことをCでやろうと思ったのかよくわからん…
もっと楽なのがあるだろうに。Perlだとかなんだとか。
どうしてもソフト作りたかったので。。。
さっきのDLL使えばなんとかなります?
もうイイから消えてくれ。ウザい。
すいませんでした。
おとなしく消えますです
どもでした
>>338
なるほどそういうことか。
じゃあまず、文字コードとか、エンコーディングとかでぐぐって、
そのあたりを勉強してみなさいな。複雑でいやになるから。
作ってみたかった程度で手におえるものじゃなかったりするんだよな…
CGIじゃなかったのか。
わざわざエンコードなんぞせんでもいいものを。
http://www.google.com/search?lr=lang_ja&q=はぁ?&num=100
これで十分使えるぞ。
>>343-344
幸せだね
>>343-344
http://www.google.com/search?q=は
ぜんぜん使えねぇ。
前そのまま入れたとき使えなかったのに。。。
もう欝で死にそうです
>>347
何が?

>>343-344は相手にしなくていいよ
IEで使うのだけが目的ならそれで充分っしょ?
どっちみちスレ違いだけど。
エンコードしなければ文字化けする。
実際文字化けしている。
よって使えない。
分かった?
使えないのは確かだが「文字化けする」からダメなわけではない。
しかし、.Netはurlencodeのライブラリもないのか。
>>353
あるよ。C/C++には無いみたいだが。
じゃああれだ。
もまえらが使っている有用なライブラリ公開すれ。
まずは>>356から。
終了
標準ライブラリ
winmm.lib
音鳴らすのに今日初めて使ってみた
cygwin1.dll
oreno.dll
関数の引数で
foo(void *bar) {

というのを見かけたのですが、 この void 型のものはどういう型を受け取ることが出来るのですか?
void型じゃない。
>>361
いろいろ
intとかcharとか
関数に渡す時は、キャストすんのかな
intやcharはだめだろ。キャストすれば渡せるけど危険。

>>361
ポインタなら何でも
>>361
void * … int や char などと違って、
       ポイント先のバイト容量が不明なポインタ型
>>365
ポインタの++できんつーことか? 1なら charとかわらんな
そういえばsizeof(void)ってできるのね。
>>366
>>367
sizeof(void)が1を返すので判るとおり、確かにchar *に似た振る舞いをするね。
でも、普通のコンパイラなら警告出すんじゃない?

ついでに言うと、char *を渡して、内部でint *として参照すると
バスエラーを起こしかねないので要注意で。
void *はデリファレンスできないが。

あと、プロトタイプがあれば、別にキャストしなくても
ポインタでさえあれば何でも渡せるぞ。
誰かポインタをキャストしなければいけないと言ったか?
371370:03/06/10 12:34
void *に大してintやcharを渡せるのか・・・・警告は出るけど。
じゃあ>>363へか。
なんかどっかにvoid *の扱いはCとC++で違うってのが書いてたな。
コンパイラの違いだったかな
>>372
void *を他のポインタに代入するときのことだと思う。
char *p=(void *)0;とやるとC++ではエラー。だからmallocの戻り値も
374373:03/06/10 12:41
キャストする必要がある。
375369:03/06/10 12:44
あ、ごめんよ。void*にintとかを渡すって書いてあったな。
int *とか*がついてるもんだと思ってた。
そんな非常識なことはありえないと思って勝手に補完して読んでたらしい。
すまんすまん。確かにキャストが必要です。
>>368
gccか?
たしかgccではvoid *に対する演算が可能なように拡張されてるけど。
377デフォルトの名無しさん:03/06/10 14:22
int int377[377];
378デフォルトの名無しさん:03/06/10 15:59
c言語でπを求めたいのですが、いちばん簡単なプログラムは
どうやって書くか教えてください!!
>>378
数学の勉強しる!
>>378
double pi = acos(-1);
381デフォルトの名無しさん:03/06/10 16:05
一万桁まで求めたいです…
>>381
電気通信大学の方ですか?
>383
それが(・∀・)イイ!
386デフォルトの名無しさん:03/06/10 18:59
円周率で思い出したけどC++のint画型だけ大きさがCPUのビットを同じ記憶空間を
とるんだよね!最近のは32bitだから4バイトだけと16bit機は2バイトになる事
知らなくて大変な思いをしましたね。C++はCの要領でプログラムするやつ多いから
カプセル化していないのがいけないといったら、先輩に人のせいにするなと
怒られた。昔からずっと人のせいにするやつなんだよね俺!!!
387デフォルトの名無しさん:03/06/10 19:00
独り言age
スレ違いなだけじゃなくて、意味も不明だな。
>>386
32 ビット機が出てすぐの頃、
というか MS-DOS の時代には
殆ど 16 ビットエミュレーションで動いてたので
int は 16 ビットが普通だったな。
今でも LSI-C 試食版は 16 ビットだな。

64 ビット機では int が 32 ビットになるかと言うと、
これまた複雑な問題があってだな、
int を 32 ビットだと仮定したプログラムが多いから
int は 32 ビットのままにするのが主流らしい。
ただ、64 ビットにするコンパイラもないことはないらしい。

int のサイズは規格では
「その環境で整数を表現するのに一番適当なもの」
と決められていて、別にレジスタサイズと決まってるわけではない。
「大きさがCPUのビットを同じ記憶空間をとる」
誰か↑の一文を日本語に訳して下さい。
>>390
例外処理は認められておりません
ただちに管理者に連絡してください
>>389
微妙に誤解が含まれている。
>>392
その誤解とは何か、理由付きで指摘しないと意味のないレスになる。
intはその環境で最も高速なものでなかったか?
int=32ビットで実装しても、あるときバージョンアップで16ビット整数の扱いが劇的に最適化されて
16ビット整数の方が速くなったら、int=16ビットに変更しないといけない。

なんてことになりかねないので速度だけで選ぶわけではないと思うが…。
char *str[] = {
"one",
"two",
"three",
};
とあったときに、 str をもとにして、文字列の数(3)を調べる方法はありますか?
397デフォルトの名無しさん:03/06/11 07:48
>>396
要は配列strの要素数を得られればいいんでしょ?
sizeof str/sizeof str[0]
64bitCPUなのにintが32bitっていうのは
例によって過去の資産の絡みなんでしょうか?
399デフォルトの名無しさん:03/06/11 07:57
そういう理由の場合もある。
400デフォルトの名無しさん:03/06/11 07:58
高田社長が400ゲットだ!
おらおら、おまえらうちの商品買えよ!
s/資産/遺産/
>>398
単にコンパイラ作ってるところの都合なだけだ。
>>399
素早いレスどうもです

よく使うintに64bit割り当ててもあまり得にならない
メモリの無駄遣いとも考えられますね

64bitが必要ならlonglongで宣言してるだろうし
longlongの処理を64bitCPU用に最適に
(1レジスタで処理するように)コンパイルできていれば
それで64bitコンパイラの役目は果たしているともいえるかも
>>402
int幅が変わると調整に手間がかかりそうですね
実装によってはライブラリの書き直しとか
テストもしないといけないだろうし
そんな後先考えない実装はしないと思うよ。
>>403
仮に int が 64 Bit になれば、
long は 64 Bit 以上になる。
long long は(ry
>>406
long >= int >= short
>>397
できますた。
サンクスコ。
>>407
何を指摘したい?
411350:03/06/11 12:19
>>409
longのサイズは必ずしもintより大きくなければならないわけではないってことじゃないの?
う、
>>411のネームランは無視してくれ、このスレでの番号じゃない。
>>411
以上=「>=」
より大きい=「>」
>>411
以上という言葉の意味を辞書で引け。
なんで日本語って「>」に対応する単語が無いんだろう?
未満と以下は存在するのに...日本語の言語仕様のバグ?
超過?
ちがうか・・・
より大きいすごく大きいもっと大きい超大きいすんげぇ大きいぼっけぇ大きい
ほう、ちょーか
>>415
英語にゃ「以上」や「以下」が無いがな。
大なり小なり
とりあえず「より大きい」といっとけば。単語じゃないけど。
>>419 ワラタ
void (*signal( int sig, void (*func) (int)))(int);
この宣言文が一向に解読できない
signal is function 〜謎〜 returning void
誰か教えれ
425C語初心者:03/06/11 17:39
初めまして。今日からC言語始めようと思ってます。
んで、学ぶにあたって勉強するのにいい初心者用のわかりやすいC言語の本とかありますか?
あったら情報教えてください。よろしくお願いします
>>424
戻り値の型 void (*) (int)
 第一引数の型 int
 第二引数の型 void (*) (int)
関数名 signal
 第一仮引数の名前 sig
 第二仮引数の名前 func

void (*) (int) を typedef して考えるとシンプルになる。

 typedef void (*func_t)(int);
 func_t signal(int sig, func_t func);
>>425
この板の一番上、ローカルルールの書いてあるあたりを参照。
「推薦図書・必読書スレ」へのリンクがある。
>>426
サンクス、よく分かった。あんた神
signalは戻り値が関数へのポインタで
引数にint型変数と関数へのポインタをとる
関数ということね・・・ややこしすぎ
429C語初心者:03/06/11 17:47
>>427
ありがとです
430C語初心者 :03/06/11 18:36
誰か暇なC言語マスターの方プログラムを作ってくださいな。
再帰を利用して迷路を解く。
外部変数
int position [9][9]={
{1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,1},
{1,0,1,1,1,1,0,1,1},
{1,0,0,0,0,1,0,0,1},
{1,1,1,1,0,1,1,0,1},
{1,0,0,0,0,1,0,0,1},
{1,1,0,1,1,0,1,1,1},
{1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1}};
上の迷路で"1"が壁で、"0"が通路です。
Startは(y,x)=(1,1) Goalは(y,x)=(7,7)です。
関数 int visit(int y,int x) を使ってください。
一度通った道には2を、解の道には3を入れてください。
で、最短距離の座標と ,
壁を*、迷った所を?、解を0で表示する
プログラムをお願いします。表示にはprintfをお願いします。
431C語初心者:03/06/11 18:40
すいませんスレ間違えました。
4321:03/06/11 19:46
ポインタについていまいち理解できません。
オススメの解説ページみたいなのありますか?
>1
sighandler_tってのはGNUの拡張か。標準規格でも分かりやすいようにtypedefしておけばよかったのに。
signal()の戻り値=第2引数のシグナルハンドラへのポインタ
でいいんすか?
436デフォルトの名無しさん:03/06/11 20:41
>>430
基本情報処理の試験13年の秋か春に載ってるよ!
最近のC問題は迷路やもぐらたたきなどが出てくるようになった。
そろそろ「ねた」切れか?
int main(void){
char *a = "ABCDE";
char *b = "FGHIJK";

strcat(a, b);

printf("%s\n", a);
return(0);
}

これで実行時、エラーが出ちゃいます。
コンパイルは通るのですが・・・
>>437
ネタ決定

char *a = "ABCDE";をchar a[123456] = "ABCDE";に
439デフォルトの名無しさん:03/06/11 21:02
>>438
なんでchar aをそんなにとるんだ。コンパイラによったらそれだけでえらーじゃん。
>>437
ちゃんとコンパイラ通るけど
#include <string.h>
#include <stdio.h>

int main(void){
char *a = "ABCDE";
char *b = "FGHIJK";
char *c='';
strcat(a, b);

printf("%s\n", a);

gets(c);
return(0);
}
で確認してみな!
>>439
あんまりなネタだな…。
先生、VC7のlimits.hで
#define INT_MIN -2147483648
ではなく
#define INT_MIN (-2147483647 - 1)
って書いてあるのはなぜですか?
>>441
なんでだろうね。
負は正にくらべて範囲が一つ大きいですよって強調してるのかな?
・はじめは-2147483647と定義していた
・でもそれが間違いだと判明した
・修正担当者は引き算ができなくて、泣きながら-1を追加した

というのが真相だろう。
それは規格違反。
−32767が正解。
445デフォルトの名無しさん:03/06/11 21:30
>>444
INT_MINって規格上の最低じゃなくて、その処理系での最低だと思うけど。
だからこそわざわざマクロにしているんじゃないか。
446デフォルトの名無しさん:03/06/11 21:32
VC++6.0でもintやlongは-1が付加されているね。でもcharやshortは-128や-32768になっている
>>444
なに言ってんだこのたこ
448デフォルトの名無しさん:03/06/11 21:38
>>439
> char *c='';

これじゃコンパイル通らないよ。空の文字ってのはエラー。
カッコつけて実行速度落としてるだけ! クソだよ、こんなの
450デフォルトの名無しさん:03/06/11 21:40
>>449
何に対するレス?
下記の機能アルゴリズムを設計し,C言語により実装せよ.
「1.任意の個数のint型数値をコンソールより入力された順に保存する.
2.文字列"Sort"の入力により,入力された数値群を降順に並び替える.
3.最大値と最小値の平均値を計算し,2分探索法で検索する.」

設計指針
・ソート部,探索部は,別のアルゴリズムを採用しても利用できるように設計/実装せよ.
・コンソール入力は,scanf()を使い,文字列,記号,整数値以外は,それぞれ別のエラーコードを返し,
入力を継続するようにせよ.
・メモリ節約のため,数値保存のためのメモリは動的に確保せよ.

ここは宿題スレではない
>>449
小泉批判ですか?
あ、カッコって (  ) じゃないのか。
455デフォルトの名無しさん:03/06/11 21:48
>>449-454
藁!
もういっちょ藁w
>・メモリ節約のため
ここが意味不明。入力データ数に制限がない以上、そっちの方が
メモリ食う可能性があるんじゃないか。

>・コンソール入力は,scanf()を使い,文字列,記号,整数値以外は,それぞれ別のエラーコードを返し,
入力を継続するようにせよ.
ここも意味不明。C言語・scanfでやる以上、「文字列」以外の入力は
どうやったら可能なんだ。
457451:03/06/11 21:55
ダメだね。
ニューメリックチェックと型チェックは別モノだから、エラーコードは別にすること。
……ってか、ンなとこで早くも詰まってるの?か(w
本気でセンス無いぞ、それって…


458456:03/06/11 21:56
>>457
まさかおれに言ってるのか?
459デフォルトの名無しさん:03/06/11 21:57
>458
そうなんじゃないの?
460451:03/06/11 21:59
ヒント:
予想される関数
main
InputformConsole
CheckValid
CheckString
StroreNums
Sort
Sort_quicksort
Search
Search_tree

仕様を増やしてもいいかな?
・画面への表示は1個所で行い、エラーの際もそこで表示すること。
457はCを使ったことがないんだと思う。
なんなのこいつ>>451
463デフォルトの名無しさん:03/06/11 22:00
>460
> ・画面への表示は1個所で行い、エラーの際もそこで表示すること。
一箇所って意味ふめいだな
464456:03/06/11 22:01
>>451
何がヒントだこのタコ。
お前の設計指針がタコタコすぎてんなもん作れねーんだよ。ぼけ。
何でもいいからエラーになる入力例挙げてみれ。
C言語において、scanfで「文字列」以外の入力がありえるのか?
465デフォルトの名無しさん:03/06/11 22:02
わからんヤシだな。そんな親切な仕様はないっちゅうの。
ま、いいか。
例:
>34
入力を受け付けました。
>34.5
小数は受け付けられません。
>Soort
コマンド Soort は未定義です。
>####
コマンド #### は未定義です。
>Sort
並べ替えを行います。
>>460
何でtreeが出てきますか?
>>465
それをscanfでやるの・・・?scanf("%s",s);かい?
>>465
小数っていくつ以下の数ですか?
>>466
二分木探索?
470456:03/06/11 22:05
もう>>451は放置しようぜ…。
>>441
#define INT_MIN ((int)(-2147483648))
じゃ結果が未定義だろ?
>>468
ネタだよね?
二分探索に二分木はイラン罠
>>473
二分探索と二分木探索は違うぞ。
> 探索部は,別のアルゴリズムを採用しても利用できるように設計/実装せよ
と言っているから他の方法(この場合は二分木探索)を示したんじゃない?
>>474
違うと思うなぁ
こういう依頼さ。
完璧と見せかけて罠があるコード書いたら面白いかも。
>>476
お節介にもつっこんじゃう人いるから巧妙にやらないといけないね。
待て待て。
>1.任意の個数のint型数値をコンソールより入力された順に保存する.
と書いてあるのだから、
コンソールから入力するのは順番じゃないのか?
数値を入力するとは書かれてないぞ。

>2.文字列"Sort"の入力により,入力された数値群を降順に並び替える.
となれば当然ここで言う数値群とは1の順序のことだな。

>3.最大値と最小値の平均値を計算し,2分探索法で検索する.」
でもそうすると、これもなんの最大値か判らないし、何を検索するのかわからないよな。
二分木探索じゃなくて
二分探索木じゃない?
パーマネントループ
 入力してもらう
  if "Sort"だったら
   ソート関数を呼ぶ
途中で送信してしまった、鬱
パーマネントループ
 入力してもらう
  if "Sort"だったら
   ソート関数を呼ぶ
  else if 全部数字だったら
   if intの範囲内の数字だったら
    4バイトのメモリ確保
    そこに数字を保存
  else
   コマンド [入力されたやつ] は未定義です。

ソート関数
 適当にソートする。バブルソートでも使えば?(プ

…以上。
>>451の通りに書いたので、無限ループです。
探索ってのはなにが起きた時にすればいいのかわからん。
インフィニットループの方がいいな。
無限循環のほうがいいな。
485デフォルトの名無しさん:03/06/12 01:01
俺は思うんだが、文字列を整形することなく標準出力に表示する場合もprintfが使われることが多いな。
putsか、最後に改行しないならfputsを使うほうが、無駄が無くていいと思うんだが。
>>485
printfがあるとCらしくてイイ!
まあputsやfputsは%をそのまま書けるという利点はあるけど。。。
488デフォルトの名無しさん:03/06/12 07:31
他スレからの転載です。教えて下さい
----
int foo ();
みたいに、引数を省略した場合って(int)になるんだよね?
この挙動って最新のC99で変わってる?
489デフォルトの名無しさん:03/06/12 07:43
voidだろ?
>>488
つい最近その質問と答えを見た気がするんだが。
それともマルチか荒らしか?
>>488
引数チェック無し
492デフォルトの名無しさん:03/06/12 07:49
>>490
だから転載って書いてあんじゃん
493デフォルトの名無しさん:03/06/12 07:49
>>489
C++だったらね
494Not 490:03/06/12 07:50
>>492
レスに解答があったはずだが。
495デフォルトの名無しさん:03/06/12 07:51
http://www1.neweb.ne.jp/wb/prof/index.htm
平成15年度 自作板 PC環境調査
◆5月分の結果が出ました。現在は6月分に移行しています。

(参考)
平均年齢          25.4歳

ネット(2ch含)         78.7%
ゲーム            59.0%

Windows XP Family    46.9%
Windows 2000 Family   34.4%

Athlon             45.3%
Pentium 4          29.7%

nVIDIA            49.2%
ATI              28.9%

DVD-R/RW/マルチ      20.4%
CD-R/RW          75.9%

光ファイバー          8.3%
ADSL/xDSL         64.5%

CRT              74.6%
LCD              25.4%
496デフォルトの名無しさん:03/06/12 07:53
>>494
本当にアレで正しいのか気になったから
>>496
試そうという気はないの?
>>496
レスを受け入れられないなら質問するなボケ
>>496
ここでも同じ奴が答えるという可能性は、微塵も思い浮かばなかなったのか?
つーか、最初からそう書けばいいのだよ。<正しいのか気になった
>>499
住人てあっちとこっちで結構重なってるよねえ。
特に答える側は。
switch文でcaseごとに変数に代入する値を代えることはできるんでしょうか?もしできるのでしたらその方法をお教えください。
意味がわからん
>>502
例えばこう言うことかな?
switch (value) {
 case 0:
  var = 3;
  break;
 case 1:
  var = 2;
  break;
 default:
  var = 0;
  break;
}
私ならテーブルにしちゃうけど。
505デフォルトの名無しさん:03/06/12 19:27
ですがなにか?
506デフォルトの名無しさん:03/06/12 19:33
Cのプログラム実行時間を計るのには、どうしたらいいですか??
int table[3] = {3,2,0};

if(value>=3) var = table[2];
else var = table[value];
>>506
はら時計
var=table[value>1?2:value];
>>506
bash なら ./hoge で実行せずに
time ./hoge で実行すれば。
>>506
clock使え。
512デフォルトの名無しさん:03/06/13 01:43
教えてください。

以下のようにやったのですが
は配列へのポインタの初期化がうまくいきません。

char (*ss)[10]={
"sunday",
"monday",
"tuesday",
"wednesday"};

ポインタの配列が「行」の方向に任意の長さをとることができるから
配列へのポインタは「列」の方向に・・・
だと思ったのですが
513デフォルトの名無しさん:03/06/13 01:45
>>512
char (*ss)[10]ってのは配列じゃなくてポインタだと思うけど。
あなたがやりたいのはchar *ss[10]では?
514512:03/06/13 02:18
>>513

char *ss[10]は前に書いたように
2次元配列で「行」の方向に任意の長さをとることができる
のは理解できるのです。

しかしchar (*ss)[10]でも2次元配列をレイアウトすることが
出来るはずと考えてやったのです。

つまり
char (*ss)[10]はchar ss[][10]から書き換えられるのではないのか?
ということです。
>>514
{
"sunday",
"monday",
"tuesday",
"wednesday"};
はアドレスじゃないので
ss には代入できまへんえ。
516デフォルトの名無しさん:03/06/13 02:28
char *str;
のときに
str = (char *)malloc(100);
ってやる意味が分かりません。
str = malloc(100)
これじゃだめですか?

で、freeのほうも
free((char *)str)
にしなきゃならないとか
free(str)
でいいとか・・・
どなたかこの意味を教えていただけないでしょうか?
>>516
キャストは必要ないよ。
char *p;
void *q;
double *r;

q = p;
r = q;

といううっかりミスを防止するため。
>>516
C だと必要ないが、C++ だと必要、というのが定番の答え。
>>518
それがキャストの有無とどう関係ある?
521512:03/06/13 02:42
>>515

ありがとうございます。
どうも勘違いしていたみたいです。

522516:03/06/13 02:46
>>517-518
ありがとうございます、なんとなく分かりました。
ついでにもうひとつ聞いてもいいでしょうか?
struct port{
(構造体)
}
struct p *f;
f = (struct p *)malloc(sizeof(struct p));
としたとき
free((char *)f);
と型キャストしなければならないと書いてあったのですが、こっちはどういうことなんでしょうか?
連続で質問してすみませんが、お願いします。
523516:03/06/13 02:48
>>519
C++だと必要なんですか覚えておきます。ありがとうございます。
free((char *)f)は嘘。もしくは古い処理系の場合でしょ。voidがなかったころはchar*で代用していたらしいから。でも古かったら引数チェックなんて行われないはずだけどなぁ・・・
>>524
>でも古かったら引数チェックなんて行われないはずだけどなぁ・・・
さすがにそれは古すぎ...

昔のBSD系が free(char*) で、
SYSTEM V系が free(void*) だったのだ。
んでANSIで free(void*) に統一される。
526デフォルトの名無しさん:03/06/13 04:27
#include <stdio.h>

char *str_copy(char *d, const char *s){
       char *t = d;       //A

       while(*d++ = *s++)
;
       return t;
}

int main(void){
       char s1[128] = "ABCD";
       char s2[128] = "EFGH";

       printf("文字列s1:");
       scanf("%s", s1);

       str_copy(s2, s1);

       puts("s1をs2のコピーしました。");
       printf("s1 = \"%s\"\n", s1);
       printf("s2 = \"%s\"\n", s2);

       return 0;

}


上のプログラムで、なぜ関数*str_copyに値を返す必要があるのかが分かりません。
void str_copy(・・・){、でやってみても実行結果は変わりません。
やはり何か理由があるのでしょうか?
ちなみに望洋本の例題です。
527526:03/06/13 04:28
あ、//Aってのは無視してください・・・
528デフォルトの名無しさん:03/06/13 04:31
>>526
標準ライブラリのstrcpyと同じものにしたいからだろ。
529526:03/06/13 04:33
>>528
なるほど、調べてみたら確かに一緒でした。
ありがとうございました!
>>526
それは標準ライブラリのstrcpyがそうしているから、それに習ったんだと思われ。

たとえばコピーした後の文字列の長さが知りたい時に、

str_copy(dst,src);
length = strlen(dst);

とやってもいいけど、str_copy() は dstをかえしているから、上は

length = strlen( str_copy(dst,src) );

という風にもかける。
531デフォルトの名無しさん:03/06/13 04:43
char s1[1024]="ABC",*s2="DEF",*s3="GHI",*s4="JKL";

strcat(strcat(strcat(s1,s2),s3),s4);
これでs1が"ABCDEFGHIJKL"になるってのがどこかにあったな。
こんな書き方するくらいならsprintf使った方がいいと思うけど・・・
sprintf(s1+3,"%s%s%s",s2,s3,s4);
532デフォルトの名無しさん:03/06/13 04:48
>>526
char *t = d;  でtにdの先頭アドレスがはいるにょ。
while(*d++ = *s++) でdにsの文字をコピーするにょ。このときdのポインタは
           '\0'まですすんでるにょ。
return t; ここでtをdにしてしまうと。'\0'をかえすだけだにょ。
      だからtの先頭アドレスはdの先頭アドレスをかえすにょ。

char *str_copy はtのアドレスをポインタとしてさしてるからdの先頭文字をさしてるにょ。
だから*str_copy だにょ

533デフォルトの名無しさん:03/06/13 04:50
'\0'じゃなくて'\n'だったらごめんにょ
>>532
いいたいことは分かるけど、>>526へのレスとしては見当違いじゃない?
535デフォルトの名無しさん:03/06/13 04:56
>>534
すまんにょ。
printfでchar *str_copyを直接読み出しているわけでなかったにょ。
だからreturnは別にいらなかったにょ。
こんなのもありか。
Cでやると違和感有るな。

char a[1234];
char *s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
char *p = s;
while(strcpy(a,p++)[0]){printf("%s\n",a);}
537デフォルトの名無しさん:03/06/13 07:32
違和感のない言語があるのか?
538デフォルトの名無しさん:03/06/13 07:39
CScreenを使って


→→

→→→

→→→→
と一個ずつ増えるようにするにはどうすんの?
>>538
何故スレ違いだと思わない?
int map[10000][10000];

これやるとコンパイル通らないんだけどなんで?
>>540
エラーやワーニングくらいよめ。
542デフォルトの名無しさん:03/06/13 08:00
( ´_ゝ`)∂あぷろだあるから チョットこいや…
http://homepage3.nifty.com/coco-nut/
a>>3
>>541
Fatal: Error detected (LME1514)
Fatal: Error detected (LME1514)
Fatal: Error detected (LME1514)
Fatal: Error detected (LME1514)
Fatal: Error detected (LME1514)
Fatal: Error detected (LME1514)
Fatal: Error detected (LME1514)

エラー読んでもわからないよ。
>>544
不親切なコンパイラだな。何使ってるの?

ちなみに >>540 は「スタック領域のサイズ」について
調べてみなされ。
>>540
400MBものスタックを使える環境を用意しる。
547540:03/06/13 12:42
>>545
bcc

スタック不足だったのか。d
>>540
そもそも、そんな巨大な変数を関数内で宣言しないでくれ・・・
externで確保してしまうとか・・・
mallocで一時的に確保してポインタでどうにかするとか・・・
ぐはぁ・・・
>>548
>extern で確保
400MB メモリが空いてないと起動できないぞ。

>malloc で確保
全部確保しないとどうしようもないんならそうせざるを得ないけど、
一度に全部確保しないでどうにかする道を探すのが正しい道だ。

map と書いてあるので RPG のマップのようなものだと考えると、
いくつかのブロックに分割して、
現在地近くのデータのみをメモリ上に置くようにする。
signal( SIGINT , signal_handler ) ;
srand( time(NULL) ) ;
  for( i = 1 ; i <= 100 ; i++ ) {
    x = 1 + rand() % 50 ;
    if( x == 25 )
    raise( SIGINT ) ;
    printf("%4d" , i ) ;
    if( i % 10 == 0 )
    printf("\n") ;
  }
signal()が2回目のシグナルを受信しないんですが
教えてくらはい
>>550
スレ違い。
ついでに情報不足。
sigaction >>>>>(こえられない壁)>>>>> signal
553デフォルトの名無しさん:03/06/13 15:21
cってベッドインだっけ
>>551
一回シグナルを受信して定義した関数にジャンプすると
2回目からから引数のハンドラへのポインタが自動的に
signal( SIGINT , SIG_DFL ) に再設定されてしまうつーことなんすかね?
>>551を読んで、なぜ>>554のような質問を>>551にしたのか、私には不思議でならない。
556デフォルトの名無しさん:03/06/13 16:10
2から数えて100万番目の素数を出来るだけ早く計算するプログラムを作りたいのですが、
どういう方法が一番早く計算できますか?
>>556
スレ違い

読んでないから内容は知らないが、こういうスレがある。
http://pc2.2ch.net/test/read.cgi/tech/1018657457/
558556:03/06/13 16:27
>>557
どうもです。
早速行ってみます。
sizeof()を演算子と呼ぶことに抵抗があります。5Ωくらい。
>>559
おもいっきり演算子だろ。
>>559
() つけるから抵抗があるんじゃ。
() なんか無くてもほーら。
 int a;
 printf("%d\n", sizeof a);
ね?

型には括弧を付けないといけないけどね。
562デフォルトの名無しさん:03/06/14 01:27
sizeofの返す値は定数と見てOKですよね?
>>562
sizeof の返す値は定数だけど、
プリプロセッサでは解析されないから
#if HOGE == sizeof (int)
というのは使えない。

case ラベルとか、静的変数の初期値とか、
そういうのには問題なく使える。
プリプロセッサでやっちゃう環境もあったけどよい子はマネしちゃダメだ
>>563
サンクス
配列の大きさ指定に使えるくらいだから定数なんじゃないかなぁと思っていたけど自信なかったです。

基本型の大きさを表す(標準の)マクロというのは存在しないんですよね。最大値や最小値を表すマクロならあるのに...条件付きコンパイルに使うようなものではないでしょうけど。
>>565
limitから換算して自分でマクロ作れ
ループの中で変数宣言するののどこが悪いの?
アセンブラコード見たけどループの外においた場合と変わらなかったよ。
>>567
それだけじゃ何が言いたいのかわからん。
変数のスコープをなるべく小さく、という方針には適うが
初期化に時間がかかるような場合はループの外でやれないか考えることはある。
昔、漏れは当時の上司にループ内変数をとがめられたことがあるが、
よくよく話を聞いていると何のことはない、そいつが知らなかっただけのことだった。
きっちり反論できないようなら、上司に従っとけ。
それがいやなら勉強しろ。
変数の初期化に時間はかからないのでループ内におくべし。
以上。
ループの外に出さなければならない理由がないからループ内でFA。
初歩的なことだとは思いますが、質問させてください。

int main(void){
int i;
float a=2.0,b=0.1;
while(a<=3.0){
printf("a = %f\n", a);
a+=b;
}
}

このようなプログラムを組んでも、 a は 3.0 に到達せず、 2.9999……となってしまいます。
その理由は調べてみて理解できたのですが、確実に 3.0 まで処理させたい場合、
どのようなコードを書くのが一般的なんでしょうか。
int i;
for(i=0; i<10; i++)
  printf("%f", 2.0+i/10.0);
>>573
わざわざありがとうございます。しかし言葉が足りなかったようで、
変数a と b 及び 3.0 は定数ではなく、scanf を使って読み込む形の場合を知りたかったのです。

つまり、下記コードにて、a 〜 c までを確実に処理したい、ということです。
勿論 b の値によっては a == c となることは有り得ないわけなんですが、
一例として a = 2.0, b = 0.1, c = 3.0 のとき、を出させていただきました。

int main(void){
 float a,b,c;

 printf("a -> ");
 scanf("%f", &a);
 printf("b -> ");
 scanf("%f", &b);
 printf("c -> ");
 scanf("%f", &c);

 while(a<=c){
  printf("a = %f\n", a);
  a+=b;
 }
}

よろしく御願いします。
int n = (c - a) / b;
for (i = 0; i <= n; ++i) {
printf("a = %f\n", a + b * i);
}
floatは使うな。
浮動小数点を使って ==, != という判定はしないのが普通。
いや、御法度
579デフォルトの名無しさん:03/06/14 19:50
回答期待age
580572:03/06/14 20:57
お答えくださった方々、ありがとうございました。
とりあえず今回は、四捨五入で数値(変数a)を補正していくという方法で解決させました。
色々やったせいで、40行程のソースが80行程まで膨れ上がってしまいましたが(汗)
581451:03/06/14 21:44
こっちが折角温情かけてやってるのに(w
要求仕様が決まってない分は,何も突っ込まずに作ったほうが楽だってことを,
身をもって体験したいとは見上げた根性のコザルだな(w
http://www.catnet.ne.jp/kouno/c_faq/c13.html#16
rand() / (RAND_MAX / N + 1)

これ↑ RAND_MAX が INT_MAX なら N=1 の時にオーバーフローするから、
こう↓書くべきじゃないの?

rand() / (RAND_MAX / N + 1U)
583デフォルトの名無しさん:03/06/14 23:06
>>582
Nが1ならな。でも1ってことはないと思うよ。
なぜ?
別に定数でないといけないということもないと思うけど。
>>582
> 0からN-1までの数を返そうとする

N==1,0から0までの...
ありえないね。
>>584
Nが1にならないように工夫しようとは思わないの?
ifで分岐するのが面倒>>582なら1文字足すだけで何も問題がない。
0から0までの乱数を求めようとするのが間違いだってば。
どうせNが0にならないようにしなければいけないんだから、ついでに1にもならないようにすればいいじゃない。
>>585,588
0 から 0 までの、ということは、
必ず 0 を返すというちゃんとした結果が定義できるので、
ありえないとか、間違いってことは無い。
定義できないのは、N が 0 の場合だ。
>>589
0の時は意味がないから別の処理になるが、
1の時も2以上と全く同じ処理をする場合、
わざわざ分岐させる必要ないだろ?
592589,588:03/06/14 23:36
>>591
0の時は意味がないからってネタか?0では割れないからだろ。
意味がないのは1。

>>590
意味がないので(そういうことするのは)間違いだといったの。
>>582のリンク先はNが定数として書いたんだと思うけどね。
でなければあんなまずいコードをC FAQに載せたりしないでしょ。
>>592
U付けるだけで何も問題ないのに、何故そんなに必死なんですか?
0 しか結果としてでてこないもののどこが乱数なのだろうか?
>>594
UつければNが0の時も問題が起きないんでしょうか。
>>596
今はN=1の話をしてるのに、なんで必死にN=0の話にすり替えようとするの?
命令の配列みたいなものを作りたいのですが、どうすればよろしいでしょうか。
int Get1(){return 1;}
int Get2(){return 2;}
int Get3(){return 3;}

int GetList[] = { Get1();,Get2();,Get3();};
int list[3];
for(int i=0;i<3;i++)
list[i] = GetList[i];

本当はさらに
#define INTLIST \
Get1();,\
Get2();,\
Get3();,\

int GetList[] ={INTLIST};
みたいなことをしたいのですが。
どうやらコールバック関数なるものを使うとうまくいきそうな
きもするのですが、よくわからないのです。

よろしくお願いします。
>>597
「何も問題がない」というからでしょ。そもそもNが定数とは限らないなんて言い出すことが(以下略
>>598
int (*Getlist[])()={Get1,Get2,Get3};
こうかな。
601600:03/06/14 23:51
あと、list[i] = GetList[i]();
600さん、ありがとうございます。
うまくいきそうなので実装してみます
603600:03/06/14 23:59
>>602
int (*Getlist[])(void)={Get1,Get2,Get3};にしておいて。
でないと多分int Get4(int,char *)でも入れられてしまうと思うから
if(N>=2)とかif(N<=1)とするのが面倒?
>>604
じゃ、x/y とか x%y の計算をする場合、
y=1 の時は計算しなくても答がわかるからって別の処理にする?
voidを入れればいいのですね。
ところで、引数を使いたいばあい、
int GetInt(int i){return i*i;}
int (*Getlist[])(void)={ GetInt,GetInt,GetInt };

list[i] = Getlist[i](2);
みたいな感じにするんですか?
list[i] = Getlist[i](i);
こうやって2乗にした数字の配列を得たりするってことですか?
それとも
int (*Getlist[])(2)={ GetInt,GetInt,GetInt };
こうやるんですか?でもそうすると、宣言以降は
引数を変更できないですよね。
>>606]
Getlist[i]が関数名だと思って使えばいい。
引数を与えたいなら通常の関数と同じようにGetlist[i](3)とかGetlist[1](n)とする。
608607:03/06/15 00:30
>>606
> int (*Getlist[])(void)={ GetInt,GetInt,GetInt };

voidじゃ引数がintのGetIntは入れられないって。その場合はint (*Getlist[])(int)={ GetInt,GetInt,GetInt };とする
typedef int (*GetInt_t)(int);

GetInt_t Getlist[]={GetInt,GetInt,GetInt};

この方が読みやすそう
ていうか普通そう書く
611デフォルトの名無しさん:03/06/15 00:41
>>610
禿同
なるほど、ありがとうございます。
(*Getlist[])(int) のように、2番目の括弧の中には引数の型をいれる
のですね。typedefの使い方も教えて頂きありがとうございます。
613デフォルトの名無しさん:03/06/15 05:06
初心者本を一冊、一通りやり終えました。

よくプログラミングを勉強するときは、ソースを沢山読んで
少し書いて、さらにソースを沢山読んで・・・もっとソースを・・・・

って表現がありますが、このレベルだとどのようなソースを読めばいいのでしょうか?
お勧めありましたらお願いします
614デフォルトの名無しさん:03/06/15 05:10
学校の教科書にrandが載ってないんだが・・・atoiとかも

だめぽ?専門1年!先生が載ってないがrand教えたから、少し安心
616デフォルトの名無しさん:03/06/15 05:11
CScreenを使って


→→

→→→

と一個ずつ→が増えるプログラムわかんね
>>615
なぜよりによってそのページをw
藤原さんのページだったら他にいろいろあるだろう。

入門書を終えたのだったら、Kernighan&Pikeの「プログラミング作法」をおすすめする。
プログラマを目指してるのだったら絶対に損はしないと思う。
むしろ必読書ともいえる。
http://www.amazon.co.jp/exec/obidos/ASIN/4756136494/ref=sr_aps_b_/250-7855980-3368256
これね。

んで、ソースのほうはPC-UNIX系をインストールして読んでみるのがいいと思うよ。
読むだけじゃなくて改造してみるとかね。はじめは比較的簡単なlsあたりからはじめて、
最後にはカーネルやドライバをw
>>617
結構有名な本だね。読んだことないけど。図書館にないから(ワラ
>>616
スレ違い。
かつ情報不足。
なにをやりたいのかわかんね。
>>617
615ってさ、610-611を皮肉ってるんだろw
>>620
ちげーよ ネタとして持って来るには一番だったからだ。
世の中にはこんなことしちゃう人もいるってことを(ry
622デフォルトの名無しさん:03/06/15 10:21
「Uつけてsignedのオーバーフロー問題をunsigned で範囲を広げて」
というのは本質的な解決方法かどうか、特に引用元のような教科書的
記述で採用されるかどうか...。暗黙の型変換を利用するくらいならば
同じく引用元で最初に書かれている浮動小数点利用の方法がわかりやすい。
これならばN=1 でも問題はない。

揚げてまで粘着線せんでもいいだろう
typedef int GetInt_t(int);
GetInt_t* Getlist[]={GetInt,GetInt,GetInt};

これってイクナイ?
関数ポインタは
***********************func();
とか書いても大丈夫
626デフォルトの名無しさん:03/06/15 12:05
これもな
(*********************printf)("ok");
ごるぁ♪>(^o^*)
>>625
それはちっとも大丈夫じゃないぞ。
***********************(func());
と同値だぞ。
629デフォルトの名無しさん:03/06/15 17:35
doubleで定義した変数a、bがあって
if(a==b){



}
てしたいんだけど、小数第二位までを比べる方法ってありますか?例えば
a=1.23456
b=1.23789
でもifの中が実行されるように。
if (fabs(a - b) < 0.01) {
>>630
a=1.23456
b=1.24000
>>629
100倍して小数部を切り捨てるというのは?
633デフォルトの名無しさん:03/06/15 18:01
漏れはCを始めて間もないです。独習Cを使ってます。
で、分からなくなったのですが、return 0;やreturn n; 、
return 10;などの解釈の仕方が分かりません。
どなたか説明してもらえないでしょうか?
>1
ところでどうしてC言語には
文字列型とクラスとガーベッジコレクションがないの?
文字列型 あるじゃん
クラス 言語が古いから        
ガーベッジコレクション 必要ない
637デフォルトの名無しさん:03/06/15 19:01
>>633
がんがれ厨房よ
638デフォルトの名無しさん:03/06/15 19:03
>>636
古いからねえw C99はどうする?
「ある言語」とCの差異をひとからげに欠点にしたがる
ゆんゆんピープルがこの時期は多いよな。
640デフォルトの名無しさん:03/06/15 19:24
>>633
'return' は予約語です。その働きは決まっています。
「return;」あるいは「return なんとか;」と使って
教科書どおりの働きなんですが...。
慣れるまでしばし鵜呑みにするのもひとつの手ではあります。
641633:03/06/15 19:28
教科書どおりの働きですか。
OSにプログラムを無事に終了することを伝えるってことですか?
普通のプログラムでは何も知らずにretorn 0;を使っていたのですが、
突然「return なんとか;」がでてきて焦ってしまいました
>>633
returnは値を返すって意味でいいんじゃない?
メイン関数終了時のreturn 0またはreturnはプログラムが
正常に終了したぜって意味だし。エラーは1だっけ。
うろ覚えですまん
643デフォルトの名無しさん:03/06/15 19:43
>>641
returnの後ろなんて呼び出したところになんか返すんだから
自分で書いてる関数なんかは自分で決めるもんだろ?
return 0;ばかりで事足りてたならreturn;で十分だろ?
実際のOSだとreturnでエラーとか直接返すことなんてありえないぞ
本なんかの説明での論理的なOSだと値を返せたりするみたいだけど
return 0;しか知らないということはexternでグローバルな変数ばかり確保してるって事か・・・
>>636
> 文字列型 あるじゃん
ありません。

> ガーベッジコレクション 必要ない
C++でテンプレート駆使して同じようなことをやっているところを見ると
必要あるように思われますが?

>>644
「必要」の意味わかってる?
>>643
そのレベルならexternも知らないだろうな。
647デフォルトの名無しさん:03/06/15 20:08
>>643
>>633を読めば633がmain以外の関数を作ったことないことは一目瞭然だろ。
>>644
ガベージコレクションはあると嬉しいよね。
現段階では言語仕様に含まれず、ライブラリでやるしかないけど。
なので完璧なガベージコレクションは望めないけどね。
でも実用上問題のないレベルではあるという話だ。

おれの経験でも問題なかったし。ま、使ったことがあるのはBohem GCだけだけどね。
言語仕様に盛り込まれるかどうかというと、永久にそれはないようなきもする。

文字列型もあれば嬉しいような気がするけど、そんな面倒でもないしな。
面倒だったらC++使っとけって感じだし、Cに欲しいとはあんまり思わない。
むしろCだったらソースの字面からアセンブリコードが透けて見えないといやなんで、
やっぱいらないかな、とも思う。

まぁ、今は作ったプログラムを直接実行しているだろうけど、
バッチやらperlやらから、実行した場合、mainの戻り値を受けることができるわけだ。
その戻り値で処理を分けたりしてな。、
650 :03/06/15 20:14
●●●マスコミの「盗聴、盗撮」は許されるのか?その2●●●
http://natto.2ch.net/mass/kako/988/988402795.html


949 名前: 文責:名無しさん 投稿日: 2001/05/28(月) 18:46
>>916
直接の実行犯はわからなかった。ただし、その盗聴機関がマスメディア産業の
各方面につながっていることは確認済み。団体名なんか書く必要ないでしょ?
フジ・テレビとか読売新聞社とか電通とか...みんなが知ってるあの会社って
感じ。講談社の週刊誌(現代とかフライデイとか)が政治家の過去を暴露する記
事や写真をよく掲載するでしょ。あの手の記事は、盗聴/盗撮で得た情報で商売
をしている人達がいるという証拠。あういう人達に、オレの個人情報をつかまれ
ているんで非常に心配ですが、現状では、対抗策がない。
>>648
同意
>>647
なるほど・・・
だが重大なことに気が付いた・・・
C言語がmainを基準に動いていたということをすっかり忘れていまそた・・・
>>652
「C言語がmainを基準に動いていた」とは知らなかった。

こういう意味不明で自分勝手な言葉遣いする新人がよくいるが
本当につかれる…。
はよ言えやー
655654:03/06/15 20:30
誤爆スマソ
このスレ圧縮すると1/58くらいは小さくなりそうな気がする。
657lz5:03/06/15 20:58
圧縮前 圧縮後 圧縮率
136824 . 43099   31%
658デフォルトの名無しさん:03/06/15 21:09
#include <stdio.h>
int main(void)
{
int num1=0,num2=0,a;
printf("整数を入力してください\n");
printf("和または積を表示します\n");
printf("整数1");scanf("%d",&num1);
printf("整数2");scanf("%d",num2);

printf("1:和を表示 2:積を表示");scanf("%d",&a);

if(a==1){
printf("%dと%dの和は%dです。",num1,num2,num1+num2);
}
else if(a==2){
printf("%dと%dの積は%dです。",num1,num2,num1*num2);
}
else{printf("はぁ!?");}
getchar();
}
Cを始めて2日目です。参考にしたいのでおかしいとこがあれば教えてください。
>>658
もっと改行しろ
せめてまともに動くものをみせろよ
num2をscanfする際、&がついてないぞ。
662デフォルトの名無しさん:03/06/15 21:12
はい、どこがダメなのか分からないんです。
0による初期化は必要ないのでは。
はぁ!?
の出方が確率的だな
まぁ必要はないが、初期化する習慣をつけるのは悪いことじゃない。
int mainならちゃんとreturn 0;
return getchar();
668デフォルトの名無しさん:03/06/15 21:18
>>663
グローバル変数は自動で0もしくはNULLに初期化されますが、ローカル変数は
初期化されません。main関数も例外ではありませんので初期化が必要です。
>int num1=0,num2=0,a;
初期化しなくてもいい気がするが、するならするでaもしてやれ。一貫性を持たせよう

>printf("整数1");scanf("%d",&num1);
1行に2文かくのはあまり好きじゃないな。見にくいソースのもとだぞ。

>if文
swithにしたほうがいいんじゃ?

>getchar();
if〜elseの外に出さないと。…って、elseの{}はその行のうちに閉じているのか。
そしたら最後の}が余計。コンパイルエラー。
現場ではよく「if文は中身が1行でも{}を記述すること」なんてコーディング規約があるぞ。
>>668
後にscanfで値を入れるんだから必要ない。
671デフォルトの名無しさん:03/06/15 21:20
アンパサつけ忘れ。
\nもうちょっと入れてみ。
あと,mainの戻り値intなら,int返した方が落ち着かないかい?
>>668
そういう意味じゃないだろ。
>>669
最後の}はmainの閉じカッコだろ。
>>669
> 1行に2文かくのはあまり好きじゃないな。

激しく同意 あとなるべくなら{の後も改行してほしい。
674デフォルトの名無しさん:03/06/15 21:21
>>670
確かANSICで規格化されていたような気がしたが気のせいか???
>>668
変数を参照する前にその変数に何か値を代入するなら、
初期化しなくても大丈夫。

つまり、こんなプログラムは困っちゃうけど
int a;
a++;
printf("%d",a);

こんなのならOK。
int a;
a=1;
printf("%d",a);

>>672
スマソ、見落としてた…。
>>674 規格化って何が??
>>674
なにを言っている?
参照する前に代入などで値を入れるなら初期化は必要ないだろ。
もっとも、常に初期化するくせをつけるのは悪くないけど。
678デフォルトの名無しさん:03/06/15 21:23
>>676
アメリカ規格協会
679669:03/06/15 21:23
>現場ではよく「if文は中身が1行でも{}を記述すること」なんてコーディング規約があるぞ。
{}は書いてるじゃんか。
俺が言いたいのは「ちゃんと改行しないとわかりにくい」ってことだ。
たびたびスマソ
>>674
なにが?
>>678
そうじゃなくて、ANSI Cで何が規格化されてるって?
初期化してない自動変数をscanfで使ったらあかんよってか?
682デフォルトの名無しさん:03/06/15 21:25
そもそもscanf自体どうかと・・・
またわけのわからんことを
わかった!
printf("整数2");scanf("%d",num2); これだ!

num2を参照している。  ・・・・でもつっこむべきところが違うと思う。
>>682
そこは見逃してやれよ。
>>677
最後の一行は、不定のまま使うなって話と微妙にベクトル違うね
アルゴリズム的が0は出てこないコードに=0と書きまくるガイキチには虫唾が走る
もしかして初期化しないと&で得られるアドレスも決まらないと思っているのかな・・・
688デフォルトの名無しさん:03/06/15 21:28
変数の初期化範囲って
よく見るとprintfの後ろにscanf("%d",&num1);がついてるよマジ
俺の会社でこんなん書いたら先輩と上司が飛んできて文句をひたすら
いい続けるよ本当です。
自分の指摘がおかしいのを誤魔化すために、話題を逸らすのはやめてください。
自分の指摘がおかしいのを誤魔化すために、話題を逸らすのはやめてください。
自分の指摘がおかしいのを誤魔化すために、話題を逸らすのはやめてください。
自分の指摘がおかしいのを誤魔化すために、話題を逸らすのはやめてください。
自分の指摘がおかしいのを誤魔化すために、話題を逸らすのはやめてください。
690636:03/06/15 21:29
訂正
誤: アルゴリズム的が
正: アルゴリズム的に
691デフォルトの名無しさん:03/06/15 21:31
return 0;
が入っていないよ。
javaならif elseのすべてに戻り値がないとコンパイルエラーですな
ゆんゆん
なんでそこでJavaがでてくるの?
なんでそこでJavaがでてくるの?
なんでそこでJavaがでてくるの?
おおい、何で盛り上がってんだ。
>>691
Java関係ないだろ。それはおいといても
「if elseのすべてに戻り値がない」なんていう状況か?
696デフォルトの名無しさん:03/06/15 21:34
自分の指摘がおかしいのを誤魔化すために、話題を逸らしたいから。
満月だから。
そろって気を荒立ててるのだよ。
698デフォルトの名無しさん:03/06/15 21:42
>>689は何を指していっているんだ?
名言を思い出したyo
>オブジェクト指向は全てそうなっている
名言といえばこれ。

>C言語がmainを基準に動いていたということをすっかり忘れていまそた・・・

701デフォルトの名無しさん:03/06/15 21:51
俺様が701ゲットだ
じゃ702でいいや
668と674と688が激しく意味不明で今夜もグッスリ。
>>700
おれとしてはこれも捨てがたい
>636 名前:デフォルトの名無しさん 本日のレス 投稿日:03/06/15 18:49
>文字列型 あるじゃん
>クラス 言語が古いから        
>ガーベッジコレクション 必要ない
memcpyって長さに0を指定したらどうなんの?
何もしないだけ?
するわけない memmoveはもちろん、strncpyでもなにもしないと思う。strncatなら'\0'をつけちゃうけど。
strncpy(dst,"",1024);
dstを先頭から1024バイト分0で初期化する。
708デフォルトの名無しさん:03/06/15 23:05
CとC++の違いなんでしょうか?
情報処理受けるので、今ボーランドのC++ですが、あまり変わらないでしょうか?
>>707
激しく誤解してますな
>>708
違う言語を比べるのは、いかがなものかと。
>>708
C++コンパイラなら、拡張子を.cにするか、オプションの指定でCコンパイラとして使えると思う。
>>709
どこが?
>>708
C言語を拡張したのがC++です。
拡張長された機能により、C言語では実現の難しかったコーディングを可能にしています。
C++はC言語の仕様を内包しているので、C言語のプログラムをC+のコンパイラでコンパイルすることができます。
逆にC++のコンパイラでコンパイルできたからといってC言語として正しいとはいえません。
あくまでもC言語の範囲に仕様を限定してコンパイルしたい場合には>>711のようにしてください。


bccって拡張子を.cにするだけでC言語でコンパイルするっけ?
vcだとだめだよねたしか。
>>713
vcってのがVisual C++のことならそれでOKだけど・・・
ANSI Cのみなら/Zaをつけなければいけなかったかもしれないけど。
>>709はstrncpyの仕様を知らないだけ。
716706:03/06/15 23:21
strncatでも'\0'をつけないな・・・・
717706:03/06/15 23:27
思いっきり阿呆なこと言っていた。恥ずかしい・・・
catの方は'\0'を付加するということばかり考えていて"連結する"関数だということを忘れていた。。。
標準ライブラリで長さに0とか負数(intの場合)を指定したときの挙動って
どうなってるの?
if(sz > 0) then foo(p, sz);
みたいにifではじく必要があるのかないのかが知りたいです。
>>718
thenって(w
基本的に標準ライブラリはガーベッジイン・ガーベッジアウトだと
思って使ったほうがいいよ。
strstrに渡す検索文字列の長さが0だとまずいんだったかな。
>>719
freeのようにNULLはOKと明示しているものだけ安全って事ですかね。
>>721
そだね
fopenもNULLを渡してよい仕様にしてほしかった。ラッパーを作れば済むけど。
724723:03/06/16 00:03
fcloseだよ(´Д`;)
725デフォルトの名無しさん:03/06/16 00:34
gcc の Wconversion オプションなのですが、よくわからないのでご教授お願いします。

int func(unsigned char c){ return 1;}
main(){
unsigned char c = 1;
func(c);
}

これで警告が出るのですが、どのように直せば、警告が消えるのでしょうか?
よくわからんが定数にU付ければいいんじゃない?1Uとか
(void)func(c);
return 0;
int func(unsigned c){ return 1;}
729デフォルトの名無しさん:03/06/16 00:51
どんな警告か書いて
main からの return 0; がない。
731725:03/06/16 01:01
>>726,727
だめでした。

>>728
消えました。unsigned char は unsigned int に変換されてわたされるということなのでしょうか。

>>729
% gcc -Wconversion hoge.c
hoge.c: In function `main':
hoge.c:5: warinig: passing arg 1 of `func' with different width due to prototype
こんなんです。

>>730
すみません
int main(){
unsigned char c = 1;
func(c);
return 0;
}
こうでした。
732デフォルトの名無しさん:03/06/16 01:02
関数は値をかえすべき(関数 main) って警告が出ます。なぜですか?

#include <stdio.h>
main()
{
printf("This is a test!");
}
>>732
Visual Studioとかだと、main関数の返り値が定義されていないと警告出て自動的に
void main() としてコンパイルされる。
それがいやなら、

void main(){
}

とコーディングするか、


int main(){

return 0;
}

とすればいい。
>>731
gcc なら main{}で警告でないよ。
735732:03/06/16 01:24
できましたドモデス
-Wconversion
プロトタイプの存在により引き起こされる引数の型変換が、 プロトタイプが存在しなかった場合
に同じ引数に対して行われるであろう変換と異なる場合に、 警告を出力します。 これには、
固定小数点から浮動小数点への変換やその逆の変換が含まれます。 また、 固定小数点引
数の大きさ(width)や符号の有無を変更する変換も、 それがデフォルトの拡張(promotion)と
同等である場合を除外して、 対象となります。 また、 負の整数定数式が暗黙のうちに無符号
の型に変換される場合にも、 警告が出力されます。 例えば、 xが無符号であると、 代入x =
-1に対して警告が出力されます。 しかしその一方で、 (unsigned) -1のような明示的なキャ
ストに対しては、 警告は出力されません。
引数の型の問題みたいだけど>>725がなんでダメなのかわからんな。
そんなオプションつかうな。
739デフォルトの名無しさん:03/06/16 01:53
-Wallで十分
740725:03/06/16 01:55
>>736
ありがとうございます。


でも(´・ω・`)ワカラン・・・
741デフォルトの名無しさん:03/06/16 02:59
ポインターのポインターから作った二次元配列の初期化がmemsetではできないっぽいのですが
どうすればよいのでしょうか?

char **p;
p=malloc(10*sizeof(char(*)));
for(i=0;i<10;i++)p[i]=malloc(100*sizeof(char));
/*
何か代入する
*/
memset(p,0,sizeof(p));

これでは無理でした・・・
>>737
プロトタイプがなければ、charを受け取る関数というのは書けない。
>>734
-Wallにすると旧式な宣言は警告されるな
C++では合法なはずだが、それでも出る
>>741
p[i]の領域とってないじゃん。

ところで、何で二重ポインタが突然二次元配列って話に飛ぶんだ?
先輩か教官にそんなこと言うアフォがいるんなら、そいつはもう相手にするな。
添え字って*(mona + giko)をmona[giko]と書いてもよい、だけのことだよ。
プログラムの設計図をちゃんと作ってみろって!
そのコードがいかに無茶苦茶か浮き彫りになるから。
745744:03/06/16 03:21
>p=malloc(10*sizeof(char(*)));
欝だ氏のう
746デフォルトの名無しさん:03/06/16 03:22
>>741
0に初期化したいのならmemsetなんぞ使わずにmallocをcallocにすればいい。
ところで、sizeof(char)ってのは無意味だよ。
747744:03/06/16 03:25
sizeofじゃmallocで確保したメモリのサイズは取れない
memsetにpと渡してもポインタ配列の部分をゼロクリするだけで
その先にある文字列格納メモリは個別にゼロクリが必要。
mallocと同数回のmemsetか、mallocの代わりにcallocな。
二次元配列なら

char (*p)[100];
p=malloc(10*100);

だと思うけど
>>745
ワラタ。おれ、744を見て「え? そうだったっけ?」って小一時間(うそ、小一秒間)、
コードを読み返しちゃったよw

あとなんだ、
memset(p,0,sizeof(p));
は、mallocしたサイズはとれないという突っ込みもあるが、
pの指してる先をfreeしてないのであればメモリリークするということも突っ込んでおこう。

# このsizeofとかの理解だとやってそうな気がする。
 初歩的な質問で申し訳ありません。
現在、文字列の一部を置き換える関数の課題をしているのですが、
char型の関数を用意したのはいいものの、返り値がよく分かりません。
char strを返した場合、mainのところで出力する場合は
ポインタとかを使えばいいのでしょうか。(´・ω・`)
751デフォルトの名無しさん:03/06/16 04:30
>>750
他人はもっと分からないぞ。
課題にはなにを返せと書いてある?
えとですね、頭書きがchar *replace(char *s1, char *s2, char *s3){…}と
なっていて、たとえばp=replace("tracter","act","imot")だったら、
pは"trimotor"と返すような関数なんです。
それで、関数自体はなんとか出来たのですが、返り値でつまづきました。
replace関数の所で配列strに文字列を格納したのでreturn (str);としたのですが、
出力がうまくいかないのです。(´・ω・`)
replace関数の中で出力するのはうまく出来たのですが……。
>>741
>/* 何か代入する */
>memset(p,0,sizeof(p));
memset()で初期化出来るか出来ないか以前に
初期化を何の為に、何時するべきなのかを考えましょう
>>752
つまりこういうことか?

char *replace(char *s1, char *s2, char *s3) {
 char str[STRSIZE];
 /* いろいろやる */
 return str;
}

もしこういうことをやってたとしたら、それはよろしくないぞ。初心者にありがちなミスだ。
配列strの有効な範囲は関数replaceの中だけだ。その関数を出たあとでは、
strは解放されちゃって使えなくなる。

一般に関数は自動変数(staticでないローカル変数)のアドレスを返しちゃいかん。

んで、何を返せばいいかだが…、その関数が何を返せばいいのかよくわからんので
答えようがない。
755デフォルトの名無しさん:03/06/16 04:42
>>752
なるほど。その引数はまずいけどそれは置いておいて・・・

replace関数内でchar *str=s1;とやってstrをいじらずにreturn str;とすればOKなはずだよ。
756755:03/06/16 04:45
ん?strは配列でそこにコピーするのか?
それならstatic char str[SIZE];とすればいいんだけど・・・・
>>752
1 s1を直接書き換える
2 staticで用意してやる
3 char *replace ( char *dst, char *s1, char *s2, char *s3 ) ;
  の様に、もう1つ増やしてdstに格納する
4 malloc()でstrのメモリを確保してやる
後は、自分が習った範囲で好きな方法で (かなり進められない方法もあるが)
758754:03/06/16 04:47
>>756
うん。まあそうすれば一応解決は解決だけど使いづらい関数になるなw
759750:03/06/16 04:48
なんかいろいろいじってたらできちゃいました。ごめんなさい(´・ω・`)
ちなみにmain関数はこうなってます。
main(){
char *p;
p=replace("tracter","act","imot");
while(*p!='\0'){
printf("%c",*p);
p++;
}
printf("\n");
}
でもポインタがよく分からないのでなんで出来たかもわかってません。
>while(*p!='\0'){
>printf("%c",*p);
>p++;
>}
>printf("\n");
嫌がらせ?
761755:03/06/16 04:52
昔作ったやつ。多分処理は752とおなじだと思う。
malloc使うかバッファを関数使用者に用意させればもっと軽くなるんだけど・・・

char *strreplace(char *str,const char *seeks,const char *reps)
{
size_t seekslen,repslen;
char *p=str;

if(*seeks=='\0')
return str;

seekslen=strlen(seeks);
repslen=strlen(reps);

while(p=strstr(p,seeks)){
memmove(p+repslen,p+seekslen,strlen(p+seekslen)+1);
memcpy(p,reps,repslen);
}

return str;
}
762750:03/06/16 04:57
>>760さん
嫌がらせなんでしょうか……
>>755さん
知らない文字がいっぱいです(´・ω・`)理解すらできません。
肝心なことを忘れてましたが、ライブラリ関数で使っていいのは
mallocだけだそうです。
763754:03/06/16 04:58
>>761
文字列の置換て、溢れる可能性があるからディスティネーションの
サイズに気を使うから結構面倒だよね。
サイズが与えられない関数だったらstrlenの長さまでしか置換できないし。
>>762
malloc()を使うのならfree()は忘れずに
765デフォルトの名無しさん:03/06/16 05:02
>>762
それを早くいってよ。
mallocで確保した領域に置換後の文字列を入れればいいの。
ただ、確保する量を考えるときにちょっと面倒かも。
s2の長さがs3の長さと同じか長ければs1分とればいいんだけど、s3の方がs2より長い場合は計算する必要がある。
s1の長さ+(s1に含まれるs2の数*s2とs3の長さの差)+1 これでOKだと思う。
766デフォルトの名無しさん:03/06/16 05:04
>>763
そうなのよ。
>>761はstrcpyみたいにかまわず書き込むタイプだから、置換後に長くなる場合は使用者がきちんと領域を確保していないといけない(^_^;)
767765:03/06/16 05:06
勝手にマッチした文字列を全て置き換えると思ってしまったけど、
もしかして置き換えるのは一個だけでよい?>>762
768デフォルトの名無しさん:03/06/16 05:07
質問です
C(VCやC++じゃない初期のC)で時計のプログラムを組むという初歩の
プログラムをやってるんですがOSがwindows2000でエスケープシーケンスが使えません
この場合解決策はありますでしょうか?
769750:03/06/16 05:09
>>765さん
ごめんなさい。ただ置換する文字列が複数個あったらその都度
置き換えるので、二個以上だと足りなくなるような……。
mallocで領域を増やせるのでしょうか。
というか宿題スレ別にあったのですね。すいませんでした〜
>>768
Win2000Proじゃ入っていないと思うけど、telnetサーバ立ち上げてTeraTermから。
>>769
領域はreallocで増やせるけど、先に計算して確保した方がいいと思うけどなぁ。
>>771
つか、mallocしか使っちゃダメとかいうんで、
今、自分でstrlenとかstrstrとか実装してたりするw
>>768
一応スレ違い。

Windows2000のコマンドプロンプトでエスケープシーケンスが
使えるかどうかということなんだろうけど、答は使えない。

Cygwinをインストールすれば、使えるようにはなるけど。
>>772
そういえばそうだw
>>769
というわけで増やすのは無理(か面倒)だw

それと宿題を代わりにやってくれというわけではないからここでOKだと思う。
>>768
16ビットを吐くコンパイラならANSI.SYSを組み込むことでエスケープシーケンスは使える。
776768:03/06/16 05:53
レスありがとうございます
教えて貰ったものを試してダメだったらOS変えることにします
スレ違い失礼しました(´・ω・`)
>>776
専用の関数群があったと思うけど
OSが提供するAPIなのか単なるライブラリなのかは知らないけど・・・
>>776
ていうか、コンパイラの名前くらいちゃんと書けと。
>>776
うってつけがあったぞ
http://www.kumei.ne.jp/c_lang/intro/no_59.htm
>>776
待て待て。Cygwinを使えばOSを変える必要はない。
インストールがちょっと手間だが、OSを変えるよりは手軽だ。
>>774
うむー、Cなんて久しく組んでなかったからどうもうまくいかん。
文字列の置換なんてRubyとかPerlでgsub一発でやってたもんな、最近。
堕落したもんだ。なわけで時間切れ、寝ます。

>>750
そういうわけだ、すまんな。
ではおやすみ
〜しか使っちゃいけない宿題って本当にあるのか?
いやライブラリの同じ機能のものを使うのはマズイだろうけど、
mallocだけしかダメなんていう出題が本当にあるのかはなはだ疑問。
たんなる思い込みではないのだろうか?
>>106
え?まじで?
    ∧_∧       ∧_∧
    (・∀・ )      (・∀・ )
    (⊃   つ      (⊃    つ
     Y  ,,ノ        Y  ,,ノ 
     し ゝ_)        し ゝ_)
""""゙""""゙゙""""""""゙""""゙゙""""""""
     ∧           ∧
    アイーン       アイーン


    ∧_∧       ∧_∧
    ( ・∀・ )gets!   ( ・∀・ )gets!
    (σ   ,,σ      (σ   ,,σ
     (_,,l⌒l        (_,,l⌒l
      (_)        (_)
>>783
えらい昔のに反応するね。
getchar の返す値は EOF + 0〜255 だから
int じゃないと表現できない。
>>785
×EOF + 0〜255
○EOFとunsigned charが取り得る全ての値
>>785
読み返し中
788デフォルトの名無しさん:03/06/16 17:17
質問させて下さい。
void put_rstring(const char *st){
    const char *temp = st;
    while(*st++) ;          ・・・A
    if(st != temp)
        while(--st >= temp)
            putchar(*st);
}
上の関数はscanfで受けた文字列を反対から表示する関数なんですが、
なぜか表示するときに半角スペースが入ります。(”SEC”と入力したら、” CES”みたいに)
Aの部分を、
while(*st)
    st++;
とすると入らないんですが、なぜでしょうか?
while(*st++) ;

while(*st)
    st++;
の違いを考えましょう。
ヒント
for( ; ; st++)
791789:03/06/16 17:41
for文に直せるか直せないかの違いですか?
うーん、ちょっとわかんないです・・・。
>>791

if ( *st++ );
if ( *st ) st++;

この違いと同じだ
793789:03/06/16 17:49
あああわかりました!
インクリメントする回数が前者は一回多くなってしまっているんですね。
ありがとうございました!
ヒント
for(i=0; ;i++)

iはいくつから処理される? いつインクリメントされる?
795789:03/06/16 17:52
>>794
ありがとうございます!
評価される度にインクリメントされるのだから、
while(*st++)だと一回余計にインクリメントされるんですよね?
>>794
虚しいな
砂上の楼閣というか、底無し沼の上にビルを建ててるような雰囲気だな。
798デフォルトの名無しさん:03/06/17 02:50
みんなプログラム組むときにフローチャートみたいな図とか何かしらメモ書いてる?
799798:03/06/17 02:50
あ、スレ違いだ、すまん。
>>788さんのプログラム走らせようとしたのですが、
segmentation faultとなってしまいます。
どう直したらいいでしょう。昨日、cをはじめたばかりの厨です。
#include <stdio.h>
#include <string.h>
void put_rstring(const char *string){
const char *temp = string;
while(*string++)
if(string != temp)
while(--string >= temp)
putchar(*string);
}
int main(void) {
char *st;
scanf("%s", &st);
put_rstring(st);
}

>>800
stはどこを指しているのかな?
エー エフ オー
803800:03/06/17 10:29
int main(void) {
char string[25];
scanf("%s", &string);
put_rstring(string);
}
こうにしたら、最初の1文字だけ出るようになりました。
全然reverseされてない。

>>803
だからつまらないってば。
805800:03/06/17 10:35
じゃ、もう逝ってきま〜す
質問ッス
voidへのポインタはC++だとキャストしないと
他のデータ型のポインタ変数に代入できないのに
Cだとキャスト無しで代入できて、
問題なく代入したデータ型のポインタとして使えるんですか?
807デフォルトの名無しさん:03/06/17 12:34
パイって定義されているのですか?

自分でdefineするしかないのですか?
808デフォルトの名無しさん:03/06/17 12:38
math.hにある
809デフォルトの名無しさん:03/06/17 12:43
>>806
書いてたしかめるべし。
たぶん、大丈夫だと思う。
こういうint a=(char*)sみたいのは
キャストしないとだめだが・・普通せんけど
>>806
C++は文法上の型チェックは厳しいッスからね
voidへのポインタってなに?
812デフォルトの名無しさん:03/06/17 14:25
>>807
const double PI = 4*atan(1.0);

どうでもいいけど最近のコンパイラはgccもBCBにしてもsqrt(2)みたいに引数が
double型の関数に整数を書いてもきちんとキャストされるのね
>>812
#include <math.h>
const double PI = M_PI;

> どうでもいいけど最近のコンパイラはgccもBCBにしてもsqrt(2)みたいに引数が
> double型の関数に整数を書いてもきちんとキャストされるのね
プロトタイプ宣言以前のジジイハケーソ
>>812
constにはできない

>>813
ANSIにはない
M_PI は ANSI C 規格外のマクロだから、
コンパイラによっては使えない。
だから、
#ifndef M_PI
#define M_PI 3.141592653589793
#endif
と自分で定義する。
3.14159265358979323846264338327950288419716939937510208998628
printf()で「 " 」を出力するにはどうすればいいのでしょうか?
printf("\"");
819817:03/06/17 18:54
ありがとうございました!!
これからCのプログラマになろうと思ってます。
今のところ独学で入門書3冊を読んだ後、K&Rの途中まで進んでいます。
けど現場のレベルが分からないもんでなんか不安です。
K&Rをだいたい理解出来ていれば現場に行っても大丈夫ですか?
何の現場?
職種によって必要な知識は千差万別でツ。
そんなもんは現場によります。
なかには >>817 のような人が活躍中(?)の現場もあります。
貴方の脳味噌が優秀で現場が真っ当な所なら研修で必要最低限度のことは教えてくれます。
どうにも使えないようなレベルの人は真っ当な所なら落としてくれます。
駄目なところならマニュアルのカタカナ読むのを嫌がらないだけでも歓迎してくれます。
>>816
途中25桁ほど抜けてるぞ。
>>820
まずは就職してから聞きなよ(^_^;)
825820:03/06/17 22:31
レスありがとうございました。
817のような人が活躍できるイメージが湧きませんが、
取りあえず就職頑張ってみます。
マ板で聞くべきことをここで聞くような人が活躍できるイメージというのも湧かないな。
あんまり気負いすぎると現場のレベルの低さに落胆すること請け合い。
糞不味いラーメンを一生作り続ける向上心ゼロのプロだっているわけで。
5月一杯でいなくなった奴が組んだソースを見たら、
保守性のかけらもなくてびっくりした。

シンプル イズ ベストなソースがかけて
まとめるべきところはまとめられて
他と合わせるべきところは合わせられて
意味のあるコメントがかけて
人並みにホウレンソウができれば

普通にそれなりに活躍できると思われ。
他人のソースなど常に保守性のかけらもない
それはおまいにソースを読む力がないか
コーディング規約をキチンと決めてないか
同僚に恵まれてないか
のどれか
>>829
それじゃ仕事になってない。
832デフォルトの名無しさん:03/06/19 01:27
Cは死滅?
>>832
おまえが理解できないだけ。
ていうかプログラマの教養課程
835832:03/06/19 03:29
丸一日書き込みがなかったから
本当のことでも死滅なんて書いたらかわいそうだよ
ここにはC言語くらいしか能が無くて
死滅したら食っていけない人が沢山いるんだから
>>836
おまえが理解できないだけ。
C89 はいい加減古いことは事実だ。
じゃなきゃ C++ だの C99 だのなんて作らない。
しかし、COBOL や FORTRAN77 のように
しつこく生き残ることも確かだろう。
(これらと比べるのは C がちょっと可愛そうだが)
過去の遺物を保守するような仕事はしたくねーな。
840デフォルトの名無しさん:03/06/19 10:49
age
家電製品程度のマイコンなんかは、アセンブラ。
代替となりうる(なっている)のはCぐらいだろ。

C++は、なんか大げさだし。
842デフォルトの名無しさん:03/06/19 11:42
size_t って何故必要なんでしょうか?
unsigned long int じゃ駄目なんでしょうか?

だめです。
いいんだよ。
なりません。
ダメです、それは
>>843,845,846
なぜ?
848デフォルトの名無しさん:03/06/19 12:20
>>842
typedefの役割をわかっていますか?
簡潔にだよ!簡潔に!わかっていますか!
(unsigned long int)この型を振り回したソースみてどう思う?
て、俺のソースだよ。
849デフォルトの名無しさん:03/06/19 12:31
>>848
釣りか?
>>842
longがサイズを表すのに適切な型とは限らないから。
851デフォルトの名無しさん:03/06/19 12:44
やった。>>849が釣れた
>>850
??
853デフォルトの名無しさん:03/06/19 12:54
>>852
typedefの役割をわかっていますか?
型に意味のある名前をつけて分かりやすくするだけでなく、
環境によってその定義を変更してやることによって
移植性の高いコードを書く事もできる優れものだな。
FILE とか環境によって随分と定義が違ってるぜ。

尤も、特定の環境での定義に依存したコードを書いた途端
移植性が低くなってしまうがな。
型に無意味な名前を付けて偏見から開放されるだけでなく、
環境によって名前を変更してやることによって
どの環境で書かれたか分かる優れものだな。
だれか>>855を分かるように説明して。
857デフォルトの名無しさん:03/06/19 14:54
左辺値が必要(関数 main )
というコンパイルエラーがでるんですが、どうなんでしょうか?
何が原因でしょうか。
if(seisuu%2=1){
printf("ガクガク");
}
この部分です
>if(seisuu%2=1){
なにこれ、なにがしたいの?
==
860デフォルトの名無しさん:03/06/19 15:01
seisuuはユーザーが入力するようにするんです
>857
seisuu % 2 == 1
ご愁傷様です
862858:03/06/19 15:03
代入してどうすんだよ
>>859が書いたとおりif(seisuu % 2 == 1)だろ
代入と等号間違えるなよ
左辺値が必要なんですよ :-P
864デフォルトの名無しさん:03/06/19 15:04
ガーン。
どうもありがとうござます
865デフォルトの名無しさん:03/06/19 15:13
#include <stdio.h>
int main()
{
int i,j;
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
printf("%d ",i*j);
if(j==9){
printf("\n");
}
}
}
}
これを実行して、縦の列をそろえたいんですが、
どこを工夫したらいいですか
866ちよ:03/06/19 15:15
みてね、無修正だよ〜♪
http://www1.free-city.net/home/kotarou/page002.html
printf("%d ",i*j);ここ
868デフォルトの名無しさん:03/06/19 15:16
COBOLなら、オレに聞け!<2>
printf("%3d",i*j);
870シンジ:03/06/19 15:19
IPの隠し方教えてください

printf("%2d",i*j);
putchar(j==9?'\n':' ');

I○
また未定義か
for(i = ...) {
 for(j = ...) {
  ...
 }
 putchar('\n');
}
875デフォルトの名無しさん:03/06/19 23:02
>>870
IP隠れたら、インターネットできません。
ルーティングのお勉強しましょう。
876デフォルトの名無しさん:03/06/19 23:30
何でA言語がないの?
877デフォルトの名無しさん:03/06/19 23:33
☆皆さんの応援が頼りです。頑張ってまーす!!☆
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
>>876
それを言うんだったら、何でD〜Z言語がないの?
って、つっこんでみる。
879デフォルトの名無しさん:03/06/19 23:38
C++を最初はD言語となずける予定だったがC言語がすばらしいのでそれに
敬意を表してC++になった。結構有名な話。ちなみにC++はANSIで1999年に
標準化されたとっても新しいものです。でも規格化以前から存在しいました。
何でGoogle使わないの?
C++作ったのってカーニハンらと同じくベル研究所の人なんだよね?
つまり後輩が作ったということなのか
>>850がいいこと言ったようだが
>>853, >>854, >>855, >>856は無視か

sizeof(unsigned long) < sizeof(void*)な環境で
size_tをどうtypedefする気なのか聞いて見たい

↑だけ空想論とかぬかすなよ、てめーら
びやーね すとらうすとるうぷ
>>882
そんな環境あるかよ。妄想もたいがいにしろ。








sizeof(unsigned long) > sizeof(void*)な環境ならあるが。
>>883は暗号ですか?
>>879
ISOから規格書(14882)とりよせて年式を確認してみろ
ttp://www.jsa.co.jp/
>>884
妄想? 自信があるなら、そんなに改行するなよ
>>886
s/co/or/
>>884
初心者です。
例えば、どんな環境があるんですか?
こいつに聞いても無駄だよw
規格でどうのと言うくせに、今回は??
移植性が聞いてあきれらあ
>>890
プレステ2はsizoef(long)==8なんだよ。覚えとけ。
>>882
うん、えらい
おまえらホントバカな
で?
┐(´ー`)┌
まぁ、要するに、size_tと言うのは
主に、添え字として使用する時に使うべきものなので
その必要な大きさは、ポインタの大きで十分であると…
が、特定の環境等(どうしてもlongが128ビット必要とか)で
unsigned long を、添え字として使用するには
無駄なので(上記例ではメモリが128ビット分あれば無駄と言う訳ではないが…)
unsigned long int 等とはせずに、
その環境に応じて必要なサイズにすれば良いと言う事で…

つーか、レスを読んでも、いまいち、論点が見えないんだけど、
一体、誰が、どう言う主張をしてるの?
ようするに、移植性を向上させるためってこと?
逆に下がるね。int使いな。
>>898
移植性と言うよりも
ただ単に、各々の環境で必要な分とすれば良いじゃないの?
って事だと思う (まぁ、いろいろと意見もあると思うけど…)
だいたい、移植性が問題なのなら "char" も "short" も "long" も
全てまとめて int 型の1つにしてしまえば良い(規格自体を)し
それぞれ、型が分かれているのは、それぞれの環境で
それぞれ最大限に資源を活用出来るようにする為だと思うので
"size_t" が決められていないのも、その一環なのだと思う…
移植性:
ある変数のサイズを固定したい場合、
C の環境によって型のサイズが違っても良いという仕様は困る。
そこで、typedef した型名を使い、
環境によって定義を切り替えてやれば解決する。
また、環境によって構造体を使わないと実装できないか、
普通の型で十分実装できるか異なるものも、
typedef を使えば同じコードで処理できる。

単純化:
複雑な型名を短くできる。
例えば関数ポインタや配列ポインタの型名は複雑だが、
typedef してしまえば簡単な名前で扱う事が出来、
間違いを少なく、そして可読性も上げることができる。
実体を定義する時に構造体型や列挙子型の
struct や enum を省略できるようにするのにも使える。
main()
{
/* ?@ */
scanf("%d", n);

switch(n){
case 1:

break;

case 2:
{
while(1){
scanf("%d", m);

switch(m){
case 1:

break;

case 2:

break;

/* ?A */
}
}
}
}
}

こんな感じであって、switch(m)のcase2: の?Aから?@にいくようにするにはどうすればいいのでしょうか?
goto
>>902
ロジックを見なおす。
for example.
先ずmain()全体をループに入れ、
ネスト深すぎるから外のcase2のwhile辺りを関数化して、
中のcase2でフラグをセット。
main()に戻ったところでフラグがセットされていたらループ継続。
特定の条件が満たされたら最初からやり直す。
という処理はループよりgotoだろ。盲目的安置でもなければ。
>>902
switch(n) 以下を関数化し(例えば foo とする)、
do {
 scanf("%d", &n); /* ← & も忘れずに! */
} while(!foo(n));
とし、foo はループを継続する場合(異常状態?)は 0 を、
ループを終了する場合(正常状態?)は 1 を返すようにする。
int i;
int *n=&i;
としているから&をつけなくてもいいんでつ。
なんじゃそりゃ。
>>907
それはウソだろう。switch(*n)と書いてないんだから。
910907:03/06/20 13:27
ちっ・・・
911デフォルトの名無しさん:03/06/20 13:33
ポインタってどうゆうもんすか?
* ← こういうの

↑むしろこれ
↓←
→↑
 ↑
← →
 ↓
( ・ )( ・ )
( ・ Y ・ )
なんか変な方向に向かっているような気が・・・
新キャラ C言語クン

(・C・)
初心者のためのポイント学習C言語 http://www9.plala.or.jp/sgwr-t/
v(・∀・)
vc(・∀・)
>>919
御茶ノ水博士?
vc(・∀・)++
C( ・∀・ #)
C(+^o^+)
高速にファイルをコピーするのには
どんな方法が有りますか?
apiを叩くのが一番早いのでしょうか?
ポートを叩くとかAPIを叩くという表現はやめてくれ
SMTPを喋る(w

ていうか、OSや環境固有のAPIを話題にする時点でスレ違いだ罠
そもそもCと関係ない
931デフォルトの名無しさん:03/06/20 15:45
このスレで言える事は、

1. バイナリモードで fread/fwrite を使って操作する
2. 丁度いいサイズでバッファリングする

くらいのもんだ。
>>927
高速にファイルをコピーするライブラリ、ツールなどを探す。
934デフォルトの名無しさん:03/06/20 16:40
一度出力した文字列や数値を画面上から消すことは可能ですか?

system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
int i=10000;
while(i--)
puts("");
938デフォルトの名無しさん:03/06/20 16:53
ありがとうございます。
では、特定の文字列だけとか指定は可能でしょうか。
バックスペースで消せる範囲なら
バックスペースを表示すればいけることもある。
環境によっては変なのが表示されるけど。
940927:03/06/20 17:03

>>928
何故ですか?なんか気持ち悪い?

>>929
そうですか、反省します。

>>932
バッファのサイズによっても変わるんですか
ちょっと調べてみます。
>>927=940
スレ違いだってばさ。
>>933の方法が一番無難だと思うがな。
今なら新スレ立てられるけど、ちょっと早いかな。
943デフォルトの名無しさん:03/06/20 20:09
ちょいと質問があるんじゃが
ファイルに文字列を書き込みたいのだが
Cではinsertで書き込む関数はないのか?

たとえばファイルの中身が
aaaa
で書き込む文字列がbbbbだったとき
aabbbbaaというふうにファイルを更新したいとき・・・
944デフォルトの名無しさん:03/06/20 20:12
んなもんあるかい!
945デフォルトの名無しさん:03/06/20 20:14
☆頑張ってまーす!!☆
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
-----------------------------------------------
>>943
「Cでは」って、そんな機能のある言語ってあるの?
947おしえてください:03/06/20 20:38
会社で、「そこは、getchar()を使って。」と言われました。
ワタシは、scanf()を使っていました。なぜそんな事をいわれたのか、不思議なんです。

普通の会社でも、そんなこといわれますか?私の上司がうるさかっただけなのですか?

getcharって、関数でなく、マクロなのですか?
948デフォルトの名無しさん:03/06/20 20:40
assert以外に必ずマクロってのはあったかな・・・・
is〜もまずマクロだろうけど、関数であってもいいと思うし。
getchar を使うべき状況で scanf を使っていたら注意されるでしょうね。

つーか scanf 使ってる時点で(
950デフォルトの名無しさん:03/06/20 20:44
仕事でscanf使っちゃう人いるんだ。
>>947
つーか、scanf()を使ったら仕事にならんって。
このスレ、遡って読めば判ることだ。
或いはC-FAQにも出てたろ。
952おしえてください:03/06/20 20:46
>>949

ワタシは、入社したてで、右も左も分からないです。

なんで、だめなのか、自分ではわからないのです。教えていただけませんか?

>つーか scanf 使ってる時点で(
↑の意味がちょっと分かりません。普通のCプログラムは、scanfみたいな、入門書に載っているような
関数は、馬鹿らしくて、使わないと言う意味なんでしょうか。。
953デフォルトの名無しさん:03/06/20 20:48
新スレ立ててくる。
ちょっとタイトル変えるけど堪忍して。
>952
バッファーオーバーフロー
955デフォルトの名無しさん:03/06/20 20:52
scanf("%100s"buf);
957おしえてください:03/06/20 21:07
みなさん、どうもレスありがとうございます。

C−FAQみてきたら、載ってました。たしかに、バッファオーバーフローって
かいてありました。何の事か、いまいちよく分からんのですが、使わないようにします。

getsも、使っちゃいけないと書いてありますね。入門書は、うそつきなのですね。こんな僕でも、これからやっていけるか、不安になってしまいました。
C言語は可変長データをサポートしていないから、
そういう関数も問題があると知っていても使わなき
ゃならないんだよ。
それが嫌なら早くC++をおぼえろっつーこと。
gets や scanf は入門用のオモチャ関数。
仕事ではもっと安全な別の関数を使ってやりくりするが吉。
960デフォルトの名無しさん:03/06/20 21:27
テーブルがずれているので調整
>>957
大丈夫。
今日は、scanfを使わないということを覚えましたよね。
物事は一歩一歩積み重ねて覚えていくものです。
がんばってください。
962おしえてください:03/06/20 21:59
>>959さん、>>961さん、どうもありがとうございます。

これからも、とりあえず、がんばっていこうと思います。
しかし、scanf()の代わりがgetchar()か?
どんな職場だ。
>>963
getcharを使うべきところに、scanfを使うような奴がいる職場。
scanf("%d",&i)を取って代われる優れた関数の実例が言えるか?
fgets(buf, sizeof buf, stdin);
i = atoi(buf);
bufの定義を書いてみろ
>>967
何でそんなに喧嘩腰なの?
教えて欲しいんだけど、素直になれないから
>>968
scanfは使わない、を一般論と言うアフォを論破したい
>>970
誰のことを言ってる?
たとえば961
早く答えろよ、bufの定義
>>973
char buf[MAX];
入力された数字列がMAX-2文字って保証はどこにある
11分もかかってんじゃねーよタコ
「はにゃ〜ん」の定義を述べよ
>>975
入力された数字がiに収まる保証はどこにある
>>975
>>974じゃないが、そうくると思った。
じゃあ、scanfは無限の長さの数字列読めるのか?
そういうのを考慮した場合、
scanfとfgetsとどちらが対処できるか考えればscanfを選ぶことはない。
>>978
そんなのは未定義でいいんだよ
atoiと同じロジックをトレースしてどこまで解析したかを返す関数とか書いてるのかてめーわ
>>979
別な話、無限の数字列を読むロジックは作ればできる
>>981
別に無限にしなくても限界がある。
1行が長すぎると同じ行を2回以上scanfしてしまう。
これにどうやって対処する?
scanf で数値入れるところで文字列入力すると
殆どの場合において暴走するけど、
それも再現しないといけないの?
>>982
>1行が長すぎると同じ行を2回以上scanfしてしまう。
は? もしかして、あの処理系の話か?
>>983
暴走してんのはてめーのアプリだ!
scanfはスペックを守っているに過ぎん
こういうアフォがscanfは使わないとか言ってるのを
聞くたびに耳が腐る思いだ
>>980
支離滅裂すぎ
入力されたものが確実に解析できる訳ではないのだから
どちらで、あっても問題はない
問題なのは、入力されてるデータが無限に続いた場合
プログラムで制御して、入力を打ち切れるか、制御出来ないかの差
>>986
確実に解析できなかった、その先で何をしているんだてめーの関数わ
もしかして、いちばん困ることをしでかしてくれるのか?
>>977
うれし、はずかし?
>>987
エラー返すに決まってんじゃん
つーか、ツッコミ所違うし
>>985
あんた素人でしょう?プロとしてアプリを作ることになれば、
嫌でもscanfを使うなって事が分かるよ。
>>989
fgetsでか?
>>990
いいやCでメシ食ってるよ
嫌でも憶えることは
ブツのスペックだ
>>992
止まったな…
まぁ、結論を言うと、そんな事を調べるより(scanf()が使えるかどうか)
scanf()を使わないようにした方か早いだろ?
素人だの結論だのと腰抜けばっかりだな
このスレは
おおうおおうおおうおおうおおう
「フォーマットの正しくない入力に対する動作は未定義です」
としておけばいいってこと?
素敵な職場だね。
scanfなんか使ってられねえよ。。。
標準入力から入力する場合でも、入力用の関数とかつくらんか?
>>997
そういう仕様にしてるのがscanfの代用としてよく引き合いに出されるfgetsだろうが
1000ゲット♪
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。