2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :前スレ995:03/06/06 22:41
まず問題を冷静に吟味して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

3 :デフォルトの名無しさん:03/06/06 22:41
乙〜(^o^*)

4 :デフォルトの名無しさん:03/06/06 22:42
おめ

5 :デフォルトの名無しさん: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

12 :デフォルトの名無しさん:03/06/06 23:07
 t2
δA=∫  {(∂/∂x)Lδx+(∂/∂v)Lδv}dt
t1
プログラムにすると・・・・・めんどくせ

13 :デフォルトの名無しさん:03/06/06 23:20
やぁ、なんか用かい?>(∂/∂x)

14 :デフォルトの名無しさん:03/06/06 23:22
δA=0

以上。

15 :デフォルトの名無しさん:03/06/06 23:25
やっぱできねぇなぁ

16 :デフォルトの名無しさん:03/06/07 00:06
前スレで、「UNIXでSJISで"為替"などが文字化けする」質問に答えてくれたひと、
ありがとうございました。携帯だったので遅レス。

17 :デフォルトの名無しさん:03/06/07 09:47
前スレでreturn,exitの質問に答えてくれた方、ありがとうございました。

ところで、プロセスと関数の違いがよくわからないのですが、
プロセスはプログラムを実行している状態のことで、
プロセスの中で関数が処理されているという理解でよろしいでしょうか?

18 :たく:03/06/07 10:12
正常終了は普通に終わることだと思うのですが、
異常終了って何ですか?
どういうときに発生するのですか?
具体的に教えてください。
よろしくお願いします。


19 :デフォルトの名無しさん:03/06/07 10:43
>>18
一般保護例外とか。
プロセスが殺されたりとか(unixならkill/winならタスクマネージャ等)。

20 :デフォルトの名無しさん:03/06/07 10:48
>>17
(Cの)関数はC言語の概念。プロセスはOSの概念。
ごちゃまぜに理解してはいけない。
CだけでなくOSの本も読むべし。

>>18
正常に終了できなかったときに発生するのでは。

21 :デフォルトの名無しさん:03/06/07 11:06
>>17
関数の実行(処理)単位は「スレッド」。
実行するためのリソースの単位が「プロセス」。

22 :デフォルトの名無しさん:03/06/07 11:13
return はスレッドの処理を関数から抜けさせる。
main関数からスレッドが抜けると、プログラムは終了する。
プログラムが終了すると、プロセスが解放される。

exit()はどの関数に居ても、強制的にプログラムを終了させる。

23 :デフォルトの名無しさん:03/06/07 11:13
>>17
プロセス ttp://www.geocities.co.jp/SiliconValley/5634/t82D3_0013.html#2490
関数 ttp://www.geocities.co.jp/SiliconValley/5634/t82A9_0009.html#889

24 :デフォルトの名無しさん:03/06/07 11:31
「プロセス」って言葉はOSによって意味にズレがあるからなぁ。

25 :デフォルトの名無しさん:03/06/07 11:46
黄色い看板

26 :デフォルトの名無しさん:03/06/07 11:50
それはプロミス

27 :デフォルトの名無しさん:03/06/07 13:12
w

28 :デフォルトの名無しさん:03/06/07 13:24
「へるぷみ〜だよー」

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

30 :デフォルトの名無しさん:03/06/07 14:47
#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);
}

31 :29:03/06/07 14:50
これによって、一応
line1word1_line1word2
line2word1__line2word2
は、正しく
field1 : line1word1
field2 : line1word2
field3 : line2word1
field4 : line2word2 <<<end of file>>>
と表示できるようになったのですが、どうもまわりくどいような気が
してならないのです。どうか、よろしくお願いします。

32 :デフォルトの名無しさん:03/06/07 15:13
>>29
fgets()で読みこみ、sscanf()でパース。
sscanf()はどこまで読み出したかを知ることができるって辺りがポイント。

33 :デフォルトの名無しさん:03/06/07 15:24
つーか、fscanf()でいいじゃん。

34 :29:03/06/07 15:25
>>32
こんな便利な関数があったのですか…<sscanf()
僕が使っている独習C(1994)という本には載っていなかったので、今しがた
検索してきましたが、ぱっと見ただけでも、今よりきれいなソースになりそう
でした。もちっと検索先を読んできます。

ありがとうございました。

35 :デフォルトの名無しさん:03/06/07 15:52
>>34
全標準ライブラリ関数の一覧がないの?
はるひこ本でさえあるのに。。。

36 :34:03/06/07 16:02
索引をひきましたが、fscanf()はあったもののsscanf()は無い様でした。
本が古いせいなのでしょうか…

いずれにせよ、ファイル入出力の項に入ったところのため、fscanf()、
sscanf()のどちらも初見の関数なので、今から勉強はじめているところです。

37 :デフォルトの名無しさん:03/06/07 16:05
1994年なら古いということはない。

38 :34:03/06/07 16:14
ということはもしやクズ本?ガクガクブルブル

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

今急に不安になって索引再度確認しましたが、やはりsscanf()は無い模様でした。

39 :デフォルトの名無しさん:03/06/07 16:15
>>38
一冊で済まそうなんざ虫が良すぎるぜぃ。

40 :デフォルトの名無しさん:03/06/07 16:15
関数の簡単な説明ならhttp://www.bohyoh.com/CandCPP/C/Library/index.htmlをみればいいかも。完全じゃないけど。

41 :デフォルトの名無しさん:03/06/07 16:38
URLエンコードするにはどうすれば?

42 :デフォルトの名無しさん:03/06/07 17:01
>>41 RFC 読め

43 :デフォルトの名無しさん:03/06/07 17:19
予想通りのレスでワラタ

44 :デフォルトの名無しさん:03/06/07 18:04
>>38
標準関数を全部網羅してなかったからといってクズ本になるわけじゃない。
だがその本は読んだことがないのでクズ本じゃないともいえないw
で、買うのならK&RよりPractical Cをお薦めする。
http://www.oreilly.co.jp/BOOK/cpra/
これね。

45 :デフォルトの名無しさん:03/06/07 18:36
>>43
そこ笑うとこじゃないよ

46 :デフォルトの名無しさん:03/06/07 19:15
gccっていうコンパイラはインストールしたんだけど
初心者向けでフリーのエディタって何でしょう?

47 :デフォルトの名無しさん:03/06/07 19:18
>>46
kwrite

48 :_:03/06/07 19:21
http://homepage.mac.com/hiroyuki43/jaz07.html

49 :46:03/06/07 19:32
すいません
win用を・・・

50 :デフォルトの名無しさん:03/06/07 19:33
そ  れ  な  ら  メ  モ  帳  が  あ  る  だ  ろ  う  が

51 :デフォルトの名無しさん:03/06/07 19:45
>>49
TeraPad

52 :デフォルトの名無しさん:03/06/07 19:50
>>49
xyzzy

53 :46:03/06/07 19:56
>>51-52
ありがとうございます。
さっそく試してみます。

54 :デフォルトの名無しさん:03/06/07 19:59
>>53
杜やvectorであさっていろいろ使って自分にあったものを探せばよろし。
ただなんだし。

55 :デフォルトの名無しさん:03/06/07 20:01
スレ違いな質問はスルー推奨

56 :預言者:03/06/07 20:02
http://elife.fam.cx/mfg/




57 :デフォルトの名無しさん:03/06/07 20:40
http://jbbs.shitaraba.com/computer/6765/



58 :デフォルトの名無しさん:03/06/07 20:50
Cで一応プログラミングようになったんだけど、
もうプログラミングする課題が尽きました。
課題を出していりるサイト知りませんか?
もしくは、課題を出してもらえませんか?
簡単なのでも結構ですので。

59 :デフォルトの名無しさん:03/06/07 20:53
宿題スレに投げられた問題をやってみるとか。

60 :デフォルトの名無しさん:03/06/07 21:05
>>58
>>57のリンク先にゆけ

61 :デフォルトの名無しさん:03/06/07 21:16
1〜10の中でランダムに一つ選ぶってのは
どの関数を使うんですか?
記述を教えてください

62 :デフォルトの名無しさん:03/06/07 21:17
>>61
rand()%10+1

63 :デフォルトの名無しさん:03/06/07 21:32
>>58
なんのためにプログラミング勉強してるんだろ。
課題なんてやってないで、とっとと自分の好きなソフト作ればいいのに。
課題をとくのを目的にプログラムやってるのだろうか…

64 :sage:03/06/07 21:39
n元一次方程式の解を求めるプログラムを作ってください


65 :デフォルトの名無しさん:03/06/07 21:49
>>64
だれが作るか。
ボケが。

66 :デフォルトの名無しさん:03/06/07 22:03
visual c++.netです
コンボボックスのドロップダウン型でドロップダウンした時の一番上の選択するやつのnIndex
って0ですよね・・・?そしたらドロップダウンしない普通の入力欄のnIndex
っていくつですか?−1でやるとエラーでちまうんですばい

67 :デフォルトの名無しさん:03/06/07 22:44
多分すれ違い加茂

68 :デフォルトの名無しさん:03/06/07 22:45
>>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] );
  }
}

なんでかコンパイル通らないんですけど

70 :デフォルトの名無しさん:03/06/07 22:50
>>69
エラーメッセージくらい書きなよ。
全角スペースを使っているからだと思うけど

71 :66:03/06/07 22:51
すいません他スレいきますですはい

72 :デフォルトの名無しさん:03/06/07 22:51
全角スペースはインデント維持のためじゃね?
エラーメッセージ書けは同感だが

73 :デフォルトの名無しさん:03/06/07 22:53
>>72
voidとmainの間、項と演算子の間もか?

74 :デフォルトの名無しさん:03/06/07 22:54
はやくエラーメッセージ書いてくれ。
気になるだろ。

75 :デフォルトの名無しさん:03/06/07 22:55
>>69
漏れも、このHPで勉強したなあ…
これそのままコピーしてないか?
それなら>>70で正解だと思う。

76 :デフォルトの名無しさん:03/06/07 22:56
>>75
ネタじゃなくてそういうことか・・・・
<PRE>使えよー

77 :デフォルトの名無しさん:03/06/07 22:57
http://www.sgnet.co.jp/c/4-2.htm
なんだここのをブラウザからそのままコピってコンパイル
とおらないとか言ってたのか。一回氏ね。

78 :デフォルトの名無しさん:03/06/07 23:02
ファント・ホッフ係数の計算ロジック作って。
モティロン、ポインツァを駆使して。


79 :デフォルトの名無しさん: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をインクルードしてな。

83 :デフォルトの名無しさん:03/06/07 23:12
>>81
真っ先にsrand(time(NULL));とでもしておけ。

84 :デフォルトの名無しさん:03/06/07 23:12
rand() の前にsrand()を呼ぶ

85 :82:03/06/07 23:13
>>83-84
ケコーンしよう

86 :直リン:03/06/07 23:13
http://homepage.mac.com/yuuka20/

87 :デフォルトの名無しさん:03/06/07 23:15
やっぱり種はグローバル変数なのかな。

88 :デフォルトの名無しさん:03/06/07 23:16
>>87
は?

89 :デフォルトの名無しさん:03/06/07 23:16
>>88
srandで設定したものをrandで使うんだからグローバル変数なのかなと。

90 :89:03/06/07 23:20
VC++では違うみたいだな。

91 :デフォルトの名無しさん:03/06/07 23:24
>>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);
}

こんな感じですか?

93 :デフォルトの名無しさん:03/06/07 23:28
>>92
そういうこと。
でもそれじゃコンパイル通らないと思うよ。

94 :デフォルトの名無しさん:03/06/07 23:29
あっ、しまった。

95 :_:03/06/07 23:32
http://kame.kakiko.com/hiroyuki/jaz_b01.html

96 :デフォルトの名無しさん:03/06/07 23:32
>>92
stdlib.h入れろ。
宣言より前に関数呼ぶな。

97 :デフォルトの名無しさん:03/06/07 23:34
おい!おまいらもすごろく作りに参加汁!
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
さぁ、間違い探しをしよう(ぉぃ

100 :デフォルトの名無しさん:03/06/08 00:26
int a;の場所。

101 :デフォルトの名無しさん:03/06/08 00:31
たかがインデントなんだが・・・。
どうしてもきれいなソースにならない!!!
インデントについて詳しく書いてあるページない?

102 :デフォルトの名無しさん:03/06/08 00:31
インデントがなくてみにくい

int mainなのにreturnしてない

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

a=getchar() int型に直ですか

103 :デフォルトの名無しさん:03/06/08 00:37
a=='1'

104 :デフォルトの名無しさん:03/06/08 00:42
scanfで取り込んだ整数の後ろに文字を表示させたいのですが、
自動改行されてしまって上手く表示することができません。
どうすればよいのでしょうか?

105 :デフォルトの名無しさん:03/06/08 00:44
意味がわからない。
ソースきぼんぬ

106 :デフォルトの名無しさん:03/06/08 00:52
>>102
getcharはintで受けるべきなのだが…

107 :106:03/06/08 00:53
あ、ごめん、ボケてた。そのあと、if (a==1)なんてやってたな。

108 :デフォルトの名無しさん:03/06/08 00:54
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;

109 :デフォルトの名無しさん:03/06/08 00:54
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;
}

110 :104:03/06/08 00:55
56です。
と表示させたいんです。

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

これだと、

56
です。

と表示されてしまうのです。

111 :デフォルトの名無しさん:03/06/08 00:57
こんな感じなんですが、実行すると第一問の答えを20と入れても進まず、
もう一度数字を入力しなきゃいけなくなります。
2つ入力すると次の問題に進みますが・・・

第一問の際に1問目の答えの20、続けて2問目の答えを入力すると2問目は正解と言われます。
続いて2問目が出てきますがこの時3問目の答えを答えないと3問目が不正解になります。
一つづつ問題と答えがずれてしまうんですが何故ですか?
5問目になると強制終了します

112 :デフォルトの名無しさん:03/06/08 00:57
(^_^;)

113 :デフォルトの名無しさん:03/06/08 00:59
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--と書いた方がよい。

114 :デフォルトの名無しさん:03/06/08 01:03
>>110
printf("%dです。\n", n);

115 :デフォルトの名無しさん:03/06/08 01:03
正解でも不正解でも a は変わらないのね。

116 :デフォルトの名無しさん:03/06/08 01:04
>>115
1足した後に1引くからな(笑)

117 :デフォルトの名無しさん:03/06/08 01:07
aを0から初めて、正解した数だけ足したら?
んで、最後に

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

ってすんのさ。

118 :104:03/06/08 01:08
>>114
scanf関数の中はどんな形にすればいいんでしょうか。

119 :108:03/06/08 01:20
どうもです。

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

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

else {
printf("不正解です\n");
}
こんな感じでいいんでしょうか?

120 :108:03/06/08 01:22
>117
あーなるほど、そういうやり方も出来ますね。
簡潔なモノを書けるよう無い頭振り絞るようにします


それで、問題と答えがズレてしまうのは何故なんでしょうか・・・?

121 :デフォルトの名無しさん:03/06/08 01:23
>>119
> a=a++;
違う。これじゃ有名な未定義コードになってしまう。
a++;とだけ書く。

122 :デフォルトの名無しさん:03/06/08 01:27
もっと言えば、5問の問題の文字列と正解を配列にいれといて、
forで回したほうが完結だし、あとで問題を増やすのも楽チンだな。

123 :デフォルトの名無しさん:03/06/08 01:39
>>118
以前のままで。

124 :デフォルトの名無しさん:03/06/08 01:46
さらに言えば、問題の数式の部分だけ別の配列にいれて、
出題時にその数式を元に答えを計算すれば、
問題と答えが食い違うことがなくなるな。

そうとう大変だけど。

ズレるのはなんでだろうねぇ。
>>108>>109の間が肝心なところなんだろうけどぶった切れてるからわからない。
今ではelseの登場によってソースも変わってるだろうし。

125 :デフォルトの名無しさん:03/06/08 01:49
なんで a = 5 からスタートしてるん?
どういう考えか興味ある。

126 :デフォルトの名無しさん:03/06/08 01:58
a5=英語のテスト

127 :デフォルトの名無しさん:03/06/08 02:33
>>121
      ヽ ̄ ゙̄\
       \  ヽ \
         ヽ    ゙!
          /      |
       /     ,.イ
      ∠___/ :|`ヽ.、
          ノ     '!   \-、
     _,.=''1      ヽ,   `'
      ヽ'" i|       |
         !       |
         呼んだ〜?

128 :デフォルトの名無しさん:03/06/08 02:38
#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);

129 :デフォルトの名無しさん:03/06/08 02:39
////////////////////////////////////////////////////////////////
//  結果の出力                //
//////////////////////////////////////////////////////////////// 
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);
}
}

130 :デフォルトの名無しさん:03/06/08 02:40
switch使いなよ。

131 :デフォルトの名無しさん:03/06/08 02:41
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");
}

132 :デフォルトの名無しさん:03/06/08 02:45
間違ってたら指摘してください。
課題で先生に
ifとfor文しか教えてないから他のは使うなといわれてます
0の時の判断もホントはしなくていいのですが

133 :デフォルトの名無しさん:03/06/08 02:48
stdinにrewindって使えるの?

134 :デフォルトの名無しさん:03/06/08 02:53
五則演算

135 :デフォルトの名無しさん:03/06/08 02:54
rewindはしないといけないといわれまつた

136 :デフォルトの名無しさん:03/06/08 02:55
全部==にしときな

137 :デフォルトの名無しさん:03/06/08 02:59
そっちのほうが分かりやすいからでつか?       

138 :デフォルトの名無しさん:03/06/08 03:01
というか、!= にするメリットってあるか?

139 :デフォルトの名無しさん:03/06/08 03:01
演算子に変なの入れた時

140 :デフォルトの名無しさん:03/06/08 03:04
>>139
elseでいいだろ

141 :デフォルトの名無しさん:03/06/08 03:11
フローチャートも書かされてるんでif(c==+)if(c==-)if(c==*)とやってくと
縦に長くなり1枚に収まらないのでネストが一番かと

142 :104:03/06/08 03:23
>>123
そうすると、
56
56です。

と表示されるのですが・・・。

143 :デフォルトの名無しさん:03/06/08 03:24
フローチャート指向プログラミング

144 :デフォルトの名無しさん:03/06/08 03:29
スマソ。今度からはめんどくさがりません

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

聞きたいのは「こうすれば出来るじゃん!」っでなくて
「普通こうやるよねー」とか「これ使うといいよん」って意見で。


146 :デフォルトの名無しさん:03/06/08 03:39
>>142
仕方がないかと。

147 :デフォルトの名無しさん:03/06/08 03:43
>>145
strtok か strchr を使うといいかと。

148 :デフォルトの名無しさん:03/06/08 04:57
>>142
それはそういうもの。
入力の行と、出力の行は別々になる。これはどうしようもない。

どうしても嫌なら、プログラムの1番最初と、printfの直前に
system("clear");
とでも入れておけ。

149 :デフォルトの名無しさん:03/06/08 05:02
Ctrl+D(Windows なら Ctrl+Z だっけ?)で入力終了すれば
改行されずにすむね。

150 :デフォルトの名無しさん:03/06/08 06:27
A:Ctrl+D  B:Ctrl+Z
C:Ctrl+S  D:Ctrl+C

どれでファイナルアゥンサー?

151 :デフォルトの名無しさん:03/06/08 07:46
コーディングスタイルで質問です
switch のときに、

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

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

のように、 switch と case で段差をつける2通りがありますが、どちらのほうが一般的ですか?

152 :デフォルトの名無しさん:03/06/08 08:00
俺は下
でもどっちでもコード見る時に大差はない

153 :108:03/06/08 08:24
お早う

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

>121
thxです

>125
今思うと何ででしょうね・・・・
自分でも解りません

154 :108: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");
}

155 :108: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");
}

156 :108: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;
}

157 :デフォルトの名無しさん:03/06/08 08:55
qwertと5つも意味不明な名前の変数を設ける理由が判らない。


158 :デフォルトの名無しさん:03/06/08 10:48
>>157
この変数を選んだ理由も知りたい(w

もっと分かりやすい変数名をつけよ。

159 :デフォルトの名無しさん:03/06/08 11:21
変数名は ans とかのほうがわかりやすいな。
それと、ans[5]にして1問めから順にans[0], ans[1]…といれていったほうがいいかな。

160 :デフォルトの名無しさん:03/06/08 11:26
で、ズレのはなんでだろう。漏れもわからん。
ちなみにifとelseの間は普通は1行空けたりしないぞ。

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

めんどいけど。

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

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

どうなんですか?

162 :YUIS: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/
よろしくね!!!

163 :デフォルトの名無しさん:03/06/08 12:47
>>161
FAQだ。これを読め。
http://www.catnet.ne.jp/kouno/c_faq/c6.html#2

164 :デフォルトの名無しさん:03/06/08 12:57
>>158
俺には分かるぞ!
喪前のキーボードのQから右に読んでみそ。







( ´A`)



165 :デフォルトの名無しさん:03/06/08 13:01
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
http://homepage.mac.com/norika27/

168 :デフォルトの名無しさん:03/06/08 13:13

あなたが探してるのってこれだよね?この中にあったよ♪
http://alink3.uic.to/user/angeler.html
http://angelers.free-city.net/page002.html

169 :デフォルトの名無しさん:03/06/08 13:19
>>166
上ならポインタのサイズ、下なら配列のサイズ

170 :デフォルトの名無しさん:03/06/08 13:29
>>164
俺のマシンのrootのパスワードだ ( ´A`)
最後にyがつくけど

171 :デフォルトの名無しさん:03/06/08 13:35
>>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);
}


172 :デフォルトの名無しさん:03/06/08 13:36
>>171
 だらけでみにくいぞ

173 :172:03/06/08 13:37
あら・・・・
>>171
&nbspだらけでみにくいぞ

174 :デフォルトの名無しさん:03/06/08 13:39
>>172
何が?

175 :デフォルトの名無しさん:03/06/08 13:42
>>174
>>171が。charの前とかA"の前とか。ほかにもいろいろ。

176 :デフォルトの名無しさん:03/06/08 13:45
#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);
}

177 :デフォルトの名無しさん:03/06/08 13:50
nbspのあとにセミコロンがないから。

178 :デフォルトの名無しさん:03/06/08 13:59
>153で教本?の最初の方までしか覚えてないっぽいからcharとか知らないんじゃない?
漏れダイテル本持ってないから解らんけど

179 :デフォルトの名無しさん:03/06/08 14:21
>>164
それか!(w
そんな命名方法考え付くのに感心する。

180 :デフォルトの名無しさん:03/06/08 14:39
今まで一人でプログラムを組んでた時は、統一性のない汚いソースでも別に良かったんですが
複数でプログラムを組むことになったので、読みやすい綺麗な書き方を見本にしたいので
参考になるサンプルソースないですか?

181 :デフォルトの名無しさん:03/06/08 14:41
ないです。

182 :デフォルトの名無しさん:03/06/08 15:00
>>180
*BSD をハックする。

183 :デフォルトの名無しさん:03/06/08 15:06
>>180
2項演算子の左右は空白を空けろ
forやifにぶら下がる処理は必ず{}でブロック化しろ
{}をif()の横から始めたり下から始めたり場所によって違うのはやめろ
コンマやセミコロンでデータや式を列挙する場合は空白を空けろ
変数の命名法はある程度の指針を決めておけ
コメントはちゃんと書け
めしは上手く作れいつもきれいでいろ

184 :デフォルトの名無しさん:03/06/08 15:16
>>180
設計をきちんとしる。コーディング規約つくれ。クロスレビューしる。

185 :デフォルトの名無しさん:03/06/08 17:19
http://jbbs.shitaraba.com/computer/6765/
Cの初心者ならここに来るしかない!
質問、雑談何でもOK!
初歩的なことでももちろんOK!
もちろん、上級者の皆様にも来ていただきたいです。







186 :デフォルトの名無しさん:03/06/08 17:24
http://member.nifty.ne.jp/yamazaki/doc/code_design/vol01.html

メンバー全員で読め。っていうか印刷して配っておけ。

187 :デフォルトの名無しさん:03/06/08 18:02
>186
ノイズが多いし。ハンガリアンは嫌いだ

188 :デフォルトの名無しさん:03/06/08 18:05
>>186
ファイルローカルだってさ(藁
内部リンケージだろ(藁

189 :デフォルトの名無しさん:03/06/08 18:14
>>188
そんくらい目くじら立てるなよ。
どうせお前も他人が聞いたら変な言葉の使い方してるんだから。

190 :デフォルトの名無しさん:03/06/08 18:14
Cならなんでもいいんですよね。
さっきVBに技能検定があることを知り、つい笑ってしまいました。
それは置いといて・・
Cにも検定はあるんですか?

191 :デフォルトの名無しさん:03/06/08 18:16
>>190
ある。糞の役にも立たないのが。

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

192 :デフォルトの名無しさん:03/06/08 18:16
>>189
スマソ

>>190
C言語検定とやらがあったと思う。名前が違うかもしれないけど。

193 :デフォルトの名無しさん:03/06/08 18:19
http://www.sikaku.gr.jp/main.html

ここにあるやつかな?VBもあるね。

194 :デフォルトの名無しさん:03/06/08 18:25
>>190
持ってるけど
履歴書埋めるくらいの役にしかたたない
ド素人ではありませんと証明するくらいか…

195 :デフォルトの名無しさん:03/06/08 18:36
Cっていきなり3級なんですね。
がんばろ

196 :デフォルトの名無しさん:03/06/08 18:50
>>194
見せる相手によっては「こんなもので実力の証明にしようとしやがって」
とかバカにされるので注意な。ど素人以下の扱いを受けることあります。

197 :デフォルトの名無しさん:03/06/08 18:55
>>195
だから、3級も2級も使えないって。
1級は見たことないが、こんな資格の1級まで目指すやつキモい。
>>196
そのとおりです。

198 :デフォルトの名無しさん:03/06/08 18:58
マジっすか、まぁもし検定受かったら
履歴書に書くときは気をつけよう。

199 :デフォルトの名無しさん:03/06/08 19:00
自慢げにしなければ書いてもいいと思うけど・・・・

200 :デフォルトの名無しさん:03/06/08 19:01
すかさず200げと。
履歴書に200げと!って書いていい?

201 :デフォルトの名無しさん:03/06/08 19:01
個人的にはどんな資格でもないよりはマシだと思うけど、
過剰なくらい資格をバカにする技術者もいるんで、注意が必要だな。

202 :デフォルトの名無しさん:03/06/08 19:04
C言語の試験ってCの歴史まで出題されるあれか?

203 :デフォルトの名無しさん:03/06/08 19:09
>>202
マジ?確かに必要ないかもな・・・

204 :デフォルトの名無しさん:03/06/08 19:10
Cmachineってどうなのよ?

205 :デフォルトの名無しさん:03/06/08 19:13
>>204
何が?

206 :デフォルトの名無しさん:03/06/08 19:16
>>187
いや、とりあえず使う人間全員で統一した見解を持つのは必要だろ?
このリンク先が気に食わないなら、自分で統一ルールを作って晒してくれ。

>>204
誰も使いたがらない、不燃ゴミだな。

207 :204:03/06/08 19:18
なんかうちの高校ではみんなが自由つかえるようにフリーのソフト
を使っていますとか言っているんですが、もうこの高校に入学した
時点で終わりですか?

208 :デフォルトの名無しさん:03/06/08 19:19
せめて、完全じゃなくてもANSI C準拠を目指したコンパイラを使った方がいいって。

209 :デフォルトの名無しさん:03/06/08 19:19
>>207
その程度で高校が終わってるかどうか判断しようとする
お前が終わってるよ。確実にな。

210 :204:03/06/08 19:21
>>209
いやフリーならhttp://pc2.2ch.net/test/read.cgi/tech/1035882599/1
があると思った。

211 :デフォルトの名無しさん:03/06/08 19:28
マジレスするならば。
C machineは標準Cと挙動が違いすぎるのでCの学習には全く適さない。
では、プログラミング一般の学習にはどうかというと、Cは抽象度が低すぎて
これまた適さないと思うんだな。何がいいかは意見が分かれるだろうけど、
おれだったらSchemeかOcamlかRubyかPythonあたりだと思う。

結論としてCの習得にもプログラミング一般の習得にも適さないので、
C machineは使わんほうがいい、と思う。その高校が終わってるかどうかはしらんw

212 :デフォルトの名無しさん:03/06/08 19:30
C Machineのctype.hを見てみたら引数を複数回評価するようになっていたけどいいのかな?
普通はisalphaなどはテーブル参照で実装すると思うけど。

213 :デフォルトの名無しさん:03/06/08 19:32
>>212
別にマクロであることさえ分かってればいいんじゃない?

214 :デフォルトの名無しさん:03/06/08 19:32
>>212
「普通は」は使わないほうがいい

215 :デフォルトの名無しさん:03/06/08 19:34
でもあまり#ifを使っていないからみやすいぞ(笑)

216 :デフォルトの名無しさん:03/06/08 19:34
C machine を実際にDLしてみた。

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

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

でもC言語の勉強にはならないな。

217 :デフォルトの名無しさん:03/06/08 19:37
qsortはあるのにbsearchがない・・・abortもないよぉ。

218 :デフォルトの名無しさん:03/06/08 19:38
>>217
作り甲斐があるねw

219 :デフォルトの名無しさん:03/06/08 19:41
よくわからんが、UNIX系のマシン1台あれば勉強できるような気もするが。
telnetしてvi(なんでもいいけど)してcc(gcc)で十分だろ。

220 :デフォルトの名無しさん:03/06/08 19:41
>>183
できる範囲で構わないんだな

221 :デフォルトの名無しさん:03/06/08 19:43
char *argv[]とchar **argvを違うものとするのか・・・・

222 :183:03/06/08 19:46
>>220
ああ、忘れてくれるな。

223 :デフォルトの名無しさん:03/06/08 19:56
>>222
ま、ちょっと覚悟はしておけ。

224 :335: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

今度こそコーディングは終わったのですがデバックが・・・。
エラーログが微妙。

225 :183:03/06/08 20:08
>>224
main関数が閉じてないんだが…

226 :デフォルトの名無しさん:03/06/08 20:09
独り言?
質問じゃないならいちいちageなくても。

227 :デフォルトの名無しさん:03/06/08 20:10
>>224
スレ間違えていないか?
「スレ立てるまでも・・・」じゃなかったか?

228 :デフォルトの名無しさん:03/06/08 20:15
>>224
scanf("%d",&atai2");
とかなってるとこあるぞ。

229 :デフォルトの名無しさん:03/06/08 20:16
>>228 ボウヤだからさ ♥

230 :335:03/06/08 20:25
見事にスレ間違えました。
関数呼び出しに ) がない(関数 main )
文字列または文字定数が閉じていない(関数 main )
メイン関数閉じてないのはアップする時のミスです。
コンパイラではちゃんと閉じてコンパイルしてます。

231 :デフォルトの名無しさん:03/06/08 20:35
>>230
なかなかうざい方ですね。

232 :335:03/06/08 20:44
いえいえ、それほどでも♥

233 :デフォルトの名無しさん:03/06/08 22:24
激しく質問。
メイトリックスみたいに流れるコード(数字のみ)を作りたいんだけど、、、。

234 :183:03/06/08 22:28
#include <stdio.h>
#include <stdlib.h>

main()
{
  line10:printf("%d\n", rand() % 10);
  line20:goto line10;
  return 0;
}


235 :デフォルトの名無しさん:03/06/08 22:40
>234
せめてforかwhileで回してよ…

236 :デフォルトの名無しさん:03/06/08 22:43
店頭のMSXマッスィーンを思い出す…goto

237 :183:03/06/08 22:47
>>235
わかるやつにはわかるんだよ。>>236とかな(w

238 :デフォルトの名無しさん:03/06/08 22:54
>>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でもそんなメソッドないぞ!

244 :デフォルトの名無しさん:03/06/08 23:07
>>241
strtok

245 :デフォルトの名無しさん:03/06/08 23:08
ありがとうございます。
簡単な記述例をおねがいできないでしょうか?

246 :デフォルトの名無しさん:03/06/08 23:09
>>239
strtok

247 :デフォルトの名無しさん:03/06/08 23:10
>237
わからんにゃー。MSXに触ったことにゃーし

248 :デフォルトの名無しさん:03/06/08 23:11
べつに分かったからって何の意味もない。
そんなもんで威張っている奴が居たらバカ。

249 :デフォルトの名無しさん:03/06/08 23:13
>>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
ありがとうございます。
参考にさせていただきます。

251 :デフォルトの名無しさん:03/06/08 23:19
CでXMLのデータを取り出す作業に詳しい人
教えてください。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1055071590
どうすれば 表示できるようになりますか?


252 :デフォルトの名無しさん:03/06/08 23:21
>>250
ちなみに二文字以上の文字列で区切ろうとする場合にはstrtokは勧められないので注意を。
第二引数のそれぞれの文字で区切ろうとするからね。

253 :デフォルトの名無しさん:03/06/08 23:36
こんなのできたっち
#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("ある晩、二人の男が風呂に入った。
一人がもう一人のちんぽを見た。
そいつのちんぽはドス黒かった。使い古した後がうかがえた。
「おまえ、ずいぶん女を泣かせただろ?」
「いや、おれはまだ童貞だ」
そいつのちんぽはせんずりで使い古したのだった。 ");


255 :デフォルトの名無しさん:03/06/08 23:41
>>253
ここはCスレだYO

256 :デフォルトの名無しさん:03/06/08 23:46
CStringの文字をchar型に代入したいんですがうまくいかないです
char a;
CString b;
a = (LPCTSTR)b;
どこが悪いっすか?

257 :デフォルトの名無しさん:03/06/08 23:47
スレ違い・・・・
Stringなのにcharに代入できるの?

258 :デフォルトの名無しさん:03/06/08 23:51
間違えた
char a[200];
CString b = "aiueo";
a = (LPCTSTR)b;

すれ違いスマソ。
え、てかできないんすか?

259 :デフォルトの名無しさん:03/06/08 23:52
#defineってどういうことですか?

260 :デフォルトの名無しさん:03/06/08 23:53
>>256
MFCへ
b.GetBuffer();


261 :デフォルトの名無しさん:03/06/08 23:54
>>258
Cの範囲ならそれはできない。配列名に代入は不可。C++はどうだか知らないけど・・・

>>259
記号定数の定義

262 :デフォルトの名無しさん:03/06/08 23:55
C++でも配列名には代入できない

263 :デフォルトの名無しさん:03/06/08 23:58
>>260
了解です。MFCいってきます

264 :デフォルトの名無しさん:03/06/08 23:59
と思ったけど凄いスレ進行遅い。。。
文字数取得の後どうすれば?

265 :デフォルトの名無しさん:03/06/09 00:00
strncpy ヲツカエ

266 :デフォルトの名無しさん:03/06/09 00:01
ああああ!わかったかも。
ちょっと試してきまつ

267 :デフォルトの名無しさん:03/06/09 00:02
>>265
char型でないと使えないのでわ?

268 :デフォルトの名無しさん:03/06/09 00:05
>>267
CString は LPCTSTR (const char FAR *) へのキャスト演算子をオーバーロードしてあるので
CString 「から」の strncpy でのコピーは可能。
CString 「へ」の strncpy でのコピーは(GetBuffer使わないと)無理だけど。

269 :デフォルトの名無しさん:03/06/09 00:06
char a[200];
iRadioCheckId = "kakikukeko";
CString str(a);
str = str + iRadioCheckId;
a = (LPCTSTR)iRadioCheckId.GetBuffer(iRadioCheckId.GetLength());
AfxMessageBox(a);

でコンパイル通らないっす。なぜにぃ

270 :not 267:03/06/09 00:07
やっぱりそういう仕組みか。

271 :デフォルトの名無しさん:03/06/09 00:07
>>268
サンクス。試してみます。

272 :デフォルトの名無しさん:03/06/09 00:08
>>269
配列名には代入できないって言ってるでしょ。

273 :デフォルトの名無しさん:03/06/09 00:11
で、だ。何で CString から char 配列にコピーしたい理由は何なんだ?

274 :デフォルトの名無しさん:03/06/09 00:11
「何で」を消し忘れ

275 :デフォルトの名無しさん:03/06/09 00:14
URLエンコードするのに使います

276 :デフォルトの名無しさん:03/06/09 00:18
URLエンコードは元のままの方がしやすいと思うけど・・・
それともchar *で受け付けるライブラリでも使うの?

277 :デフォルトの名無しさん:03/06/09 00:20
元のまま・・・?
ttp://www.geocities.co.jp/SilkRoad/4511/vb/urlenc_c.htm
使おうと思ってるんですけど他にあるんすか?

278 :デフォルトの名無しさん:03/06/09 00:22
みなきゃよかった(T_T)

279 :デフォルトの名無しさん:03/06/09 00:24
え?え?

280 :デフォルトの名無しさん:03/06/09 00:33
つーかおまいらスレ違うだろ。

281 :デフォルトの名無しさん:03/06/09 00:35
>>278
まぁ、自覚してるからいいんじゃない?

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

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

 sprintf(ctemp, "%%%02X", (unsigned char)*(csource + lcount));
に変更してやれば、
csource へ CString オブジェクトをそのまま渡せるはず。

282 :デフォルトの名無しさん:03/06/09 00:36
>>277
ダメソースの見本だな。

283 :デフォルトの名無しさん:03/06/09 00:39
URLエンコードってもっと単純なはずだよね?
英数字とスペースと_-.*以外を%+二文字の16進数字列にして、スペースを+におきかえるだけだよね?

284 :デフォルトの名無しさん:03/06/09 00:40
マジでサンクスです!
すれ違いの馬鹿野郎にまじでどうもです。
早速ためすぞこらー

285 :デフォルトの名無しさん:03/06/09 00:56
エラー大量産出。。。
CのコードC++に書き換えなきゃだめかぁ。
>>276
で言ってた方法とは??

286 :デフォルトの名無しさん:03/06/09 01:00
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は忘れて。

288 :デフォルトの名無しさん:03/06/09 01:04
了解です。これ以上スレ違いも痛いんで他スレに行きます。。
どもでした!

289 :デフォルトの名無しさん:03/06/09 01:06
>>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 == ' ') {

290 :デフォルトの名無しさん:03/06/09 01:06
   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';
}

291 :デフォルトの名無しさん:03/06/09 01:10
>>277
ロジックそのままでいいから、CStringかstringをつかって書き直したほうがいいな。

292 :デフォルトの名無しさん:03/06/09 01:13
わ。。
ちょっくら試してみます!今度こそうまくいけぇ〜

293 :デフォルトの名無しさん:03/06/09 01:15
sprintfって便利だよなぁ。

294 :デフォルトの名無しさん:03/06/09 01:18
ビルドエラータスク100件越えますた・・・
Unicode識別子はサポートされないエラーが大量発生です。
環境はVS.NETです。

295 :デフォルトの名無しさん:03/06/09 01:19
>>294
全角スペースを半角スペースに置き換えた?

296 :デフォルトの名無しさん:03/06/09 01:20
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。

297 :デフォルトの名無しさん:03/06/09 01:24
もうまじ馬鹿と言って下さい
あぁもう自分が嫌

298 :デフォルトの名無しさん:03/06/09 01:32
286ですが
やっぱりだめですか?


299 :デフォルトの名無しさん:03/06/09 01:36
>>298
んーと、parse 目的なの〜?
Windows なの〜?

だとしたら、msxml なんかに任せたほうがいいんじゃないの〜?

300 :デフォルトの名無しさん:03/06/09 01:39
引数がよくわからんです
char *dst,←文字へのポインタ?
size_t size,←文字数?
const char *src←これ何・・・?

301 :デフォルトの名無しさん:03/06/09 01:42
>>300
そのポインタが指す先の内容を書き換えないという宣言だ。
もし書き換るようなそぶりを見せたらコンパイラが叱ってくれる。

302 :デフォルトの名無しさん:03/06/09 01:42
srcを変換したものをdstに入れるんじゃないの?
sizeはdstの領域の大きさだと思う。

303 :301:03/06/09 01:42
う。言葉足らず。301はconst char *srcについてな。

304 :289:03/06/09 01:50
>>301-302
説明あんがちょ。

305 :デフォルトの名無しさん:03/06/09 01:50
>>299
parse目的です。

306 :デフォルトの名無しさん:03/06/09 02:07
char型をint型に変換する関数は知っているんですが、その逆、つまり
int型をchar型に変換(文字列のポインターを渡す?)関数ってのを知りたいのですが
教えてください。

307 :デフォルトの名無しさん:03/06/09 02:08
多分sprintf

308 :デフォルトの名無しさん:03/06/09 02:11
馬鹿でスマソ
UrlEncode();の引数には何をいれれば・・・?
srcを変換した物をdstに入れるって事は
dst=変換後に入れる変数のポインタ
size=その大きさ
src=変換する文字列へのポインタ
でよい?

あとこのプログラムCStringを渡せないっすか・・・?

309 :デフォルトの名無しさん:03/06/09 04:08
だからスレ違いだってば。

310 :デフォルトの名無しさん:03/06/09 11:07
>>308
secとしては渡せるけどdstとしては渡せない。

311 :デフォルトの名無しさん:03/06/09 16:45
>>309
まじすいません。あと少しだけおながいします
ここまで来て他スレで聞いたらわけわかんなくなっちまうんで

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

>>289
この関数日本語入れるとエラー出ちまいます。
マジでお手数ですが直していただけるとうれしいです。
それまで自分で直してみるけどむりっぽ。。

312 :デフォルトの名無しさん:03/06/09 17:28
let を unsigned char にしてみて。

313 :デフォルトの名無しさん:03/06/09 17:31
>>311
sizeは充分な大きさにしている?
最悪srcに渡す文字列の3倍必要だけど

314 :デフォルトの名無しさん:03/06/09 17:50
>>312
できました!マジサンクスです!!
>>313
三倍確保してます

315 :デフォルトの名無しさん:03/06/09 17:54
と、喜びもつかの間
%E3%81%82←Googleのエンコード
%A4%A2←Yahoo!のエンコード
%82%A0←上の関数のエンコード
ぐぐるのエンコードにできまつか??

316 :デフォルトの名無しさん:03/06/09 17:56
やってみたらよかんべ

317 :デフォルトの名無しさん:03/06/09 17:58
>>315 できます。

318 :デフォルトの名無しさん:03/06/09 18:05
>>315
何がしたいのか知らんが、GoogleだってSJISで渡せば同じになる。

319 :デフォルトの名無しさん:03/06/09 18:10
できるんすか?!
SJISで渡す方法はどうすれば??
とりあえず検索したら
ttp://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/j/jis2sjis.html
こんなんでてきたんすけど違うかなぁ。。
上の関数ではJISを使ってるんですか?

320 :デフォルトの名無しさん:03/06/09 18:11
とりあえずCと関係ないと言っておきます。

321 :デフォルトの名無しさん:03/06/09 18:14
S-JISで渡す方法?
投稿フォームのあるページをS-JISで書けば多くのブラウザはS-JISで送ると思うけど・・・

Cと関係ないね。

322 :デフォルトの名無しさん:03/06/09 18:14
なにぃ・・・。
|  |
|  |_∧
|_|ω・`) <意地悪しないで教えてほしぃぽ
|  と )
| ̄|u'   旦
""""""""""

323 :デフォルトの名無しさん:03/06/09 18:15
てことはプログラム上でやるのは無理・・・?

324 :デフォルトの名無しさん:03/06/09 18:16
URL エンコードってものが良く分かってないような…。
いずれにせよスレ違いなのでお帰り下さい。

325 :デフォルトの名無しさん:03/06/09 18:16
その関数は漢字のエンコード方法を知らない。
問題は、あんたの使っている環境だ。

326 :デフォルトの名無しさん:03/06/09 18:21
>>324
まじでもうちょっと頼みます。
いまさら他にも行けないので。。。
プログラムが分かるように変換とまでしか分かってないです

>>325
環境って何を書けば・・・?
VS.NET WinXP IE6
とかですか??

327 :デフォルトの名無しさん:03/06/09 18:24
文字コードを統一したいのならNKF32.DLLでも使えばいいのでは。
http://www.vector.co.jp/soft/win95/util/se020949.html

328 :デフォルトの名無しさん:03/06/09 18:25
>>326
まず何がしたいのか書け。
URLエンコードなら、既にできてる。

329 :デフォルトの名無しさん:03/06/09 18:26
ああああ!
意味が分かった!SJISで渡したら確かにエンコード結果一緒でした。
ググルはUnicodeでやっとりました。。

330 :デフォルトの名無しさん:03/06/09 18:26
ShiftJisの文字列を関数に渡せばShiftJisがエンコードされるし、
EUCの文字列を関数に渡せばShiftJisがエンコードされるし、
・・・

自分が渡した漢字がどんなコードかも判ってないなら先ずはそこからだな。

331 :デフォルトの名無しさん:03/06/09 18:29
>>328
ソフト見てもらったほうが早い気がするんで上げます
http://ex.2y.net/guguruno.zip


332 :デフォルトの名無しさん:03/06/09 18:29
>>331
見ないよ。

333 :デフォルトの名無しさん:03/06/09 18:32
がーん。めっちゃ簡単なプログラムなんで
さらっと見ていただけたらいいんすけど。
じゃあ口答で。。
ソフトで検索ワード入れてアドレス直接精製して
そこから直接ぐぐる検索するためにソフト作ってます。


334 :デフォルトの名無しさん:03/06/09 18:34
・・・・・Googleのトップページをダウンロードしてちょこっとソースいじるだけでよさそうな・・・

335 :デフォルトの名無しさん:03/06/09 18:36
それやろうと思ったんすけどどうやればいいのか
さっぱりわからんかったんでアドレス精製しようと
思ったんです。


336 :デフォルトの名無しさん:03/06/09 18:37
http://jbbs.shitaraba.com/computer/6765/
Cの初心者ならここに来るしかない!
質問、雑談何でもOK!
初歩的なことでももちろんOK!
もちろん、上級者の皆様にも来ていただきたいです


337 :デフォルトの名無しさん:03/06/09 18:40
>>335
何でそんな面倒なことをCでやろうと思ったのかよくわからん…
もっと楽なのがあるだろうに。Perlだとかなんだとか。

338 :デフォルトの名無しさん:03/06/09 18:43
どうしてもソフト作りたかったので。。。
さっきのDLL使えばなんとかなります?

339 :デフォルトの名無しさん:03/06/09 18:44
もうイイから消えてくれ。ウザい。

340 :デフォルトの名無しさん:03/06/09 18:50
すいませんでした。
おとなしく消えますです
どもでした

341 :デフォルトの名無しさん:03/06/09 18:52
>>338
なるほどそういうことか。
じゃあまず、文字コードとか、エンコーディングとかでぐぐって、
そのあたりを勉強してみなさいな。複雑でいやになるから。
作ってみたかった程度で手におえるものじゃなかったりするんだよな…

342 :デフォルトの名無しさん:03/06/09 18:54
CGIじゃなかったのか。

343 :デフォルトの名無しさん:03/06/09 18:57
わざわざエンコードなんぞせんでもいいものを。
http://www.google.com/search?lr=lang_ja&q=はぁ?&num=100
これで十分使えるぞ。

344 :デフォルトの名無しさん:03/06/09 18:58
つーか、
http://www.google.com/search?q=はぁ?

345 :デフォルトの名無しさん:03/06/09 18:59
>>343-344
幸せだね

346 :デフォルトの名無しさん:03/06/09 19:03
>>343-344
http://www.google.com/search?q=は?
ぜんぜん使えねぇ。

347 :デフォルトの名無しさん:03/06/09 19:06
前そのまま入れたとき使えなかったのに。。。
もう欝で死にそうです

348 :デフォルトの名無しさん:03/06/09 19:07
http://www.google.com/search?lr=lang_ja&q=はぁ?

349 :デフォルトの名無しさん:03/06/09 19:08
>>347
何が?

>>343-344は相手にしなくていいよ

350 :デフォルトの名無しさん:03/06/09 19:12
IEで使うのだけが目的ならそれで充分っしょ?
どっちみちスレ違いだけど。

351 :デフォルトの名無しさん:03/06/09 19:16
エンコードしなければ文字化けする。
実際文字化けしている。
よって使えない。
分かった?

352 :デフォルトの名無しさん:03/06/09 19:19
使えないのは確かだが「文字化けする」からダメなわけではない。

353 :デフォルトの名無しさん:03/06/09 19:37
しかし、.Netはurlencodeのライブラリもないのか。

354 :デフォルトの名無しさん:03/06/09 20:19
>>353
あるよ。C/C++には無いみたいだが。

355 :デフォルトの名無しさん:03/06/09 22:58
じゃああれだ。
もまえらが使っている有用なライブラリ公開すれ。
まずは>>356から。

356 :デフォルトの名無しさん:03/06/09 23:00
終了

357 :デフォルトの名無しさん:03/06/09 23:02
標準ライブラリ

358 :デフォルトの名無しさん:03/06/09 23:04
winmm.lib
音鳴らすのに今日初めて使ってみた

359 :デフォルトの名無しさん:03/06/10 01:00
cygwin1.dll

360 :デフォルトの名無しさん:03/06/10 02:42
oreno.dll

361 :デフォルトの名無しさん:03/06/10 10:24
関数の引数で
foo(void *bar) {

というのを見かけたのですが、 この void 型のものはどういう型を受け取ることが出来るのですか?


362 :デフォルトの名無しさん:03/06/10 10:53
void型じゃない。

363 :デフォルトの名無しさん:03/06/10 11:04
>>361
いろいろ
intとかcharとか
関数に渡す時は、キャストすんのかな

364 :デフォルトの名無しさん:03/06/10 11:06
intやcharはだめだろ。キャストすれば渡せるけど危険。

>>361
ポインタなら何でも

365 :デフォルトの名無しさん:03/06/10 11:20
>>361
void * … int や char などと違って、
       ポイント先のバイト容量が不明なポインタ型

366 :デフォルトの名無しさん:03/06/10 11:38
>>365
ポインタの++できんつーことか? 1なら charとかわらんな

367 :デフォルトの名無しさん:03/06/10 11:43
そういえばsizeof(void)ってできるのね。


368 :デフォルトの名無しさん:03/06/10 12:05
>>366
>>367
sizeof(void)が1を返すので判るとおり、確かにchar *に似た振る舞いをするね。
でも、普通のコンパイラなら警告出すんじゃない?

ついでに言うと、char *を渡して、内部でint *として参照すると
バスエラーを起こしかねないので要注意で。

369 :デフォルトの名無しさん:03/06/10 12:28
void *はデリファレンスできないが。

あと、プロトタイプがあれば、別にキャストしなくても
ポインタでさえあれば何でも渡せるぞ。

370 :デフォルトの名無しさん:03/06/10 12:30
誰かポインタをキャストしなければいけないと言ったか?

371 :370:03/06/10 12:34
void *に大してintやcharを渡せるのか・・・・警告は出るけど。
じゃあ>>363へか。

372 :デフォルトの名無しさん:03/06/10 12:38
なんかどっかにvoid *の扱いはCとC++で違うってのが書いてたな。
コンパイラの違いだったかな

373 :デフォルトの名無しさん:03/06/10 12:41
>>372
void *を他のポインタに代入するときのことだと思う。
char *p=(void *)0;とやるとC++ではエラー。だからmallocの戻り値も

374 :373:03/06/10 12:41
キャストする必要がある。

375 :369:03/06/10 12:44
あ、ごめんよ。void*にintとかを渡すって書いてあったな。
int *とか*がついてるもんだと思ってた。
そんな非常識なことはありえないと思って勝手に補完して読んでたらしい。
すまんすまん。確かにキャストが必要です。

376 :デフォルトの名無しさん:03/06/10 13:53
>>368
gccか?
たしかgccではvoid *に対する演算が可能なように拡張されてるけど。

377 :デフォルトの名無しさん:03/06/10 14:22
int int377[377];

378 :デフォルトの名無しさん:03/06/10 15:59
c言語でπを求めたいのですが、いちばん簡単なプログラムは
どうやって書くか教えてください!!

379 :デフォルトの名無しさん:03/06/10 16:01
>>378
数学の勉強しる!

380 :デフォルトの名無しさん:03/06/10 16:04
>>378
double pi = acos(-1);

381 :デフォルトの名無しさん:03/06/10 16:05
一万桁まで求めたいです…

382 :デフォルトの名無しさん:03/06/10 16:07
>>381
電気通信大学の方ですか?

383 :デフォルトの名無しさん:03/06/10 16:08
>>378
http://3.141592653589793238462643383279502884197169399375105820974944592.jp/

ここをダウンロードして表示する

384 :デフォルトの名無しさん:03/06/10 16:09
>>378
少しは調べれ!
http://hp.vector.co.jp/authors/VA014765/pi/

385 :デフォルトの名無しさん:03/06/10 17:38
>383
それが(・∀・)イイ!

386 :デフォルトの名無しさん:03/06/10 18:59
円周率で思い出したけどC++のint画型だけ大きさがCPUのビットを同じ記憶空間を
とるんだよね!最近のは32bitだから4バイトだけと16bit機は2バイトになる事
知らなくて大変な思いをしましたね。C++はCの要領でプログラムするやつ多いから
カプセル化していないのがいけないといったら、先輩に人のせいにするなと
怒られた。昔からずっと人のせいにするやつなんだよね俺!!!

387 :デフォルトの名無しさん:03/06/10 19:00
独り言age

388 :デフォルトの名無しさん:03/06/10 22:35
スレ違いなだけじゃなくて、意味も不明だな。

389 :デフォルトの名無しさん:03/06/10 23:50
>>386
32 ビット機が出てすぐの頃、
というか MS-DOS の時代には
殆ど 16 ビットエミュレーションで動いてたので
int は 16 ビットが普通だったな。
今でも LSI-C 試食版は 16 ビットだな。

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

int のサイズは規格では
「その環境で整数を表現するのに一番適当なもの」
と決められていて、別にレジスタサイズと決まってるわけではない。

390 :デフォルトの名無しさん:03/06/11 00:00
「大きさがCPUのビットを同じ記憶空間をとる」
誰か↑の一文を日本語に訳して下さい。

391 :デフォルトの名無しさん:03/06/11 00:07
>>390
例外処理は認められておりません
ただちに管理者に連絡してください

392 :デフォルトの名無しさん:03/06/11 02:34
>>389
微妙に誤解が含まれている。

393 :デフォルトの名無しさん:03/06/11 03:03
>>392
その誤解とは何か、理由付きで指摘しないと意味のないレスになる。

394 :デフォルトの名無しさん:03/06/11 03:51
intはその環境で最も高速なものでなかったか?

395 :デフォルトの名無しさん:03/06/11 05:37
int=32ビットで実装しても、あるときバージョンアップで16ビット整数の扱いが劇的に最適化されて
16ビット整数の方が速くなったら、int=16ビットに変更しないといけない。

なんてことになりかねないので速度だけで選ぶわけではないと思うが…。

396 :デフォルトの名無しさん:03/06/11 07:31
char *str[] = {
"one",
"two",
"three",
};
とあったときに、 str をもとにして、文字列の数(3)を調べる方法はありますか?

397 :デフォルトの名無しさん:03/06/11 07:48
>>396
要は配列strの要素数を得られればいいんでしょ?
sizeof str/sizeof str[0]

398 :デフォルトの名無しさん:03/06/11 07:56
64bitCPUなのにintが32bitっていうのは
例によって過去の資産の絡みなんでしょうか?

399 :デフォルトの名無しさん:03/06/11 07:57
そういう理由の場合もある。

400 :デフォルトの名無しさん:03/06/11 07:58
高田社長が400ゲットだ!
おらおら、おまえらうちの商品買えよ!

401 :デフォルトの名無しさん:03/06/11 07:58
s/資産/遺産/

402 :デフォルトの名無しさん:03/06/11 08:05
>>398
単にコンパイラ作ってるところの都合なだけだ。

403 :デフォルトの名無しさん:03/06/11 08:08
>>399
素早いレスどうもです

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

64bitが必要ならlonglongで宣言してるだろうし
longlongの処理を64bitCPU用に最適に
(1レジスタで処理するように)コンパイルできていれば
それで64bitコンパイラの役目は果たしているともいえるかも

404 :デフォルトの名無しさん:03/06/11 08:14
>>402
int幅が変わると調整に手間がかかりそうですね
実装によってはライブラリの書き直しとか
テストもしないといけないだろうし

405 :デフォルトの名無しさん:03/06/11 08:16
そんな後先考えない実装はしないと思うよ。

406 :デフォルトの名無しさん:03/06/11 09:06
>>403
仮に int が 64 Bit になれば、
long は 64 Bit 以上になる。
long long は(ry

407 :デフォルトの名無しさん:03/06/11 10:45
>>406
long >= int >= short

408 :デフォルトの名無しさん:03/06/11 10:52
>>397
できますた。
サンクスコ。

409 :デフォルトの名無しさん:03/06/11 11:09
>>407
何を指摘したい?

410 :デフォルトの名無しさん:03/06/11 11:52
http://www.zork.org/safestr/safestr.html
http://www.zork.org/xxl/xxl.html

使ってる奴いる?

411 :350:03/06/11 12:19
>>409
longのサイズは必ずしもintより大きくなければならないわけではないってことじゃないの?

412 :デフォルトの名無しさん:03/06/11 12:20
う、
>>411のネームランは無視してくれ、このスレでの番号じゃない。


413 :デフォルトの名無しさん:03/06/11 12:27
>>411
以上=「>=」
より大きい=「>」

414 :デフォルトの名無しさん:03/06/11 12:45
>>411
以上という言葉の意味を辞書で引け。

415 :デフォルトの名無しさん:03/06/11 12:59
なんで日本語って「>」に対応する単語が無いんだろう?
未満と以下は存在するのに...日本語の言語仕様のバグ?


416 :デフォルトの名無しさん:03/06/11 13:04
超過?
ちがうか・・・

417 :デフォルトの名無しさん:03/06/11 13:06
より大きいすごく大きいもっと大きい超大きいすんげぇ大きいぼっけぇ大きい

418 :デフォルトの名無しさん:03/06/11 13:16
http://dictionary.goo.ne.jp/search.php?MT=%C4%B6%B2%E1&kind=jn&mode=0&base=1&row=0

超過でいいみたい

419 :デフォルトの名無しさん:03/06/11 13:22
ほう、ちょーか

420 :デフォルトの名無しさん:03/06/11 13:30
>>415
英語にゃ「以上」や「以下」が無いがな。

421 :デフォルトの名無しさん:03/06/11 13:35
大なり小なり

422 :デフォルトの名無しさん:03/06/11 13:57
とりあえず「より大きい」といっとけば。単語じゃないけど。

423 :デフォルトの名無しさん:03/06/11 14:37
>>419 ワラタ

424 :デフォルトの名無しさん:03/06/11 17:20
void (*signal( int sig, void (*func) (int)))(int);
この宣言文が一向に解読できない
signal is function 〜謎〜 returning void
誰か教えれ

425 :C語初心者:03/06/11 17:39
初めまして。今日からC言語始めようと思ってます。
んで、学ぶにあたって勉強するのにいい初心者用のわかりやすいC言語の本とかありますか?
あったら情報教えてください。よろしくお願いします

426 :デフォルトの名無しさん:03/06/11 17:39
>>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);

427 :デフォルトの名無しさん:03/06/11 17:41
>>425
この板の一番上、ローカルルールの書いてあるあたりを参照。
「推薦図書・必読書スレ」へのリンクがある。

428 :デフォルトの名無しさん:03/06/11 17:45
>>426
サンクス、よく分かった。あんた神
signalは戻り値が関数へのポインタで
引数にint型変数と関数へのポインタをとる
関数ということね・・・ややこしすぎ

429 :C語初心者:03/06/11 17:47
>>427
ありがとです


430 :C語初心者 :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をお願いします。


431 :C語初心者:03/06/11 18:40
すいませんスレ間違えました。

432 :1:03/06/11 19:46
ポインタについていまいち理解できません。
オススメの解説ページみたいなのありますか?

433 :デフォルトの名無しさん:03/06/11 19:47
>1


434 :デフォルトの名無しさん:03/06/11 19:50
sighandler_tってのはGNUの拡張か。標準規格でも分かりやすいようにtypedefしておけばよかったのに。

435 :デフォルトの名無しさん:03/06/11 20:00
signal()の戻り値=第2引数のシグナルハンドラへのポインタ
でいいんすか?

436 :デフォルトの名無しさん:03/06/11 20:41
>>430
基本情報処理の試験13年の秋か春に載ってるよ!
最近のC問題は迷路やもぐらたたきなどが出てくるようになった。
そろそろ「ねた」切れか?

437 :デフォルトの名無しさん:03/06/11 20:48
int main(void){
char *a = "ABCDE";
char *b = "FGHIJK";

strcat(a, b);

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

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

438 :デフォルトの名無しさん:03/06/11 20:56
>>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);
}
で確認してみな!

440 :デフォルトの名無しさん:03/06/11 21:05
>>439
あんまりなネタだな…。

441 :デフォルトの名無しさん:03/06/11 21:05
先生、VC7のlimits.hで
#define INT_MIN -2147483648
ではなく
#define INT_MIN (-2147483647 - 1)
って書いてあるのはなぜですか?

442 :デフォルトの名無しさん:03/06/11 21:16
>>441
なんでだろうね。
負は正にくらべて範囲が一つ大きいですよって強調してるのかな?

443 :デフォルトの名無しさん:03/06/11 21:20
・はじめは-2147483647と定義していた
・でもそれが間違いだと判明した
・修正担当者は引き算ができなくて、泣きながら-1を追加した

というのが真相だろう。

444 :デフォルトの名無しさん:03/06/11 21:28
それは規格違反。
−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になっている

447 :デフォルトの名無しさん:03/06/11 21:35
>>444
なに言ってんだこのたこ

448 :デフォルトの名無しさん:03/06/11 21:38
>>439
> char *c='';

これじゃコンパイル通らないよ。空の文字ってのはエラー。

449 :デフォルトの名無しさん:03/06/11 21:38
カッコつけて実行速度落としてるだけ! クソだよ、こんなの

450 :デフォルトの名無しさん:03/06/11 21:40
>>449
何に対するレス?

451 :デフォルトの名無しさん:03/06/11 21:42
下記の機能アルゴリズムを設計し,C言語により実装せよ.
「1.任意の個数のint型数値をコンソールより入力された順に保存する.
2.文字列"Sort"の入力により,入力された数値群を降順に並び替える.
3.最大値と最小値の平均値を計算し,2分探索法で検索する.」

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



452 :デフォルトの名無しさん:03/06/11 21:43
ここは宿題スレではない

453 :デフォルトの名無しさん:03/06/11 21:46
>>449
小泉批判ですか?

454 :デフォルトの名無しさん:03/06/11 21:47
あ、カッコって (  ) じゃないのか。


455 :デフォルトの名無しさん:03/06/11 21:48
>>449-454
藁!
もういっちょ藁w

456 :デフォルトの名無しさん:03/06/11 21:49
>・メモリ節約のため
ここが意味不明。入力データ数に制限がない以上、そっちの方が
メモリ食う可能性があるんじゃないか。

>・コンソール入力は,scanf()を使い,文字列,記号,整数値以外は,それぞれ別のエラーコードを返し,
入力を継続するようにせよ.
ここも意味不明。C言語・scanfでやる以上、「文字列」以外の入力は
どうやったら可能なんだ。

457 :451:03/06/11 21:55
ダメだね。
ニューメリックチェックと型チェックは別モノだから、エラーコードは別にすること。
……ってか、ンなとこで早くも詰まってるの?か(w
本気でセンス無いぞ、それって…




458 :456:03/06/11 21:56
>>457
まさかおれに言ってるのか?

459 :デフォルトの名無しさん:03/06/11 21:57
>458
そうなんじゃないの?

460 :451:03/06/11 21:59
ヒント:
予想される関数
main
InputformConsole
CheckValid
CheckString
StroreNums
Sort
Sort_quicksort
Search
Search_tree

仕様を増やしてもいいかな?
・画面への表示は1個所で行い、エラーの際もそこで表示すること。


461 :デフォルトの名無しさん:03/06/11 21:59
457はCを使ったことがないんだと思う。

462 :デフォルトの名無しさん:03/06/11 21:59
なんなのこいつ>>451

463 :デフォルトの名無しさん:03/06/11 22:00
>460
> ・画面への表示は1個所で行い、エラーの際もそこで表示すること。
一箇所って意味ふめいだな

464 :456:03/06/11 22:01
>>451
何がヒントだこのタコ。
お前の設計指針がタコタコすぎてんなもん作れねーんだよ。ぼけ。
何でもいいからエラーになる入力例挙げてみれ。
C言語において、scanfで「文字列」以外の入力がありえるのか?

465 :デフォルトの名無しさん:03/06/11 22:02
わからんヤシだな。そんな親切な仕様はないっちゅうの。
ま、いいか。
例:
>34
入力を受け付けました。
>34.5
小数は受け付けられません。
>Soort
コマンド Soort は未定義です。
>####
コマンド #### は未定義です。
>Sort
並べ替えを行います。


466 :デフォルトの名無しさん:03/06/11 22:03
>>460
何でtreeが出てきますか?

467 :デフォルトの名無しさん:03/06/11 22:03
>>465
それをscanfでやるの・・・?scanf("%s",s);かい?

468 :デフォルトの名無しさん:03/06/11 22:04
>>465
小数っていくつ以下の数ですか?

469 :デフォルトの名無しさん:03/06/11 22:04
>>466
二分木探索?

470 :456:03/06/11 22:05
もう>>451は放置しようぜ…。

471 :デフォルトの名無しさん:03/06/11 22:05
>>441
#define INT_MIN ((int)(-2147483648))
じゃ結果が未定義だろ?

472 :デフォルトの名無しさん:03/06/11 22:06
>>468
ネタだよね?

473 :デフォルトの名無しさん:03/06/11 22:06
二分探索に二分木はイラン罠

474 :デフォルトの名無しさん:03/06/11 22:08
>>473
二分探索と二分木探索は違うぞ。
> 探索部は,別のアルゴリズムを採用しても利用できるように設計/実装せよ
と言っているから他の方法(この場合は二分木探索)を示したんじゃない?

475 :デフォルトの名無しさん:03/06/11 22:19
>>474
違うと思うなぁ

476 :デフォルトの名無しさん:03/06/11 22:28
こういう依頼さ。
完璧と見せかけて罠があるコード書いたら面白いかも。

477 :デフォルトの名無しさん:03/06/11 22:29
>>476
お節介にもつっこんじゃう人いるから巧妙にやらないといけないね。

478 :デフォルトの名無しさん:03/06/11 22:41
待て待て。
>1.任意の個数のint型数値をコンソールより入力された順に保存する.
と書いてあるのだから、
コンソールから入力するのは順番じゃないのか?
数値を入力するとは書かれてないぞ。

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

>3.最大値と最小値の平均値を計算し,2分探索法で検索する.」
でもそうすると、これもなんの最大値か判らないし、何を検索するのかわからないよな。


479 :デフォルトの名無しさん:03/06/11 22:48
二分木探索じゃなくて
二分探索木じゃない?

480 :デフォルトの名無しさん:03/06/12 00:19
パーマネントループ
 入力してもらう
  if "Sort"だったら
   ソート関数を呼ぶ

481 :デフォルトの名無しさん:03/06/12 00:19
途中で送信してしまった、鬱

482 :デフォルトの名無しさん:03/06/12 00:25
パーマネントループ
 入力してもらう
  if "Sort"だったら
   ソート関数を呼ぶ
  else if 全部数字だったら
   if intの範囲内の数字だったら
    4バイトのメモリ確保
    そこに数字を保存
  else
   コマンド [入力されたやつ] は未定義です。

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

…以上。
>>451の通りに書いたので、無限ループです。
探索ってのはなにが起きた時にすればいいのかわからん。


483 :デフォルトの名無しさん:03/06/12 00:27
インフィニットループの方がいいな。

484 :デフォルトの名無しさん:03/06/12 00:49
無限循環のほうがいいな。

485 :デフォルトの名無しさん:03/06/12 01:01
俺は思うんだが、文字列を整形することなく標準出力に表示する場合もprintfが使われることが多いな。
putsか、最後に改行しないならfputsを使うほうが、無駄が無くていいと思うんだが。


486 :デフォルトの名無しさん:03/06/12 01:03
>>485
printfがあるとCらしくてイイ!

487 :デフォルトの名無しさん:03/06/12 01:11
まあputsやfputsは%をそのまま書けるという利点はあるけど。。。

488 :デフォルトの名無しさん:03/06/12 07:31
他スレからの転載です。教えて下さい
----
int foo ();
みたいに、引数を省略した場合って(int)になるんだよね?
この挙動って最新のC99で変わってる?

489 :デフォルトの名無しさん:03/06/12 07:43
voidだろ?

490 :デフォルトの名無しさん:03/06/12 07:46
>>488
つい最近その質問と答えを見た気がするんだが。
それともマルチか荒らしか?

491 :デフォルトの名無しさん:03/06/12 07:48
>>488
引数チェック無し

492 :デフォルトの名無しさん:03/06/12 07:49
>>490
だから転載って書いてあんじゃん

493 :デフォルトの名無しさん:03/06/12 07:49
>>489
C++だったらね

494 :Not 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
本当にアレで正しいのか気になったから

497 :デフォルトの名無しさん:03/06/12 07:54
>>496
試そうという気はないの?

498 :デフォルトの名無しさん:03/06/12 12:56
>>496
レスを受け入れられないなら質問するなボケ

499 :デフォルトの名無しさん:03/06/12 15:09
>>496
ここでも同じ奴が答えるという可能性は、微塵も思い浮かばなかなったのか?

500 :デフォルトの名無しさん:03/06/12 15:20
つーか、最初からそう書けばいいのだよ。<正しいのか気になった

501 :デフォルトの名無しさん:03/06/12 15:51
>>499
住人てあっちとこっちで結構重なってるよねえ。
特に答える側は。

502 :デフォルトの名無しさん:03/06/12 16:00
switch文でcaseごとに変数に代入する値を代えることはできるんでしょうか?もしできるのでしたらその方法をお教えください。

503 :デフォルトの名無しさん:03/06/12 16:04
意味がわからん

504 :デフォルトの名無しさん:03/06/12 18:06
>>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のプログラム実行時間を計るのには、どうしたらいいですか??

507 :デフォルトの名無しさん:03/06/12 19:34
int table[3] = {3,2,0};

if(value>=3) var = table[2];
else var = table[value];

508 :デフォルトの名無しさん:03/06/12 19:35
>>506
はら時計

509 :デフォルトの名無しさん:03/06/12 19:37
var=table[value>1?2:value];

510 :デフォルトの名無しさん:03/06/12 19:39
>>506
bash なら ./hoge で実行せずに
time ./hoge で実行すれば。

511 :デフォルトの名無しさん:03/06/12 21:07
>>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]では?

514 :512:03/06/13 02:18
>>513

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

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

つまり
char (*ss)[10]はchar ss[][10]から書き換えられるのではないのか?
ということです。


515 :デフォルトの名無しさん:03/06/13 02:28
>>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)
でいいとか・・・
どなたかこの意味を教えていただけないでしょうか?

517 :デフォルトの名無しさん:03/06/13 02:31
>>516
キャストは必要ないよ。

518 :デフォルトの名無しさん:03/06/13 02:34
char *p;
void *q;
double *r;

q = p;
r = q;

といううっかりミスを防止するため。

519 :デフォルトの名無しさん:03/06/13 02:40
>>516
C だと必要ないが、C++ だと必要、というのが定番の答え。

520 :デフォルトの名無しさん:03/06/13 02:40
>>518
それがキャストの有無とどう関係ある?

521 :512:03/06/13 02:42
>>515

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



522 :516:03/06/13 02:46
>>517-518
ありがとうございます、なんとなく分かりました。
ついでにもうひとつ聞いてもいいでしょうか?
struct port{
(構造体)
}
struct p *f;
f = (struct p *)malloc(sizeof(struct p));
としたとき
free((char *)f);
と型キャストしなければならないと書いてあったのですが、こっちはどういうことなんでしょうか?
連続で質問してすみませんが、お願いします。

523 :516:03/06/13 02:48
>>519
C++だと必要なんですか覚えておきます。ありがとうございます。

524 :デフォルトの名無しさん:03/06/13 02:51
free((char *)f)は嘘。もしくは古い処理系の場合でしょ。voidがなかったころはchar*で代用していたらしいから。でも古かったら引数チェックなんて行われないはずだけどなぁ・・・

525 :デフォルトの名無しさん:03/06/13 04:17
>>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(・・・){、でやってみても実行結果は変わりません。
やはり何か理由があるのでしょうか?
ちなみに望洋本の例題です。

527 :526:03/06/13 04:28
あ、//Aってのは無視してください・・・

528 :デフォルトの名無しさん:03/06/13 04:31
>>526
標準ライブラリのstrcpyと同じものにしたいからだろ。


529 :526:03/06/13 04:33
>>528
なるほど、調べてみたら確かに一緒でした。
ありがとうございました!

530 :デフォルトの名無しさん:03/06/13 04:35
>>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'だったらごめんにょ

534 :デフォルトの名無しさん:03/06/13 04:51
>>532
いいたいことは分かるけど、>>526へのレスとしては見当違いじゃない?

535 :デフォルトの名無しさん:03/06/13 04:56
>>534
すまんにょ。
printfでchar *str_copyを直接読み出しているわけでなかったにょ。
だからreturnは別にいらなかったにょ。


536 :デフォルトの名無しさん:03/06/13 04:59
こんなのもありか。
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を使って


→→

→→→

→→→→
と一個ずつ増えるようにするにはどうすんの?

539 :デフォルトの名無しさん:03/06/13 07:53
>>538
何故スレ違いだと思わない?

540 :デフォルトの名無しさん:03/06/13 07:58
int map[10000][10000];

これやるとコンパイル通らないんだけどなんで?

541 :デフォルトの名無しさん:03/06/13 08:00
>>540
エラーやワーニングくらいよめ。

542 :デフォルトの名無しさん:03/06/13 08:00
( ´_ゝ`)∂あぷろだあるから チョットこいや…
http://homepage3.nifty.com/coco-nut/

543 :デフォルトの名無しさん:03/06/13 08:03
a>>3

544 :デフォルトの名無しさん:03/06/13 08:06
>>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)

エラー読んでもわからないよ。

545 :デフォルトの名無しさん:03/06/13 09:34
>>544
不親切なコンパイラだな。何使ってるの?

ちなみに >>540 は「スタック領域のサイズ」について
調べてみなされ。

546 :デフォルトの名無しさん:03/06/13 11:06
>>540
400MBものスタックを使える環境を用意しる。

547 :540:03/06/13 12:42
>>545
bcc

スタック不足だったのか。d

548 :デフォルトの名無しさん:03/06/13 14:04
>>540
そもそも、そんな巨大な変数を関数内で宣言しないでくれ・・・
externで確保してしまうとか・・・
mallocで一時的に確保してポインタでどうにかするとか・・・
ぐはぁ・・・

549 :デフォルトの名無しさん:03/06/13 14:20
>>548
>extern で確保
400MB メモリが空いてないと起動できないぞ。

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

map と書いてあるので RPG のマップのようなものだと考えると、
いくつかのブロックに分割して、
現在地近くのデータのみをメモリ上に置くようにする。

550 :デフォルトの名無しさん:03/06/13 14:58
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回目のシグナルを受信しないんですが
教えてくらはい

551 :デフォルトの名無しさん:03/06/13 15:10
>>550
スレ違い。
ついでに情報不足。

552 :デフォルトの名無しさん:03/06/13 15:20
sigaction >>>>>(こえられない壁)>>>>> signal

553 :デフォルトの名無しさん:03/06/13 15:21
cってベッドインだっけ

554 :デフォルトの名無しさん:03/06/13 15:42
>>551
一回シグナルを受信して定義した関数にジャンプすると
2回目からから引数のハンドラへのポインタが自動的に
signal( SIGINT , SIG_DFL ) に再設定されてしまうつーことなんすかね?

555 :デフォルトの名無しさん:03/06/13 15:55
>>551を読んで、なぜ>>554のような質問を>>551にしたのか、私には不思議でならない。

556 :デフォルトの名無しさん:03/06/13 16:10
2から数えて100万番目の素数を出来るだけ早く計算するプログラムを作りたいのですが、
どういう方法が一番早く計算できますか?

557 :デフォルトの名無しさん:03/06/13 16:13
>>556
スレ違い

読んでないから内容は知らないが、こういうスレがある。
http://pc2.2ch.net/test/read.cgi/tech/1018657457/

558 :556:03/06/13 16:27
>>557
どうもです。
早速行ってみます。

559 :デフォルトの名無しさん:03/06/14 01:03
sizeof()を演算子と呼ぶことに抵抗があります。5Ωくらい。

560 :デフォルトの名無しさん:03/06/14 01:07
>>559
おもいっきり演算子だろ。

561 :デフォルトの名無しさん:03/06/14 01:13
>>559
() つけるから抵抗があるんじゃ。
() なんか無くてもほーら。
 int a;
 printf("%d\n", sizeof a);
ね?

型には括弧を付けないといけないけどね。

562 :デフォルトの名無しさん:03/06/14 01:27
sizeofの返す値は定数と見てOKですよね?

563 :デフォルトの名無しさん:03/06/14 01:39
>>562
sizeof の返す値は定数だけど、
プリプロセッサでは解析されないから
#if HOGE == sizeof (int)
というのは使えない。

case ラベルとか、静的変数の初期値とか、
そういうのには問題なく使える。

564 :デフォルトの名無しさん:03/06/14 01:41
プリプロセッサでやっちゃう環境もあったけどよい子はマネしちゃダメだ

565 :デフォルトの名無しさん:03/06/14 01:44
>>563
サンクス
配列の大きさ指定に使えるくらいだから定数なんじゃないかなぁと思っていたけど自信なかったです。

基本型の大きさを表す(標準の)マクロというのは存在しないんですよね。最大値や最小値を表すマクロならあるのに...条件付きコンパイルに使うようなものではないでしょうけど。

566 :デフォルトの名無しさん:03/06/14 10:58
>>565
limitから換算して自分でマクロ作れ

567 :デフォルトの名無しさん:03/06/14 12:38
ループの中で変数宣言するののどこが悪いの?
アセンブラコード見たけどループの外においた場合と変わらなかったよ。

568 :デフォルトの名無しさん:03/06/14 13:02
>>567
それだけじゃ何が言いたいのかわからん。
変数のスコープをなるべく小さく、という方針には適うが
初期化に時間がかかるような場合はループの外でやれないか考えることはある。
昔、漏れは当時の上司にループ内変数をとがめられたことがあるが、
よくよく話を聞いていると何のことはない、そいつが知らなかっただけのことだった。

569 :デフォルトの名無しさん:03/06/14 13:05
きっちり反論できないようなら、上司に従っとけ。
それがいやなら勉強しろ。

570 :デフォルトの名無しさん:03/06/14 13:07
変数の初期化に時間はかからないのでループ内におくべし。
以上。

571 :デフォルトの名無しさん:03/06/14 13:38
ループの外に出さなければならない理由がないからループ内でFA。

572 :デフォルトの名無しさん:03/06/14 13:49
初歩的なことだとは思いますが、質問させてください。

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 まで処理させたい場合、
どのようなコードを書くのが一般的なんでしょうか。

573 :デフォルトの名無しさん:03/06/14 14:09
int i;
for(i=0; i<10; i++)
  printf("%f", 2.0+i/10.0);

574 :デフォルトの名無しさん:03/06/14 14:21
>>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;
 }
}

よろしく御願いします。

575 :デフォルトの名無しさん:03/06/14 14:26
int n = (c - a) / b;
for (i = 0; i <= n; ++i) {
printf("a = %f\n", a + b * i);
}

576 :デフォルトの名無しさん:03/06/14 14:28
floatは使うな。

577 :デフォルトの名無しさん:03/06/14 14:33
浮動小数点を使って ==, != という判定はしないのが普通。

578 :デフォルトの名無しさん:03/06/14 18:22
いや、御法度

579 :デフォルトの名無しさん:03/06/14 19:50
回答期待age

580 :572:03/06/14 20:57
お答えくださった方々、ありがとうございました。
とりあえず今回は、四捨五入で数値(変数a)を補正していくという方法で解決させました。
色々やったせいで、40行程のソースが80行程まで膨れ上がってしまいましたが(汗)

581 :451:03/06/14 21:44
こっちが折角温情かけてやってるのに(w
要求仕様が決まってない分は,何も突っ込まずに作ったほうが楽だってことを,
身をもって体験したいとは見上げた根性のコザルだな(w


582 :デフォルトの名無しさん:03/06/14 22:56
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ってことはないと思うよ。

584 :デフォルトの名無しさん:03/06/14 23:08
なぜ?
別に定数でないといけないということもないと思うけど。

585 :デフォルトの名無しさん:03/06/14 23:09
>>582
> 0からN-1までの数を返そうとする

N==1,0から0までの...
ありえないね。

586 :デフォルトの名無しさん:03/06/14 23:10
>>584
Nが1にならないように工夫しようとは思わないの?

587 :デフォルトの名無しさん:03/06/14 23:11
ifで分岐するのが面倒>>582なら1文字足すだけで何も問題がない。

588 :デフォルトの名無しさん:03/06/14 23:14
0から0までの乱数を求めようとするのが間違いだってば。

589 :デフォルトの名無しさん:03/06/14 23:16
どうせNが0にならないようにしなければいけないんだから、ついでに1にもならないようにすればいいじゃない。

590 :デフォルトの名無しさん:03/06/14 23:33
>>585,588
0 から 0 までの、ということは、
必ず 0 を返すというちゃんとした結果が定義できるので、
ありえないとか、間違いってことは無い。
定義できないのは、N が 0 の場合だ。

591 :デフォルトの名無しさん:03/06/14 23:33
>>589
0の時は意味がないから別の処理になるが、
1の時も2以上と全く同じ処理をする場合、
わざわざ分岐させる必要ないだろ?

592 :589,588:03/06/14 23:36
>>591
0の時は意味がないからってネタか?0では割れないからだろ。
意味がないのは1。

>>590
意味がないので(そういうことするのは)間違いだといったの。

593 :デフォルトの名無しさん:03/06/14 23:41
>>582のリンク先はNが定数として書いたんだと思うけどね。
でなければあんなまずいコードをC FAQに載せたりしないでしょ。

594 :デフォルトの名無しさん:03/06/14 23:41
>>592
U付けるだけで何も問題ないのに、何故そんなに必死なんですか?

595 :デフォルトの名無しさん:03/06/14 23:43
0 しか結果としてでてこないもののどこが乱数なのだろうか?

596 :デフォルトの名無しさん:03/06/14 23:43
>>594
UつければNが0の時も問題が起きないんでしょうか。

597 :デフォルトの名無しさん:03/06/14 23:45
>>596
今はN=1の話をしてるのに、なんで必死にN=0の話にすり替えようとするの?

598 :デフォルトの名無しさん:03/06/14 23:46
命令の配列みたいなものを作りたいのですが、どうすればよろしいでしょうか。
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};
みたいなことをしたいのですが。
どうやらコールバック関数なるものを使うとうまくいきそうな
きもするのですが、よくわからないのです。

よろしくお願いします。

599 :デフォルトの名無しさん:03/06/14 23:46
>>597
「何も問題がない」というからでしょ。そもそもNが定数とは限らないなんて言い出すことが(以下略

600 :デフォルトの名無しさん:03/06/14 23:48
>>598
int (*Getlist[])()={Get1,Get2,Get3};
こうかな。

601 :600:03/06/14 23:51
あと、list[i] = GetList[i]();

602 :デフォルトの名無しさん:03/06/14 23:57
600さん、ありがとうございます。
うまくいきそうなので実装してみます

603 :600:03/06/14 23:59
>>602
int (*Getlist[])(void)={Get1,Get2,Get3};にしておいて。
でないと多分int Get4(int,char *)でも入れられてしまうと思うから

604 :デフォルトの名無しさん:03/06/15 00:09
if(N>=2)とかif(N<=1)とするのが面倒?

605 :デフォルトの名無しさん:03/06/15 00:16
>>604
じゃ、x/y とか x%y の計算をする場合、
y=1 の時は計算しなくても答がわかるからって別の処理にする?

606 :デフォルトの名無しさん:03/06/15 00:21
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 };
こうやるんですか?でもそうすると、宣言以降は
引数を変更できないですよね。

607 :デフォルトの名無しさん:03/06/15 00:28
>>606]
Getlist[i]が関数名だと思って使えばいい。
引数を与えたいなら通常の関数と同じようにGetlist[i](3)とかGetlist[1](n)とする。

608 :607:03/06/15 00:30
>>606
> int (*Getlist[])(void)={ GetInt,GetInt,GetInt };

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

609 :デフォルトの名無しさん:03/06/15 00:33
typedef int (*GetInt_t)(int);

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

この方が読みやすそう

610 :デフォルトの名無しさん:03/06/15 00:39
ていうか普通そう書く


611 :デフォルトの名無しさん:03/06/15 00:41
>>610
禿同

612 :デフォルトの名無しさん:03/06/15 00:54
なるほど、ありがとうございます。
(*Getlist[])(int) のように、2番目の括弧の中には引数の型をいれる
のですね。typedefの使い方も教えて頂きありがとうございます。


613 :デフォルトの名無しさん:03/06/15 05:06
初心者本を一冊、一通りやり終えました。

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

って表現がありますが、このレベルだとどのようなソースを読めばいいのでしょうか?
お勧めありましたらお願いします

614 :デフォルトの名無しさん:03/06/15 05:10
学校の教科書にrandが載ってないんだが・・・atoiとかも

だめぽ?専門1年!先生が載ってないがrand教えたから、少し安心

615 :デフォルトの名無しさん:03/06/15 05:10
>>613
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.8.2.html

616 :デフォルトの名無しさん:03/06/15 05:11
CScreenを使って


→→

→→→

と一個ずつ→が増えるプログラムわかんね


617 :デフォルトの名無しさん:03/06/15 06:07
>>615
なぜよりによってそのページをw
藤原さんのページだったら他にいろいろあるだろう。

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

んで、ソースのほうはPC-UNIX系をインストールして読んでみるのがいいと思うよ。
読むだけじゃなくて改造してみるとかね。はじめは比較的簡単なlsあたりからはじめて、
最後にはカーネルやドライバをw

618 :デフォルトの名無しさん:03/06/15 07:37
>>617
結構有名な本だね。読んだことないけど。図書館にないから(ワラ

619 :デフォルトの名無しさん:03/06/15 09:37
>>616
スレ違い。
かつ情報不足。
なにをやりたいのかわかんね。

620 :デフォルトの名無しさん:03/06/15 09:40
>>617
615ってさ、610-611を皮肉ってるんだろw

621 :デフォルトの名無しさん:03/06/15 09:53
>>620
ちげーよ ネタとして持って来るには一番だったからだ。
世の中にはこんなことしちゃう人もいるってことを(ry

622 :デフォルトの名無しさん:03/06/15 10:21
「Uつけてsignedのオーバーフロー問題をunsigned で範囲を広げて」
というのは本質的な解決方法かどうか、特に引用元のような教科書的
記述で採用されるかどうか...。暗黙の型変換を利用するくらいならば
同じく引用元で最初に書かれている浮動小数点利用の方法がわかりやすい。
これならばN=1 でも問題はない。



623 :デフォルトの名無しさん:03/06/15 10:40
揚げてまで粘着線せんでもいいだろう

624 :デフォルトの名無しさん:03/06/15 10:48
typedef int GetInt_t(int);
GetInt_t* Getlist[]={GetInt,GetInt,GetInt};

これってイクナイ?

625 :デフォルトの名無しさん:03/06/15 11:12
関数ポインタは
***********************func();
とか書いても大丈夫

626 :デフォルトの名無しさん:03/06/15 12:05
これもな
(*********************printf)("ok");

627 :デフォルトの名無しさん:03/06/15 12:07
ごるぁ♪>(^o^*)

628 :デフォルトの名無しさん:03/06/15 15:43
>>625
それはちっとも大丈夫じゃないぞ。
***********************(func());
と同値だぞ。

629 :デフォルトの名無しさん:03/06/15 17:35
doubleで定義した変数a、bがあって
if(a==b){



}
てしたいんだけど、小数第二位までを比べる方法ってありますか?例えば
a=1.23456
b=1.23789
でもifの中が実行されるように。


630 :デフォルトの名無しさん:03/06/15 17:38
if (fabs(a - b) < 0.01) {

631 :デフォルトの名無しさん:03/06/15 17:40
>>630
a=1.23456
b=1.24000

632 :デフォルトの名無しさん:03/06/15 17:42
>>629
100倍して小数部を切り捨てるというのは?

633 :デフォルトの名無しさん:03/06/15 18:01
漏れはCを始めて間もないです。独習Cを使ってます。
で、分からなくなったのですが、return 0;やreturn n; 、
return 10;などの解釈の仕方が分かりません。
どなたか説明してもらえないでしょうか?

634 :デフォルトの名無しさん:03/06/15 18:08
>1


635 :デフォルトの名無しさん:03/06/15 18:25
ところでどうしてC言語には
文字列型とクラスとガーベッジコレクションがないの?

636 :デフォルトの名無しさん:03/06/15 18:49
文字列型 あるじゃん
クラス 言語が古いから        
ガーベッジコレクション 必要ない

637 :デフォルトの名無しさん:03/06/15 19:01
>>633
がんがれ厨房よ

638 :デフォルトの名無しさん:03/06/15 19:03
http://jbbs.shitaraba.com/computer/6765/
めっちゃ宣伝 

639 :デフォルトの名無しさん:03/06/15 19:13
>>636
古いからねえw C99はどうする?
「ある言語」とCの差異をひとからげに欠点にしたがる
ゆんゆんピープルがこの時期は多いよな。

640 :デフォルトの名無しさん:03/06/15 19:24
>>633
'return' は予約語です。その働きは決まっています。
「return;」あるいは「return なんとか;」と使って
教科書どおりの働きなんですが...。
慣れるまでしばし鵜呑みにするのもひとつの手ではあります。


641 :633:03/06/15 19:28
教科書どおりの働きですか。
OSにプログラムを無事に終了することを伝えるってことですか?
普通のプログラムでは何も知らずにretorn 0;を使っていたのですが、
突然「return なんとか;」がでてきて焦ってしまいました

642 :デフォルトの名無しさん:03/06/15 19:37
>>633
returnは値を返すって意味でいいんじゃない?
メイン関数終了時のreturn 0またはreturnはプログラムが
正常に終了したぜって意味だし。エラーは1だっけ。
うろ覚えですまん

643 :デフォルトの名無しさん:03/06/15 19:43
>>641
returnの後ろなんて呼び出したところになんか返すんだから
自分で書いてる関数なんかは自分で決めるもんだろ?
return 0;ばかりで事足りてたならreturn;で十分だろ?
実際のOSだとreturnでエラーとか直接返すことなんてありえないぞ
本なんかの説明での論理的なOSだと値を返せたりするみたいだけど
return 0;しか知らないということはexternでグローバルな変数ばかり確保してるって事か・・・

644 :デフォルトの名無しさん:03/06/15 19:48
>>636
> 文字列型 あるじゃん
ありません。

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



645 :デフォルトの名無しさん:03/06/15 19:52
>>644
「必要」の意味わかってる?

646 :デフォルトの名無しさん:03/06/15 19:53
>>643
そのレベルならexternも知らないだろうな。

647 :デフォルトの名無しさん:03/06/15 20:08
>>643
>>633を読めば633がmain以外の関数を作ったことないことは一目瞭然だろ。

648 :デフォルトの名無しさん:03/06/15 20:12
>>644
ガベージコレクションはあると嬉しいよね。
現段階では言語仕様に含まれず、ライブラリでやるしかないけど。
なので完璧なガベージコレクションは望めないけどね。
でも実用上問題のないレベルではあるという話だ。

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

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



649 :デフォルトの名無しさん:03/06/15 20:14
まぁ、今は作ったプログラムを直接実行しているだろうけど、
バッチやら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
直接の実行犯はわからなかった。ただし、その盗聴機関がマスメディア産業の
各方面につながっていることは確認済み。団体名なんか書く必要ないでしょ?
フジ・テレビとか読売新聞社とか電通とか...みんなが知ってるあの会社って
感じ。講談社の週刊誌(現代とかフライデイとか)が政治家の過去を暴露する記
事や写真をよく掲載するでしょ。あの手の記事は、盗聴/盗撮で得た情報で商売
をしている人達がいるという証拠。あういう人達に、オレの個人情報をつかまれ
ているんで非常に心配ですが、現状では、対抗策がない。

651 :デフォルトの名無しさん:03/06/15 20:15
>>648
同意

652 :デフォルトの名無しさん:03/06/15 20:21
>>647
なるほど・・・
だが重大なことに気が付いた・・・
C言語がmainを基準に動いていたということをすっかり忘れていまそた・・・


653 :デフォルトの名無しさん:03/06/15 20:26
>>652
「C言語がmainを基準に動いていた」とは知らなかった。

こういう意味不明で自分勝手な言葉遣いする新人がよくいるが
本当につかれる…。


654 :デフォルトの名無しさん:03/06/15 20:29
はよ言えやー

655 :654:03/06/15 20:30
誤爆スマソ

656 :デフォルトの名無しさん:03/06/15 20:32
このスレ圧縮すると1/58くらいは小さくなりそうな気がする。

657 :lz5: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日目です。参考にしたいのでおかしいとこがあれば教えてください。

659 :デフォルトの名無しさん:03/06/15 21:11
>>658
もっと改行しろ

660 :デフォルトの名無しさん:03/06/15 21:11
せめてまともに動くものをみせろよ

661 :デフォルトの名無しさん:03/06/15 21:12
num2をscanfする際、&がついてないぞ。

662 :デフォルトの名無しさん:03/06/15 21:12
はい、どこがダメなのか分からないんです。


663 :デフォルトの名無しさん:03/06/15 21:13
0による初期化は必要ないのでは。

664 :デフォルトの名無しさん:03/06/15 21:13
はぁ!?
の出方が確率的だな

665 :デフォルトの名無しさん:03/06/15 21:15
まぁ必要はないが、初期化する習慣をつけるのは悪いことじゃない。

666 :デフォルトの名無しさん:03/06/15 21:16
int mainならちゃんとreturn 0;

667 :デフォルトの名無しさん:03/06/15 21:17
return getchar();


668 :デフォルトの名無しさん:03/06/15 21:18
>>663
グローバル変数は自動で0もしくはNULLに初期化されますが、ローカル変数は
初期化されません。main関数も例外ではありませんので初期化が必要です。

669 :デフォルトの名無しさん:03/06/15 21:18
>int num1=0,num2=0,a;
初期化しなくてもいい気がするが、するならするでaもしてやれ。一貫性を持たせよう

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

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

>getchar();
if〜elseの外に出さないと。…って、elseの{}はその行のうちに閉じているのか。
そしたら最後の}が余計。コンパイルエラー。
現場ではよく「if文は中身が1行でも{}を記述すること」なんてコーディング規約があるぞ。

670 :デフォルトの名無しさん:03/06/15 21:19
>>668
後にscanfで値を入れるんだから必要ない。

671 :デフォルトの名無しさん:03/06/15 21:20
アンパサつけ忘れ。
\nもうちょっと入れてみ。
あと,mainの戻り値intなら,int返した方が落ち着かないかい?

672 :デフォルトの名無しさん:03/06/15 21:20
>>668
そういう意味じゃないだろ。
>>669
最後の}はmainの閉じカッコだろ。

673 :デフォルトの名無しさん:03/06/15 21:20
>>669
> 1行に2文かくのはあまり好きじゃないな。

激しく同意 あとなるべくなら{の後も改行してほしい。

674 :デフォルトの名無しさん:03/06/15 21:21
>>670
確かANSICで規格化されていたような気がしたが気のせいか???

675 :デフォルトの名無しさん:03/06/15 21:21
>>668
変数を参照する前にその変数に何か値を代入するなら、
初期化しなくても大丈夫。

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

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

>>672
スマソ、見落としてた…。


676 :デフォルトの名無しさん:03/06/15 21:22
>>674 規格化って何が??

677 :デフォルトの名無しさん:03/06/15 21:23
>>674
なにを言っている?
参照する前に代入などで値を入れるなら初期化は必要ないだろ。
もっとも、常に初期化するくせをつけるのは悪くないけど。

678 :デフォルトの名無しさん:03/06/15 21:23
>>676
アメリカ規格協会

679 :669:03/06/15 21:23
>現場ではよく「if文は中身が1行でも{}を記述すること」なんてコーディング規約があるぞ。
{}は書いてるじゃんか。
俺が言いたいのは「ちゃんと改行しないとわかりにくい」ってことだ。
たびたびスマソ

680 :デフォルトの名無しさん:03/06/15 21:24
>>674
なにが?

681 :デフォルトの名無しさん:03/06/15 21:24
>>678
そうじゃなくて、ANSI Cで何が規格化されてるって?
初期化してない自動変数をscanfで使ったらあかんよってか?

682 :デフォルトの名無しさん:03/06/15 21:25
そもそもscanf自体どうかと・・・

683 :デフォルトの名無しさん:03/06/15 21:26
またわけのわからんことを

684 :デフォルトの名無しさん:03/06/15 21:26
わかった!
printf("整数2");scanf("%d",num2); これだ!

num2を参照している。  ・・・・でもつっこむべきところが違うと思う。

685 :デフォルトの名無しさん:03/06/15 21:26
>>682
そこは見逃してやれよ。

686 :デフォルトの名無しさん:03/06/15 21:27
>>677
最後の一行は、不定のまま使うなって話と微妙にベクトル違うね
アルゴリズム的が0は出てこないコードに=0と書きまくるガイキチには虫唾が走る

687 :デフォルトの名無しさん:03/06/15 21:28
もしかして初期化しないと&で得られるアドレスも決まらないと思っているのかな・・・

688 :デフォルトの名無しさん:03/06/15 21:28
変数の初期化範囲って
よく見るとprintfの後ろにscanf("%d",&num1);がついてるよマジ
俺の会社でこんなん書いたら先輩と上司が飛んできて文句をひたすら
いい続けるよ本当です。

689 :デフォルトの名無しさん:03/06/15 21:28
自分の指摘がおかしいのを誤魔化すために、話題を逸らすのはやめてください。
自分の指摘がおかしいのを誤魔化すために、話題を逸らすのはやめてください。
自分の指摘がおかしいのを誤魔化すために、話題を逸らすのはやめてください。
自分の指摘がおかしいのを誤魔化すために、話題を逸らすのはやめてください。
自分の指摘がおかしいのを誤魔化すために、話題を逸らすのはやめてください。

690 :636:03/06/15 21:29
訂正
誤: アルゴリズム的が
正: アルゴリズム的に

691 :デフォルトの名無しさん:03/06/15 21:31
return 0;
が入っていないよ。
javaならif elseのすべてに戻り値がないとコンパイルエラーですな

692 :デフォルトの名無しさん:03/06/15 21:31
ゆんゆん

693 :デフォルトの名無しさん:03/06/15 21:32
なんでそこでJavaがでてくるの?
なんでそこでJavaがでてくるの?
なんでそこでJavaがでてくるの?

694 :デフォルトの名無しさん:03/06/15 21:33
おおい、何で盛り上がってんだ。

695 :デフォルトの名無しさん:03/06/15 21:33
>>691
Java関係ないだろ。それはおいといても
「if elseのすべてに戻り値がない」なんていう状況か?

696 :デフォルトの名無しさん:03/06/15 21:34
自分の指摘がおかしいのを誤魔化すために、話題を逸らしたいから。

697 :デフォルトの名無しさん:03/06/15 21:34
満月だから。
そろって気を荒立ててるのだよ。

698 :デフォルトの名無しさん:03/06/15 21:42
>>689は何を指していっているんだ?

699 :デフォルトの名無しさん:03/06/15 21:45
名言を思い出したyo
>オブジェクト指向は全てそうなっている

700 :デフォルトの名無しさん:03/06/15 21:47
名言といえばこれ。

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



701 :デフォルトの名無しさん:03/06/15 21:51
俺様が701ゲットだ

702 :デフォルトの名無しさん:03/06/15 21:52
じゃ702でいいや

703 :デフォルトの名無しさん:03/06/15 22:00
668と674と688が激しく意味不明で今夜もグッスリ。


704 :デフォルトの名無しさん:03/06/15 22:42
>>700
おれとしてはこれも捨てがたい
>636 名前:デフォルトの名無しさん 本日のレス 投稿日:03/06/15 18:49
>文字列型 あるじゃん
>クラス 言語が古いから        
>ガーベッジコレクション 必要ない

705 :デフォルトの名無しさん:03/06/15 22:51
memcpyって長さに0を指定したらどうなんの?
何もしないだけ?

706 :デフォルトの名無しさん:03/06/15 22:54
するわけない memmoveはもちろん、strncpyでもなにもしないと思う。strncatなら'\0'をつけちゃうけど。

707 :デフォルトの名無しさん:03/06/15 23:01
strncpy(dst,"",1024);
dstを先頭から1024バイト分0で初期化する。

708 :デフォルトの名無しさん:03/06/15 23:05
CとC++の違いなんでしょうか?
情報処理受けるので、今ボーランドのC++ですが、あまり変わらないでしょうか?

709 :デフォルトの名無しさん:03/06/15 23:06
>>707
激しく誤解してますな

710 :デフォルトの名無しさん:03/06/15 23:07
>>708
違う言語を比べるのは、いかがなものかと。

711 :デフォルトの名無しさん:03/06/15 23:08
>>708
C++コンパイラなら、拡張子を.cにするか、オプションの指定でCコンパイラとして使えると思う。

712 :デフォルトの名無しさん:03/06/15 23:11
>>709
どこが?

713 :デフォルトの名無しさん:03/06/15 23:14
>>708
C言語を拡張したのがC++です。
拡張長された機能により、C言語では実現の難しかったコーディングを可能にしています。
C++はC言語の仕様を内包しているので、C言語のプログラムをC+のコンパイラでコンパイルすることができます。
逆にC++のコンパイラでコンパイルできたからといってC言語として正しいとはいえません。
あくまでもC言語の範囲に仕様を限定してコンパイルしたい場合には>>711のようにしてください。


bccって拡張子を.cにするだけでC言語でコンパイルするっけ?
vcだとだめだよねたしか。

714 :デフォルトの名無しさん:03/06/15 23:16
>>713
vcってのがVisual C++のことならそれでOKだけど・・・
ANSI Cのみなら/Zaをつけなければいけなかったかもしれないけど。

715 :デフォルトの名無しさん:03/06/15 23:18
>>709はstrncpyの仕様を知らないだけ。

716 :706:03/06/15 23:21
strncatでも'\0'をつけないな・・・・

717 :706:03/06/15 23:27
思いっきり阿呆なこと言っていた。恥ずかしい・・・
catの方は'\0'を付加するということばかり考えていて"連結する"関数だということを忘れていた。。。

718 :デフォルトの名無しさん:03/06/15 23:37
標準ライブラリで長さに0とか負数(intの場合)を指定したときの挙動って
どうなってるの?
if(sz > 0) then foo(p, sz);
みたいにifではじく必要があるのかないのかが知りたいです。

719 :デフォルトの名無しさん:03/06/15 23:42
>>718
thenって(w
基本的に標準ライブラリはガーベッジイン・ガーベッジアウトだと
思って使ったほうがいいよ。

720 :デフォルトの名無しさん:03/06/15 23:46
strstrに渡す検索文字列の長さが0だとまずいんだったかな。

721 :デフォルトの名無しさん:03/06/15 23:51
>>719
freeのようにNULLはOKと明示しているものだけ安全って事ですかね。

722 :デフォルトの名無しさん:03/06/15 23:57
>>721
そだね

723 :デフォルトの名無しさん:03/06/16 00:02
fopenもNULLを渡してよい仕様にしてほしかった。ラッパーを作れば済むけど。

724 :723: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);
}

これで警告が出るのですが、どのように直せば、警告が消えるのでしょうか?

726 :デフォルトの名無しさん:03/06/16 00:36
よくわからんが定数にU付ければいいんじゃない?1Uとか

727 :デフォルトの名無しさん:03/06/16 00:37
(void)func(c);
return 0;

728 :デフォルトの名無しさん:03/06/16 00:45
int func(unsigned c){ return 1;}

729 :デフォルトの名無しさん:03/06/16 00:51
どんな警告か書いて

730 :デフォルトの名無しさん:03/06/16 00:57
main からの return 0; がない。

731 :725: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!");
}

733 :デフォルトの名無しさん:03/06/16 01:06
>>732
Visual Studioとかだと、main関数の返り値が定義されていないと警告出て自動的に
void main() としてコンパイルされる。
それがいやなら、

void main(){
}

とコーディングするか、


int main(){

return 0;
}

とすればいい。

734 :デフォルトの名無しさん:03/06/16 01:11
>>731
gcc なら main{}で警告でないよ。

735 :732:03/06/16 01:24
できましたドモデス

736 :デフォルトの名無しさん:03/06/16 01:27
-Wconversion
プロトタイプの存在により引き起こされる引数の型変換が、 プロトタイプが存在しなかった場合
に同じ引数に対して行われるであろう変換と異なる場合に、 警告を出力します。 これには、
固定小数点から浮動小数点への変換やその逆の変換が含まれます。 また、 固定小数点引
数の大きさ(width)や符号の有無を変更する変換も、 それがデフォルトの拡張(promotion)と
同等である場合を除外して、 対象となります。 また、 負の整数定数式が暗黙のうちに無符号
の型に変換される場合にも、 警告が出力されます。 例えば、 xが無符号であると、 代入x =
-1に対して警告が出力されます。 しかしその一方で、 (unsigned) -1のような明示的なキャ
ストに対しては、 警告は出力されません。

737 :デフォルトの名無しさん:03/06/16 01:33
引数の型の問題みたいだけど>>725がなんでダメなのかわからんな。

738 :デフォルトの名無しさん:03/06/16 01:40
そんなオプションつかうな。

739 :デフォルトの名無しさん:03/06/16 01:53
-Wallで十分

740 :725: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));

これでは無理でした・・・

742 :デフォルトの名無しさん:03/06/16 03:02
>>737
プロトタイプがなければ、charを受け取る関数というのは書けない。

743 :デフォルトの名無しさん:03/06/16 03:04
>>734
-Wallにすると旧式な宣言は警告されるな
C++では合法なはずだが、それでも出る

744 :デフォルトの名無しさん:03/06/16 03:13
>>741
p[i]の領域とってないじゃん。

ところで、何で二重ポインタが突然二次元配列って話に飛ぶんだ?
先輩か教官にそんなこと言うアフォがいるんなら、そいつはもう相手にするな。
添え字って*(mona + giko)をmona[giko]と書いてもよい、だけのことだよ。
プログラムの設計図をちゃんと作ってみろって!
そのコードがいかに無茶苦茶か浮き彫りになるから。

745 :744:03/06/16 03:21
>p=malloc(10*sizeof(char(*)));
欝だ氏のう

746 :デフォルトの名無しさん:03/06/16 03:22
>>741
0に初期化したいのならmemsetなんぞ使わずにmallocをcallocにすればいい。
ところで、sizeof(char)ってのは無意味だよ。

747 :744:03/06/16 03:25
sizeofじゃmallocで確保したメモリのサイズは取れない
memsetにpと渡してもポインタ配列の部分をゼロクリするだけで
その先にある文字列格納メモリは個別にゼロクリが必要。
mallocと同数回のmemsetか、mallocの代わりにcallocな。

748 :デフォルトの名無しさん:03/06/16 03:28
二次元配列なら

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

だと思うけど


749 :デフォルトの名無しさん:03/06/16 03:39
>>745
ワラタ。おれ、744を見て「え? そうだったっけ?」って小一時間(うそ、小一秒間)、
コードを読み返しちゃったよw

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

# このsizeofとかの理解だとやってそうな気がする。


750 :デフォルトの名無しさん:03/06/16 04:29
 初歩的な質問で申し訳ありません。
現在、文字列の一部を置き換える関数の課題をしているのですが、
char型の関数を用意したのはいいものの、返り値がよく分かりません。
char strを返した場合、mainのところで出力する場合は
ポインタとかを使えばいいのでしょうか。(´・ω・`)


751 :デフォルトの名無しさん:03/06/16 04:30
>>750
他人はもっと分からないぞ。
課題にはなにを返せと書いてある?

752 :デフォルトの名無しさん:03/06/16 04:36
えとですね、頭書きがchar *replace(char *s1, char *s2, char *s3){…}と
なっていて、たとえばp=replace("tracter","act","imot")だったら、
pは"trimotor"と返すような関数なんです。
それで、関数自体はなんとか出来たのですが、返り値でつまづきました。
replace関数の所で配列strに文字列を格納したのでreturn (str);としたのですが、
出力がうまくいかないのです。(´・ω・`)
replace関数の中で出力するのはうまく出来たのですが……。

753 :デフォルトの名無しさん:03/06/16 04:38
>>741
>/* 何か代入する */
>memset(p,0,sizeof(p));
memset()で初期化出来るか出来ないか以前に
初期化を何の為に、何時するべきなのかを考えましょう

754 :デフォルトの名無しさん:03/06/16 04:41
>>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なはずだよ。


756 :755:03/06/16 04:45
ん?strは配列でそこにコピーするのか?
それならstatic char str[SIZE];とすればいいんだけど・・・・

757 :デフォルトの名無しさん:03/06/16 04:47
>>752
1 s1を直接書き換える
2 staticで用意してやる
3 char *replace ( char *dst, char *s1, char *s2, char *s3 ) ;
  の様に、もう1つ増やしてdstに格納する
4 malloc()でstrのメモリを確保してやる
後は、自分が習った範囲で好きな方法で (かなり進められない方法もあるが)

758 :754:03/06/16 04:47
>>756
うん。まあそうすれば一応解決は解決だけど使いづらい関数になるなw

759 :750:03/06/16 04:48
なんかいろいろいじってたらできちゃいました。ごめんなさい(´・ω・`)
ちなみにmain関数はこうなってます。
main(){
char *p;
p=replace("tracter","act","imot");
while(*p!='\0'){
printf("%c",*p);
p++;
}
printf("\n");
}
でもポインタがよく分からないのでなんで出来たかもわかってません。

760 :デフォルトの名無しさん:03/06/16 04:51
>while(*p!='\0'){
>printf("%c",*p);
>p++;
>}
>printf("\n");
嫌がらせ?

761 :755: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;
}

762 :750:03/06/16 04:57
>>760さん
嫌がらせなんでしょうか……
>>755さん
知らない文字がいっぱいです(´・ω・`)理解すらできません。
肝心なことを忘れてましたが、ライブラリ関数で使っていいのは
mallocだけだそうです。

763 :754:03/06/16 04:58
>>761
文字列の置換て、溢れる可能性があるからディスティネーションの
サイズに気を使うから結構面倒だよね。
サイズが与えられない関数だったらstrlenの長さまでしか置換できないし。

764 :デフォルトの名無しさん:03/06/16 05:00
>>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みたいにかまわず書き込むタイプだから、置換後に長くなる場合は使用者がきちんと領域を確保していないといけない(^_^;)

767 :765:03/06/16 05:06
勝手にマッチした文字列を全て置き換えると思ってしまったけど、
もしかして置き換えるのは一個だけでよい?>>762

768 :デフォルトの名無しさん:03/06/16 05:07
質問です
C(VCやC++じゃない初期のC)で時計のプログラムを組むという初歩の
プログラムをやってるんですがOSがwindows2000でエスケープシーケンスが使えません
この場合解決策はありますでしょうか?

769 :750:03/06/16 05:09
>>765さん
ごめんなさい。ただ置換する文字列が複数個あったらその都度
置き換えるので、二個以上だと足りなくなるような……。
mallocで領域を増やせるのでしょうか。
というか宿題スレ別にあったのですね。すいませんでした〜

770 :デフォルトの名無しさん:03/06/16 05:09
>>768
Win2000Proじゃ入っていないと思うけど、telnetサーバ立ち上げてTeraTermから。

771 :デフォルトの名無しさん:03/06/16 05:10
>>769
領域はreallocで増やせるけど、先に計算して確保した方がいいと思うけどなぁ。

772 :デフォルトの名無しさん:03/06/16 05:14
>>771
つか、mallocしか使っちゃダメとかいうんで、
今、自分でstrlenとかstrstrとか実装してたりするw

773 :デフォルトの名無しさん:03/06/16 05:16
>>768
一応スレ違い。

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

Cygwinをインストールすれば、使えるようにはなるけど。

774 :デフォルトの名無しさん:03/06/16 05:17
>>772
そういえばそうだw
>>769
というわけで増やすのは無理(か面倒)だw

それと宿題を代わりにやってくれというわけではないからここでOKだと思う。

775 :デフォルトの名無しさん:03/06/16 05:41
>>768
16ビットを吐くコンパイラならANSI.SYSを組み込むことでエスケープシーケンスは使える。

776 :768:03/06/16 05:53
レスありがとうございます
教えて貰ったものを試してダメだったらOS変えることにします
スレ違い失礼しました(´・ω・`)

777 :デフォルトの名無しさん:03/06/16 06:00
>>776
専用の関数群があったと思うけど
OSが提供するAPIなのか単なるライブラリなのかは知らないけど・・・

778 :デフォルトの名無しさん:03/06/16 06:07
>>776
ていうか、コンパイラの名前くらいちゃんと書けと。

779 :デフォルトの名無しさん:03/06/16 06:11
>>776
うってつけがあったぞ
http://www.kumei.ne.jp/c_lang/intro/no_59.htm

780 :デフォルトの名無しさん:03/06/16 06:39
>>776
待て待て。Cygwinを使えばOSを変える必要はない。
インストールがちょっと手間だが、OSを変えるよりは手軽だ。

781 :デフォルトの名無しさん:03/06/16 06:43
>>774
うむー、Cなんて久しく組んでなかったからどうもうまくいかん。
文字列の置換なんてRubyとかPerlでgsub一発でやってたもんな、最近。
堕落したもんだ。なわけで時間切れ、寝ます。

>>750
そういうわけだ、すまんな。
ではおやすみ


782 :デフォルトの名無しさん:03/06/16 07:56
〜しか使っちゃいけない宿題って本当にあるのか?
いやライブラリの同じ機能のものを使うのはマズイだろうけど、
mallocだけしかダメなんていう出題が本当にあるのかはなはだ疑問。
たんなる思い込みではないのだろうか?

783 :デフォルトの名無しさん:03/06/16 11:31
>>106
え?まじで?

784 :デフォルトの名無しさん:03/06/16 11:36
    ∧_∧       ∧_∧
    (・∀・ )      (・∀・ )
    (⊃   つ      (⊃    つ
     Y  ,,ノ        Y  ,,ノ 
     し ゝ_)        し ゝ_)
""""゙""""゙゙""""""""゙""""゙゙""""""""
     ∧           ∧
    アイーン       アイーン


    ∧_∧       ∧_∧
    ( ・∀・ )gets!   ( ・∀・ )gets!
    (σ   ,,σ      (σ   ,,σ
     (_,,l⌒l        (_,,l⌒l
      (_)        (_)

785 :デフォルトの名無しさん:03/06/16 14:53
>>783
えらい昔のに反応するね。
getchar の返す値は EOF + 0〜255 だから
int じゃないと表現できない。

786 :デフォルトの名無しさん:03/06/16 16:16
>>785
×EOF + 0〜255
○EOFとunsigned charが取り得る全ての値

787 :Cマガ、日系ソフトに続く第3の本でないかな・・・:03/06/16 16:54
>>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++;
とすると入らないんですが、なぜでしょうか?

789 :デフォルトの名無しさん:03/06/16 17:19
while(*st++) ;

while(*st)
    st++;
の違いを考えましょう。

790 :デフォルトの名無しさん:03/06/16 17:21
ヒント
for( ; ; st++)

791 :789:03/06/16 17:41
for文に直せるか直せないかの違いですか?
うーん、ちょっとわかんないです・・・。

792 :デフォルトの名無しさん:03/06/16 17:44
>>791

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

この違いと同じだ

793 :789:03/06/16 17:49
あああわかりました!
インクリメントする回数が前者は一回多くなってしまっているんですね。
ありがとうございました!

794 :デフォルトの名無しさん:03/06/16 17:50
ヒント
for(i=0; ;i++)

iはいくつから処理される? いつインクリメントされる?

795 :789:03/06/16 17:52
>>794
ありがとうございます!
評価される度にインクリメントされるのだから、
while(*st++)だと一回余計にインクリメントされるんですよね?

796 :デフォルトの名無しさん:03/06/16 17:54
>>794
虚しいな

797 :デフォルトの名無しさん:03/06/16 19:29
砂上の楼閣というか、底無し沼の上にビルを建ててるような雰囲気だな。

798 :デフォルトの名無しさん:03/06/17 02:50
みんなプログラム組むときにフローチャートみたいな図とか何かしらメモ書いてる?


799 :798:03/06/17 02:50
あ、スレ違いだ、すまん。

800 :デフォルトの名無しさん:03/06/17 10:03
>>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);
}



801 :デフォルトの名無しさん:03/06/17 10:16
>>800
stはどこを指しているのかな?

802 :デフォルトの名無しさん:03/06/17 10:19
エー エフ オー

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



804 :デフォルトの名無しさん:03/06/17 10:34
>>803
だからつまらないってば。

805 :800:03/06/17 10:35
じゃ、もう逝ってきま〜す


806 :デフォルトの名無しさん:03/06/17 11:55
質問ッス
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みたいのは
キャストしないとだめだが・・普通せんけど

810 :デフォルトの名無しさん:03/06/17 13:18
>>806
C++は文法上の型チェックは厳しいッスからね

811 :デフォルトの名無しさん:03/06/17 14:17
voidへのポインタってなに?

812 :デフォルトの名無しさん:03/06/17 14:25
>>807
const double PI = 4*atan(1.0);

どうでもいいけど最近のコンパイラはgccもBCBにしてもsqrt(2)みたいに引数が
double型の関数に整数を書いてもきちんとキャストされるのね

813 :デフォルトの名無しさん:03/06/17 15:01
>>812
#include <math.h>
const double PI = M_PI;

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

814 :デフォルトの名無しさん:03/06/17 15:17
>>812
constにはできない

>>813
ANSIにはない

815 :デフォルトの名無しさん:03/06/17 15:54
M_PI は ANSI C 規格外のマクロだから、
コンパイラによっては使えない。
だから、
#ifndef M_PI
#define M_PI 3.141592653589793
#endif
と自分で定義する。

816 :デフォルトの名無しさん:03/06/17 17:00
3.14159265358979323846264338327950288419716939937510208998628

817 :デフォルトの名無しさん:03/06/17 18:43
printf()で「 " 」を出力するにはどうすればいいのでしょうか?

818 :デフォルトの名無しさん:03/06/17 18:48
printf("\"");

819 :817:03/06/17 18:54
ありがとうございました!!

820 :デフォルトの名無しさん:03/06/17 19:02
これからCのプログラマになろうと思ってます。
今のところ独学で入門書3冊を読んだ後、K&Rの途中まで進んでいます。
けど現場のレベルが分からないもんでなんか不安です。
K&Rをだいたい理解出来ていれば現場に行っても大丈夫ですか?

821 :デフォルトの名無しさん:03/06/17 19:39
何の現場?
職種によって必要な知識は千差万別でツ。

822 :デフォルトの名無しさん:03/06/17 19:47
そんなもんは現場によります。
なかには >>817 のような人が活躍中(?)の現場もあります。
貴方の脳味噌が優秀で現場が真っ当な所なら研修で必要最低限度のことは教えてくれます。
どうにも使えないようなレベルの人は真っ当な所なら落としてくれます。
駄目なところならマニュアルのカタカナ読むのを嫌がらないだけでも歓迎してくれます。


823 :デフォルトの名無しさん:03/06/17 20:22
>>816
途中25桁ほど抜けてるぞ。

824 :デフォルトの名無しさん:03/06/17 21:56
>>820
まずは就職してから聞きなよ(^_^;)

825 :820:03/06/17 22:31
レスありがとうございました。
817のような人が活躍できるイメージが湧きませんが、
取りあえず就職頑張ってみます。


826 :デフォルトの名無しさん:03/06/17 22:34
マ板で聞くべきことをここで聞くような人が活躍できるイメージというのも湧かないな。

827 :デフォルトの名無しさん:03/06/18 00:39
あんまり気負いすぎると現場のレベルの低さに落胆すること請け合い。
糞不味いラーメンを一生作り続ける向上心ゼロのプロだっているわけで。

828 :デフォルトの名無しさん:03/06/18 01:08
5月一杯でいなくなった奴が組んだソースを見たら、
保守性のかけらもなくてびっくりした。

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

普通にそれなりに活躍できると思われ。

829 :デフォルトの名無しさん:03/06/18 01:12
他人のソースなど常に保守性のかけらもない

830 :デフォルトの名無しさん:03/06/18 01:16
それはおまいにソースを読む力がないか
コーディング規約をキチンと決めてないか
同僚に恵まれてないか
のどれか

831 :デフォルトの名無しさん:03/06/18 01:16
>>829
それじゃ仕事になってない。

832 :デフォルトの名無しさん:03/06/19 01:27
Cは死滅?

833 :デフォルトの名無しさん:03/06/19 03:02
>>832
おまえが理解できないだけ。

834 :デフォルトの名無しさん:03/06/19 03:12
ていうかプログラマの教養課程

835 :832:03/06/19 03:29
丸一日書き込みがなかったから

836 :デフォルトの名無しさん:03/06/19 05:01
本当のことでも死滅なんて書いたらかわいそうだよ
ここにはC言語くらいしか能が無くて
死滅したら食っていけない人が沢山いるんだから

837 :デフォルトの名無しさん:03/06/19 05:40
>>836
おまえが理解できないだけ。

838 :デフォルトの名無しさん:03/06/19 09:16
C89 はいい加減古いことは事実だ。
じゃなきゃ C++ だの C99 だのなんて作らない。
しかし、COBOL や FORTRAN77 のように
しつこく生き残ることも確かだろう。
(これらと比べるのは C がちょっと可愛そうだが)

839 :デフォルトの名無しさん:03/06/19 10:07
過去の遺物を保守するような仕事はしたくねーな。

840 :デフォルトの名無しさん:03/06/19 10:49
age

841 :デフォルトの名無しさん:03/06/19 11:23
家電製品程度のマイコンなんかは、アセンブラ。
代替となりうる(なっている)のはCぐらいだろ。

C++は、なんか大げさだし。

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



843 :デフォルトの名無しさん:03/06/19 11:43
だめです。

844 :デフォルトの名無しさん:03/06/19 11:44
いいんだよ。

845 :デフォルトの名無しさん:03/06/19 11:45
なりません。

846 :デフォルトの名無しさん:03/06/19 12:13
ダメです、それは

847 :デフォルトの名無しさん:03/06/19 12:18
>>843,845,846
なぜ?

848 :デフォルトの名無しさん:03/06/19 12:20
>>842
typedefの役割をわかっていますか?
簡潔にだよ!簡潔に!わかっていますか!
(unsigned long int)この型を振り回したソースみてどう思う?
て、俺のソースだよ。

849 :デフォルトの名無しさん:03/06/19 12:31
>>848
釣りか?

850 :デフォルトの名無しさん:03/06/19 12:38
>>842
longがサイズを表すのに適切な型とは限らないから。

851 :デフォルトの名無しさん:03/06/19 12:44
やった。>>849が釣れた

852 :デフォルトの名無しさん:03/06/19 12:51
>>850
??

853 :デフォルトの名無しさん:03/06/19 12:54
>>852
typedefの役割をわかっていますか?

854 :デフォルトの名無しさん:03/06/19 13:42
型に意味のある名前をつけて分かりやすくするだけでなく、
環境によってその定義を変更してやることによって
移植性の高いコードを書く事もできる優れものだな。
FILE とか環境によって随分と定義が違ってるぜ。

尤も、特定の環境での定義に依存したコードを書いた途端
移植性が低くなってしまうがな。

855 :デフォルトの名無しさん:03/06/19 14:20
型に無意味な名前を付けて偏見から開放されるだけでなく、
環境によって名前を変更してやることによって
どの環境で書かれたか分かる優れものだな。


856 :デフォルトの名無しさん:03/06/19 14:42
だれか>>855を分かるように説明して。

857 :デフォルトの名無しさん:03/06/19 14:54
左辺値が必要(関数 main )
というコンパイルエラーがでるんですが、どうなんでしょうか?
何が原因でしょうか。
if(seisuu%2=1){
printf("ガクガク");
}
この部分です

858 :デフォルトの名無しさん:03/06/19 14:58
>if(seisuu%2=1){
なにこれ、なにがしたいの?

859 :デフォルトの名無しさん:03/06/19 15:01
==

860 :デフォルトの名無しさん:03/06/19 15:01
seisuuはユーザーが入力するようにするんです

861 :デフォルトの名無しさん:03/06/19 15:03
>857
seisuu % 2 == 1
ご愁傷様です

862 :858:03/06/19 15:03
代入してどうすんだよ
>>859が書いたとおりif(seisuu % 2 == 1)だろ
代入と等号間違えるなよ

863 :デフォルトの名無しさん:03/06/19 15:03
左辺値が必要なんですよ :-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

867 :デフォルトの名無しさん:03/06/19 15:15
printf("%d ",i*j);ここ

868 :デフォルトの名無しさん:03/06/19 15:16
COBOLなら、オレに聞け!<2>

869 :デフォルトの名無しさん:03/06/19 15:17
printf("%3d",i*j);

870 :シンジ:03/06/19 15:19
IPの隠し方教えてください



871 :デフォルトの名無しさん:03/06/19 15:20
printf("%2d",i*j);
putchar(j==9?'\n':' ');

872 :デフォルトの名無しさん:03/06/19 15:21

I○

873 :デフォルトの名無しさん:03/06/19 15:40
また未定義か

874 :デフォルトの名無しさん:03/06/19 15:47
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


878 :デフォルトの名無しさん:03/06/19 23:34
>>876
それを言うんだったら、何でD〜Z言語がないの?
って、つっこんでみる。

879 :デフォルトの名無しさん:03/06/19 23:38
C++を最初はD言語となずける予定だったがC言語がすばらしいのでそれに
敬意を表してC++になった。結構有名な話。ちなみにC++はANSIで1999年に
標準化されたとっても新しいものです。でも規格化以前から存在しいました。

880 :デフォルトの名無しさん:03/06/19 23:40
何でGoogle使わないの?

881 :デフォルトの名無しさん:03/06/19 23:42
C++作ったのってカーニハンらと同じくベル研究所の人なんだよね?
つまり後輩が作ったということなのか

882 :デフォルトの名無しさん:03/06/20 00:00
>>850がいいこと言ったようだが
>>853, >>854, >>855, >>856は無視か

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

↑だけ空想論とかぬかすなよ、てめーら

883 :デフォルトの名無しさん:03/06/20 00:01
びやーね すとらうすとるうぷ

884 :デフォルトの名無しさん:03/06/20 00:02
>>882
そんな環境あるかよ。妄想もたいがいにしろ。








sizeof(unsigned long) > sizeof(void*)な環境ならあるが。

885 :デフォルトの名無しさん:03/06/20 00:06
>>883は暗号ですか?

886 :デフォルトの名無しさん:03/06/20 00:09
>>879
ISOから規格書(14882)とりよせて年式を確認してみろ
ttp://www.jsa.co.jp/

887 :デフォルトの名無しさん:03/06/20 00:10
>>884
妄想? 自信があるなら、そんなに改行するなよ

888 :デフォルトの名無しさん:03/06/20 00:11
>>886
s/co/or/

889 :デフォルトの名無しさん:03/06/20 00:12
>>884
初心者です。
例えば、どんな環境があるんですか?

890 :デフォルトの名無しさん:03/06/20 00:14
こいつに聞いても無駄だよw

891 :デフォルトの名無しさん:03/06/20 00:16
規格でどうのと言うくせに、今回は??
移植性が聞いてあきれらあ

892 :デフォルトの名無しさん:03/06/20 00:22
>>890
プレステ2はsizoef(long)==8なんだよ。覚えとけ。

893 :デフォルトの名無しさん:03/06/20 00:24
>>882
うん、えらい

894 :デフォルトの名無しさん:03/06/20 00:28
おまえらホントバカな


895 :デフォルトの名無しさん:03/06/20 00:29
で?

896 :デフォルトの名無しさん:03/06/20 00:32
┐(´ー`)┌

897 :デフォルトの名無しさん:03/06/20 00:39
まぁ、要するに、size_tと言うのは
主に、添え字として使用する時に使うべきものなので
その必要な大きさは、ポインタの大きで十分であると…
が、特定の環境等(どうしてもlongが128ビット必要とか)で
unsigned long を、添え字として使用するには
無駄なので(上記例ではメモリが128ビット分あれば無駄と言う訳ではないが…)
unsigned long int 等とはせずに、
その環境に応じて必要なサイズにすれば良いと言う事で…

つーか、レスを読んでも、いまいち、論点が見えないんだけど、
一体、誰が、どう言う主張をしてるの?

898 :デフォルトの名無しさん:03/06/20 00:45
ようするに、移植性を向上させるためってこと?


899 :デフォルトの名無しさん:03/06/20 00:46
逆に下がるね。int使いな。

900 :デフォルトの名無しさん:03/06/20 00:53
>>898
移植性と言うよりも
ただ単に、各々の環境で必要な分とすれば良いじゃないの?
って事だと思う (まぁ、いろいろと意見もあると思うけど…)
だいたい、移植性が問題なのなら "char" も "short" も "long" も
全てまとめて int 型の1つにしてしまえば良い(規格自体を)し
それぞれ、型が分かれているのは、それぞれの環境で
それぞれ最大限に資源を活用出来るようにする為だと思うので
"size_t" が決められていないのも、その一環なのだと思う…

901 :デフォルトの名無しさん:03/06/20 01:48
移植性:
ある変数のサイズを固定したい場合、
C の環境によって型のサイズが違っても良いという仕様は困る。
そこで、typedef した型名を使い、
環境によって定義を切り替えてやれば解決する。
また、環境によって構造体を使わないと実装できないか、
普通の型で十分実装できるか異なるものも、
typedef を使えば同じコードで処理できる。

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

902 :デフォルトの名無しさん:03/06/20 11:52
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から@にいくようにするにはどうすればいいのでしょうか?

903 :デフォルトの名無しさん:03/06/20 11:56
goto

904 :デフォルトの名無しさん:03/06/20 12:05
>>902
ロジックを見なおす。
for example.
先ずmain()全体をループに入れ、
ネスト深すぎるから外のcase2のwhile辺りを関数化して、
中のcase2でフラグをセット。
main()に戻ったところでフラグがセットされていたらループ継続。

905 :デフォルトの名無しさん:03/06/20 12:37
特定の条件が満たされたら最初からやり直す。
という処理はループよりgotoだろ。盲目的安置でもなければ。

906 :デフォルトの名無しさん:03/06/20 12:48
>>902
switch(n) 以下を関数化し(例えば foo とする)、
do {
 scanf("%d", &n); /* ← & も忘れずに! */
} while(!foo(n));
とし、foo はループを継続する場合(異常状態?)は 0 を、
ループを終了する場合(正常状態?)は 1 を返すようにする。

907 :デフォルトの名無しさん:03/06/20 13:00
int i;
int *n=&i;
としているから&をつけなくてもいいんでつ。

908 :デフォルトの名無しさん:03/06/20 13:13
なんじゃそりゃ。

909 :デフォルトの名無しさん:03/06/20 13:25
>>907
それはウソだろう。switch(*n)と書いてないんだから。

910 :907:03/06/20 13:27
ちっ・・・

911 :デフォルトの名無しさん:03/06/20 13:33
ポインタってどうゆうもんすか?

912 :デフォルトの名無しさん:03/06/20 13:40
* ← こういうの

913 :デフォルトの名無しさん:03/06/20 14:18

↑むしろこれ

914 :デフォルトの名無しさん:03/06/20 14:33
↓←
→↑

915 :デフォルトの名無しさん:03/06/20 14:35
 ↑
← →
 ↓

916 :デフォルトの名無しさん:03/06/20 14:43
( ・ )( ・ )

917 :デフォルトの名無しさん:03/06/20 14:58
( ・ Y ・ )

918 :デフォルトの名無しさん:03/06/20 15:14
なんか変な方向に向かっているような気が・・・

919 :デフォルトの名無しさん:03/06/20 15:17
新キャラ C言語クン

(・C・)

920 :デフォルトの名無しさん:03/06/20 15:18
初心者のためのポイント学習C言語 http://www9.plala.or.jp/sgwr-t/

921 :デフォルトの名無しさん:03/06/20 15:19
v(・∀・)

922 :デフォルトの名無しさん:03/06/20 15:20
vc(・∀・)


923 :デフォルトの名無しさん:03/06/20 15:21
>>919
御茶ノ水博士?

924 :デフォルトの名無しさん:03/06/20 15:21
vc(・∀・)++


925 :デフォルトの名無しさん:03/06/20 15:31
C( ・∀・ #)

926 :デフォルトの名無しさん:03/06/20 15:34
C(+^o^+)

927 :デフォルトの名無しさん:03/06/20 15:39
高速にファイルをコピーするのには
どんな方法が有りますか?
apiを叩くのが一番早いのでしょうか?

928 :デフォルトの名無しさん:03/06/20 15:40
ポートを叩くとかAPIを叩くという表現はやめてくれ

929 :デフォルトの名無しさん:03/06/20 15:43
SMTPを喋る(w

ていうか、OSや環境固有のAPIを話題にする時点でスレ違いだ罠

930 :デフォルトの名無しさん:03/06/20 15:44
そもそもCと関係ない

931 :デフォルトの名無しさん:03/06/20 15:45
http://jbbs.shitaraba.com/computer/6765/


932 :デフォルトの名無しさん:03/06/20 15:49
このスレで言える事は、

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

くらいのもんだ。

933 :デフォルトの名無しさん:03/06/20 16:31
>>927
高速にファイルをコピーするライブラリ、ツールなどを探す。

934 :デフォルトの名無しさん:03/06/20 16:40
一度出力した文字列や数値を画面上から消すことは可能ですか?



935 :デフォルトの名無しさん:03/06/20 16:42
system("cls");


936 :デフォルトの名無しさん:03/06/20 16:44
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");

937 :デフォルトの名無しさん:03/06/20 16:46
int i=10000;
while(i--)
puts("");

938 :デフォルトの名無しさん:03/06/20 16:53
ありがとうございます。
では、特定の文字列だけとか指定は可能でしょうか。

939 :デフォルトの名無しさん:03/06/20 16:56
バックスペースで消せる範囲なら
バックスペースを表示すればいけることもある。
環境によっては変なのが表示されるけど。

940 :927:03/06/20 17:03

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

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

>>932
バッファのサイズによっても変わるんですか
ちょっと調べてみます。

941 :デフォルトの名無しさん:03/06/20 17:29
>>927=940
スレ違いだってばさ。
>>933の方法が一番無難だと思うがな。

942 :デフォルトの名無しさん:03/06/20 18:10
今なら新スレ立てられるけど、ちょっと早いかな。

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
-----------------------------------------------


946 :デフォルトの名無しさん:03/06/20 20:29
>>943
「Cでは」って、そんな機能のある言語ってあるの?

947 :おしえてください:03/06/20 20:38
会社で、「そこは、getchar()を使って。」と言われました。
ワタシは、scanf()を使っていました。なぜそんな事をいわれたのか、不思議なんです。

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

getcharって、関数でなく、マクロなのですか?

948 :デフォルトの名無しさん:03/06/20 20:40
assert以外に必ずマクロってのはあったかな・・・・
is〜もまずマクロだろうけど、関数であってもいいと思うし。

949 :デフォルトの名無しさん:03/06/20 20:43
getchar を使うべき状況で scanf を使っていたら注意されるでしょうね。

つーか scanf 使ってる時点で(

950 :デフォルトの名無しさん:03/06/20 20:44
仕事でscanf使っちゃう人いるんだ。

951 :デフォルトの名無しさん:03/06/20 20:46
>>947
つーか、scanf()を使ったら仕事にならんって。
このスレ、遡って読めば判ることだ。
或いはC-FAQにも出てたろ。

952 :おしえてください:03/06/20 20:46
>>949

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

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

>つーか scanf 使ってる時点で(
↑の意味がちょっと分かりません。普通のCプログラムは、scanfみたいな、入門書に載っているような
関数は、馬鹿らしくて、使わないと言う意味なんでしょうか。。

953 :デフォルトの名無しさん:03/06/20 20:48
新スレ立ててくる。
ちょっとタイトル変えるけど堪忍して。

954 :デフォルトの名無しさん:03/06/20 20:51
>952
バッファーオーバーフロー

955 :デフォルトの名無しさん:03/06/20 20:52
http://pc2.2ch.net/test/read.cgi/tech/1056109884/

新スレ

956 :デフォルトの名無しさん:03/06/20 21:07
scanf("%100s"buf);

957 :おしえてください:03/06/20 21:07
みなさん、どうもレスありがとうございます。

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

getsも、使っちゃいけないと書いてありますね。入門書は、うそつきなのですね。こんな僕でも、これからやっていけるか、不安になってしまいました。

958 :デフォルトの名無しさん:03/06/20 21:16
C言語は可変長データをサポートしていないから、
そういう関数も問題があると知っていても使わなき
ゃならないんだよ。
それが嫌なら早くC++をおぼえろっつーこと。

959 :デフォルトの名無しさん:03/06/20 21:27
gets や scanf は入門用のオモチャ関数。
仕事ではもっと安全な別の関数を使ってやりくりするが吉。

960 :デフォルトの名無しさん:03/06/20 21:27
テーブルがずれているので調整

961 :デフォルトの名無しさん:03/06/20 21:38
>>957
大丈夫。
今日は、scanfを使わないということを覚えましたよね。
物事は一歩一歩積み重ねて覚えていくものです。
がんばってください。


962 :おしえてください:03/06/20 21:59
>>959さん、>>961さん、どうもありがとうございます。

これからも、とりあえず、がんばっていこうと思います。

963 :デフォルトの名無しさん:03/06/20 23:00
しかし、scanf()の代わりがgetchar()か?
どんな職場だ。

964 :デフォルトの名無しさん:03/06/20 23:06
>>963
getcharを使うべきところに、scanfを使うような奴がいる職場。

965 :デフォルトの名無しさん:03/06/20 23:09
scanf("%d",&i)を取って代われる優れた関数の実例が言えるか?

966 :デフォルトの名無しさん:03/06/20 23:14
fgets(buf, sizeof buf, stdin);
i = atoi(buf);

967 :デフォルトの名無しさん:03/06/20 23:17
bufの定義を書いてみろ

968 :デフォルトの名無しさん:03/06/20 23:19
>>967
何でそんなに喧嘩腰なの?

969 :デフォルトの名無しさん:03/06/20 23:20
教えて欲しいんだけど、素直になれないから

970 :デフォルトの名無しさん:03/06/20 23:22
>>968
scanfは使わない、を一般論と言うアフォを論破したい

971 :デフォルトの名無しさん:03/06/20 23:23
>>970
誰のことを言ってる?

972 :デフォルトの名無しさん:03/06/20 23:23
たとえば961

973 :デフォルトの名無しさん:03/06/20 23:24
早く答えろよ、bufの定義

974 :デフォルトの名無しさん:03/06/20 23:35
>>973
char buf[MAX];

975 :デフォルトの名無しさん:03/06/20 23:36
入力された数字列がMAX-2文字って保証はどこにある

976 :デフォルトの名無しさん:03/06/20 23:36
11分もかかってんじゃねーよタコ

977 :デフォルトの名無しさん:03/06/20 23:39
「はにゃ〜ん」の定義を述べよ


978 :デフォルトの名無しさん:03/06/20 23:39
>>975
入力された数字がiに収まる保証はどこにある

979 :デフォルトの名無しさん:03/06/20 23:40
>>975
>>974じゃないが、そうくると思った。
じゃあ、scanfは無限の長さの数字列読めるのか?
そういうのを考慮した場合、
scanfとfgetsとどちらが対処できるか考えればscanfを選ぶことはない。

980 :デフォルトの名無しさん:03/06/20 23:41
>>978
そんなのは未定義でいいんだよ
atoiと同じロジックをトレースしてどこまで解析したかを返す関数とか書いてるのかてめーわ

981 :デフォルトの名無しさん:03/06/20 23:42
>>979
別な話、無限の数字列を読むロジックは作ればできる

982 :デフォルトの名無しさん:03/06/20 23:45
>>981
別に無限にしなくても限界がある。
1行が長すぎると同じ行を2回以上scanfしてしまう。
これにどうやって対処する?

983 :デフォルトの名無しさん:03/06/20 23:46
scanf で数値入れるところで文字列入力すると
殆どの場合において暴走するけど、
それも再現しないといけないの?

984 :デフォルトの名無しさん:03/06/20 23:47
>>982
>1行が長すぎると同じ行を2回以上scanfしてしまう。
は? もしかして、あの処理系の話か?

985 :デフォルトの名無しさん:03/06/20 23:48
>>983
暴走してんのはてめーのアプリだ!
scanfはスペックを守っているに過ぎん
こういうアフォがscanfは使わないとか言ってるのを
聞くたびに耳が腐る思いだ

986 :デフォルトの名無しさん:03/06/20 23:49
>>980
支離滅裂すぎ
入力されたものが確実に解析できる訳ではないのだから
どちらで、あっても問題はない
問題なのは、入力されてるデータが無限に続いた場合
プログラムで制御して、入力を打ち切れるか、制御出来ないかの差

987 :デフォルトの名無しさん:03/06/20 23:51
>>986
確実に解析できなかった、その先で何をしているんだてめーの関数わ
もしかして、いちばん困ることをしでかしてくれるのか?

988 :デフォルトの名無しさん:03/06/20 23:53
>>977
うれし、はずかし?

989 :デフォルトの名無しさん:03/06/20 23:55
>>987
エラー返すに決まってんじゃん
つーか、ツッコミ所違うし

990 :デフォルトの名無しさん:03/06/20 23:56
>>985
あんた素人でしょう?プロとしてアプリを作ることになれば、
嫌でもscanfを使うなって事が分かるよ。

991 :デフォルトの名無しさん:03/06/20 23:57
>>989
fgetsでか?

992 :デフォルトの名無しさん:03/06/20 23:58
>>990
いいやCでメシ食ってるよ
嫌でも憶えることは
ブツのスペックだ

993 :デフォルトの名無しさん:03/06/21 00:07
>>992
止まったな…
まぁ、結論を言うと、そんな事を調べるより(scanf()が使えるかどうか)
scanf()を使わないようにした方か早いだろ?

994 :デフォルトの名無しさん:03/06/21 00:08
素人だの結論だのと腰抜けばっかりだな
このスレは

995 :デフォルトの名無しさん:03/06/21 00:09
おおうおおうおおうおおうおおう

996 :デフォルトの名無しさん:03/06/21 00:11
http://pc2.2ch.net/test/read.cgi/tech/1056109884/

次スレ

997 :デフォルトの名無しさん:03/06/21 00:11
「フォーマットの正しくない入力に対する動作は未定義です」
としておけばいいってこと?
素敵な職場だね。

998 :デフォルトの名無しさん:03/06/21 00:12
scanfなんか使ってられねえよ。。。
標準入力から入力する場合でも、入力用の関数とかつくらんか?

999 :デフォルトの名無しさん:03/06/21 00:13
>>997
そういう仕様にしてるのがscanfの代用としてよく引き合いに出されるfgetsだろうが

1000 :デフォルトの名無しさん:03/06/21 00:14
1000ゲット♪

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

199 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)