トップページ⇒tech
1001コメント251KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001前スレ995NGNG
まず問題を冷静に吟味して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/
0002前スレ995NGNG
【コンパイラ】
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
0003デフォルトの名無しさんNGNG
乙〜(^o^*)
0004デフォルトの名無しさんNGNG
おめ
0005デフォルトの名無しさんNGNG
おつ
0006前スレ995NGNG
おい、人は居るんじゃねーか(゚Д゚)
どいつもこいつも物臭ばっかりだな
0007デフォルトの名無しさんNGNG
>>6
Yahoo!BBなんだよ・・・立てられた試しなし。
0008デフォルトの名無しさんNGNG


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
"の数
0009デフォルトの名無しさんNGNG
9げっと
0010そこの219NGNG
>>8
なんだ文句あるか?
確かにforでセミコロンが一つ余計だが。
0011デフォルトの名無しさんNGNG
いいぞ。やれやれ。
>>8&>>10
0012デフォルトの名無しさんNGNG
 t2
δA=∫  {(∂/∂x)Lδx+(∂/∂v)Lδv}dt
t1
プログラムにすると・・・・・めんどくせ
0013デフォルトの名無しさんNGNG
やぁ、なんか用かい?>(∂/∂x)
0014デフォルトの名無しさんNGNG
δA=0

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

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

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

exit()はどの関数に居ても、強制的にプログラムを終了させる。
0023デフォルトの名無しさんNGNG
>>17
プロセス ttp://www.geocities.co.jp/SiliconValley/5634/t82D3_0013.html#2490
関数 ttp://www.geocities.co.jp/SiliconValley/5634/t82A9_0009.html#889
0024デフォルトの名無しさんNGNG
「プロセス」って言葉はOSによって意味にズレがあるからなぁ。
0025デフォルトの名無しさんNGNG
黄色い看板
0026デフォルトの名無しさんNGNG
それはプロミス
0027デフォルトの名無しさんNGNG
w
0028デフォルトの名無しさんNGNG
「へるぷみ〜だよー」
0029デフォルトの名無しさんNGNG
対象のファイルの内容を、「スペース(連続しているスペースも含める)、
改行、タブ」ごとに区切って表示するプログラムが課題になりました。
連続したスペースなどを別々に評価するプログラムはすぐできました。
つまり、対象のファイルを
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
0030デフォルトの名無しさんNGNG
#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);
}
003129NGNG
これによって、一応
line1word1_line1word2
line2word1__line2word2
は、正しく
field1 : line1word1
field2 : line1word2
field3 : line2word1
field4 : line2word2 <<<end of file>>>
と表示できるようになったのですが、どうもまわりくどいような気が
してならないのです。どうか、よろしくお願いします。
0032デフォルトの名無しさんNGNG
>>29
fgets()で読みこみ、sscanf()でパース。
sscanf()はどこまで読み出したかを知ることができるって辺りがポイント。
0033デフォルトの名無しさんNGNG
つーか、fscanf()でいいじゃん。
003429NGNG
>>32
こんな便利な関数があったのですか…<sscanf()
僕が使っている独習C(1994)という本には載っていなかったので、今しがた
検索してきましたが、ぱっと見ただけでも、今よりきれいなソースになりそう
でした。もちっと検索先を読んできます。

ありがとうございました。
0035デフォルトの名無しさんNGNG
>>34
全標準ライブラリ関数の一覧がないの?
はるひこ本でさえあるのに。。。
003634NGNG
索引をひきましたが、fscanf()はあったもののsscanf()は無い様でした。
本が古いせいなのでしょうか…

いずれにせよ、ファイル入出力の項に入ったところのため、fscanf()、
sscanf()のどちらも初見の関数なので、今から勉強はじめているところです。
0037デフォルトの名無しさんNGNG
1994年なら古いということはない。
003834NGNG
ということはもしやクズ本?ガクガクブルブル

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

今急に不安になって索引再度確認しましたが、やはりsscanf()は無い模様でした。
0039デフォルトの名無しさんNGNG
>>38
一冊で済まそうなんざ虫が良すぎるぜぃ。
0040デフォルトの名無しさんNGNG
関数の簡単な説明ならhttp://www.bohyoh.com/CandCPP/C/Library/index.htmlをみればいいかも。完全じゃないけど。
0041デフォルトの名無しさんNGNG
URLエンコードするにはどうすれば?
0042デフォルトの名無しさんNGNG
>>41 RFC 読め
0043デフォルトの名無しさんNGNG
予想通りのレスでワラタ
0044デフォルトの名無しさんNGNG
>>38
標準関数を全部網羅してなかったからといってクズ本になるわけじゃない。
だがその本は読んだことがないのでクズ本じゃないともいえないw
で、買うのならK&RよりPractical Cをお薦めする。
http://www.oreilly.co.jp/BOOK/cpra/
これね。
0045デフォルトの名無しさんNGNG
>>43
そこ笑うとこじゃないよ
0046デフォルトの名無しさんNGNG
gccっていうコンパイラはインストールしたんだけど
初心者向けでフリーのエディタって何でしょう?
0047デフォルトの名無しさんNGNG
>>46
kwrite
0048_NGNG
http://homepage.mac.com/hiroyuki43/jaz07.html
004946NGNG
すいません
win用を・・・
0050デフォルトの名無しさんNGNG
そ  れ  な  ら  メ  モ  帳  が  あ  る  だ  ろ  う  が
0051デフォルトの名無しさんNGNG
>>49
TeraPad
0052デフォルトの名無しさんNGNG
>>49
xyzzy
005346NGNG
>>51-52
ありがとうございます。
さっそく試してみます。
0054デフォルトの名無しさんNGNG
>>53
杜やvectorであさっていろいろ使って自分にあったものを探せばよろし。
ただなんだし。
0055デフォルトの名無しさんNGNG
スレ違いな質問はスルー推奨
0056預言者NGNG
http://elife.fam.cx/mfg/


0057デフォルトの名無しさんNGNG
http://jbbs.shitaraba.com/computer/6765/

0058デフォルトの名無しさんNGNG
Cで一応プログラミングようになったんだけど、
もうプログラミングする課題が尽きました。
課題を出していりるサイト知りませんか?
もしくは、課題を出してもらえませんか?
簡単なのでも結構ですので。
0059デフォルトの名無しさんNGNG
宿題スレに投げられた問題をやってみるとか。
0060デフォルトの名無しさんNGNG
>>58
>>57のリンク先にゆけ
0061デフォルトの名無しさんNGNG
1〜10の中でランダムに一つ選ぶってのは
どの関数を使うんですか?
記述を教えてください
0062デフォルトの名無しさんNGNG
>>61
rand()%10+1
0063デフォルトの名無しさんNGNG
>>58
なんのためにプログラミング勉強してるんだろ。
課題なんてやってないで、とっとと自分の好きなソフト作ればいいのに。
課題をとくのを目的にプログラムやってるのだろうか…
0064sageNGNG
n元一次方程式の解を求めるプログラムを作ってください
0065デフォルトの名無しさんNGNG
>>64
だれが作るか。
ボケが。
0066デフォルトの名無しさんNGNG
visual c++.netです
コンボボックスのドロップダウン型でドロップダウンした時の一番上の選択するやつのnIndex
って0ですよね・・・?そしたらドロップダウンしない普通の入力欄のnIndex
っていくつですか?−1でやるとエラーでちまうんですばい
0067デフォルトの名無しさんNGNG
多分すれ違い加茂
0068デフォルトの名無しさんNGNG
>>66
スレ違いですばい
1嫁ですばい
0069デフォルトの名無しさんNGNG
#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] );
  }
}

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

こんな感じですか?
0093デフォルトの名無しさんNGNG
>>92
そういうこと。
でもそれじゃコンパイル通らないと思うよ。
0094デフォルトの名無しさんNGNG
あっ、しまった。
0095_NGNG
http://kame.kakiko.com/hiroyuki/jaz_b01.html
0096デフォルトの名無しさんNGNG
>>92
stdlib.h入れろ。
宣言より前に関数呼ぶな。
0097デフォルトの名無しさんNGNG
おい!おまいらもすごろく作りに参加汁!
http://life2.2ch.net/test/read.cgi/offreg/1054655407/l50
ちなみにこれはコピペしてひろめてくれ。
0098デフォルトの名無しさんNGNG
#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");
}
}



0099デフォルトの名無しさんNGNG
さぁ、間違い探しをしよう(ぉぃ
0100デフォルトの名無しさんNGNG
int a;の場所。
0101デフォルトの名無しさんNGNG
たかがインデントなんだが・・・。
どうしてもきれいなソースにならない!!!
インデントについて詳しく書いてあるページない?
0102デフォルトの名無しさんNGNG
インデントがなくてみにくい

int mainなのにreturnしてない

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

a=getchar() int型に直ですか
0103デフォルトの名無しさんNGNG
a=='1'
0104デフォルトの名無しさんNGNG
scanfで取り込んだ整数の後ろに文字を表示させたいのですが、
自動改行されてしまって上手く表示することができません。
どうすればよいのでしょうか?
0105デフォルトの名無しさんNGNG
意味がわからない。
ソースきぼんぬ
0106デフォルトの名無しさんNGNG
>>102
getcharはintで受けるべきなのだが…
0107106NGNG
あ、ごめん、ボケてた。そのあと、if (a==1)なんてやってたな。
0108デフォルトの名無しさんNGNG
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;
0109デフォルトの名無しさんNGNG
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;
}
0110104NGNG
56です。
と表示させたいんです。

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

これだと、

56
です。

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

第一問の際に1問目の答えの20、続けて2問目の答えを入力すると2問目は正解と言われます。
続いて2問目が出てきますがこの時3問目の答えを答えないと3問目が不正解になります。
一つづつ問題と答えがずれてしまうんですが何故ですか?
5問目になると強制終了します
0112デフォルトの名無しさんNGNG
(^_^;)
0113デフォルトの名無しさんNGNG
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--と書いた方がよい。
0114デフォルトの名無しさんNGNG
>>110
printf("%dです。\n", n);
0115デフォルトの名無しさんNGNG
正解でも不正解でも a は変わらないのね。
0116デフォルトの名無しさんNGNG
>>115
1足した後に1引くからな(笑)
0117デフォルトの名無しさんNGNG
aを0から初めて、正解した数だけ足したら?
んで、最後に

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

ってすんのさ。
0118104NGNG
>>114
scanf関数の中はどんな形にすればいいんでしょうか。
0119108NGNG
どうもです。

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

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

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


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

そうとう大変だけど。

ズレるのはなんでだろうねぇ。
>>108と>>109の間が肝心なところなんだろうけどぶった切れてるからわからない。
今ではelseの登場によってソースも変わってるだろうし。
0125デフォルトの名無しさんNGNG
なんで a = 5 からスタートしてるん?
どういう考えか興味ある。
0126デフォルトの名無しさんNGNG
a5=英語のテスト
0127デフォルトの名無しさんNGNG
>>121
      ヽ ̄ ゙̄\
       \  ヽ \
         ヽ    ゙!
          /      |
       /     ,.イ
      ∠___/ :|`ヽ.、
          ノ     '!   \-、
     _,.=''1      ヽ,   `'
      ヽ'" i|       |
         !       |
         呼んだ〜?
0128デフォルトの名無しさんNGNG
#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);
0129デフォルトの名無しさんNGNG
////////////////////////////////////////////////////////////////
//  結果の出力                //
//////////////////////////////////////////////////////////////// 
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);
}
}
0130デフォルトの名無しさんNGNG
switch使いなよ。
0131デフォルトの名無しさんNGNG
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");
}
0132デフォルトの名無しさんNGNG
間違ってたら指摘してください。
課題で先生に
ifとfor文しか教えてないから他のは使うなといわれてます
0の時の判断もホントはしなくていいのですが
0133デフォルトの名無しさんNGNG
stdinにrewindって使えるの?
0134デフォルトの名無しさんNGNG
五則演算
0135デフォルトの名無しさんNGNG
rewindはしないといけないといわれまつた
0136デフォルトの名無しさんNGNG
全部==にしときな
0137デフォルトの名無しさんNGNG
そっちのほうが分かりやすいからでつか?       
0138デフォルトの名無しさんNGNG
というか、!= にするメリットってあるか?
0139デフォルトの名無しさんNGNG
演算子に変なの入れた時
0140デフォルトの名無しさんNGNG
>>139
elseでいいだろ
0141デフォルトの名無しさんNGNG
フローチャートも書かされてるんでif(c==+)if(c==-)if(c==*)とやってくと
縦に長くなり1枚に収まらないのでネストが一番かと
0142104NGNG
>>123
そうすると、
56
56です。

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

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

# your name
firstname=Taro
familyname=Yotsuya

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

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

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

どれでファイナルアゥンサー?
0151デフォルトの名無しさんNGNG
コーディングスタイルで質問です
switch のときに、

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

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

のように、 switch と case で段差をつける2通りがありますが、どちらのほうが一般的ですか?
0152デフォルトの名無しさんNGNG
俺は下
でもどっちでもコード見る時に大差はない
0153108NGNG
お早う

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

>121
thxです

>125
今思うと何ででしょうね・・・・
自分でも解りません
0154108NGNG
全文です>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");
}
0155108NGNG
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");
}
0156108NGNG
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;
}
0157デフォルトの名無しさんNGNG
qwertと5つも意味不明な名前の変数を設ける理由が判らない。
0158デフォルトの名無しさんNGNG
>>157
この変数を選んだ理由も知りたい(w

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

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

めんどいけど。
0161デフォルトの名無しさんNGNG
char *str = "HelloWorld";
と
char str[] = "HelloWorld";
の違いがわかりません。

どうなんですか?
0162YUISNGNG
ONLINE DVDSHOP YUIS
http://www.dvd-yuis.com/
豊富な品揃え!新品アダルトDVDが800円〜!
http://www.dvd-yuis.com/
最速発送!!すぐ届く!!
http://www.dvd-yuis.com/
よろしくね!!!
0163デフォルトの名無しさんNGNG
>>161
FAQだ。これを読め。
http://www.catnet.ne.jp/kouno/c_faq/c6.html#2
0164デフォルトの名無しさんNGNG
>>158
俺には分かるぞ!
喪前のキーボードのQから右に読んでみそ。







( ´A`)

0165デフォルトの名無しさんNGNG
Q J K X B M W V Z
0166デフォルトの名無しさんNGNG
>>163
ありがとうございます。

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

sizeof(str)だと4(ポインタのサイズ?)が返ってくるんで。。
0167無料動画直リンNGNG
http://homepage.mac.com/norika27/
0168デフォルトの名無しさんNGNG

あなたが探してるのってこれだよね?この中にあったよ♪
http://alink3.uic.to/user/angeler.html
http://angelers.free-city.net/page002.html
0169デフォルトの名無しさんNGNG
>>166
上ならポインタのサイズ、下なら配列のサイズ
0170デフォルトの名無しさんNGNG
>>164
俺のマシンのrootのパスワードだ ( ´A`)
最後にyがつくけど
0171デフォルトの名無しさんNGNG
>>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);
}
0172デフォルトの名無しさんNGNG
>>171
 だらけでみにくいぞ
0173172NGNG
あら・・・・
>>171
&nbspだらけでみにくいぞ
0174デフォルトの名無しさんNGNG
>>172
何が?
0175デフォルトの名無しさんNGNG
>>174
>>171が。charの前とかA"の前とか。ほかにもいろいろ。
0176デフォルトの名無しさんNGNG
#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);
}
0177デフォルトの名無しさんNGNG
nbspのあとにセミコロンがないから。
0178デフォルトの名無しさんNGNG
>153で教本?の最初の方までしか覚えてないっぽいからcharとか知らないんじゃない?
漏れダイテル本持ってないから解らんけど
0179デフォルトの名無しさんNGNG
>>164
それか!(w
そんな命名方法考え付くのに感心する。
0180デフォルトの名無しさんNGNG
今まで一人でプログラムを組んでた時は、統一性のない汚いソースでも別に良かったんですが
複数でプログラムを組むことになったので、読みやすい綺麗な書き方を見本にしたいので
参考になるサンプルソースないですか?
0181デフォルトの名無しさんNGNG
ないです。
0182デフォルトの名無しさんNGNG
>>180
*BSD をハックする。
0183デフォルトの名無しさんNGNG
>>180
2項演算子の左右は空白を空けろ
forやifにぶら下がる処理は必ず{}でブロック化しろ
{}をif()の横から始めたり下から始めたり場所によって違うのはやめろ
コンマやセミコロンでデータや式を列挙する場合は空白を空けろ
変数の命名法はある程度の指針を決めておけ
コメントはちゃんと書け
めしは上手く作れいつもきれいでいろ
0184デフォルトの名無しさんNGNG
>>180
設計をきちんとしる。コーディング規約つくれ。クロスレビューしる。
0185デフォルトの名無しさんNGNG
http://jbbs.shitaraba.com/computer/6765/
Cの初心者ならここに来るしかない!
質問、雑談何でもOK!
初歩的なことでももちろんOK!
もちろん、上級者の皆様にも来ていただきたいです。





0186デフォルトの名無しさんNGNG
http://member.nifty.ne.jp/yamazaki/doc/code_design/vol01.html

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

それはそれとしてなぜ「C言語 検定」でぐぐるくらいしないのか。
0192デフォルトの名無しさんNGNG
>>189
スマソ

>>190
C言語検定とやらがあったと思う。名前が違うかもしれないけど。
0193デフォルトの名無しさんNGNG
http://www.sikaku.gr.jp/main.html

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

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

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

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

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

でもC言語の勉強にはならないな。
0217デフォルトの名無しさんNGNG
qsortはあるのにbsearchがない・・・abortもないよぉ。
0218デフォルトの名無しさんNGNG
>>217
作り甲斐があるねw
0219デフォルトの名無しさんNGNG
よくわからんが、UNIX系のマシン1台あれば勉強できるような気もするが。
telnetしてvi(なんでもいいけど)してcc(gcc)で十分だろ。
0220デフォルトの名無しさんNGNG
>>183
できる範囲で構わないんだな
0221デフォルトの名無しさんNGNG
char *argv[]とchar **argvを違うものとするのか・・・・
0222183NGNG
>>220
ああ、忘れてくれるな。
0223デフォルトの名無しさんNGNG
>>222
ま、ちょっと覚悟はしておけ。
0224335NGNG
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

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

main()
{
  line10:printf("%d\n", rand() % 10);
  line20:goto line10;
  return 0;
}
0235デフォルトの名無しさんNGNG
>234
せめてforかwhileで回してよ…
0236デフォルトの名無しさんNGNG
店頭のMSXマッスィーンを思い出す…goto
0237183NGNG
>>235
わかるやつにはわかるんだよ。>>236とかな(w
0238デフォルトの名無しさんNGNG
>>237
ええとしですなw
0239デフォルトの名無しさんNGNG
文字列の中の例えば!〜〜!の間の文字を抜き出すには
どの関数使えばいいですか?
0240デフォルトの名無しさんNGNG
>>239
strtok
0241デフォルトの名無しさんNGNG
文字列の中の例えば!〜〜!の間の文字を抜き出すには
どの関数使えばいいですか?
0242デフォルトの名無しさんNGNG
>>241
strtok
0243デフォルトの名無しさんNGNG
forかなんかで自分で書け
javaでもそんなメソッドないぞ!
0244デフォルトの名無しさんNGNG
>>241
strtok
0245デフォルトの名無しさんNGNG
ありがとうございます。
簡単な記述例をおねがいできないでしょうか?
0246デフォルトの名無しさんNGNG
>>239
strtok
0247デフォルトの名無しさんNGNG
>237
わからんにゃー。MSXに触ったことにゃーし
0248デフォルトの名無しさんNGNG
べつに分かったからって何の意味もない。
そんなもんで威張っている奴が居たらバカ。
0249デフォルトの名無しさんNGNG
>>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
0250デフォルトの名無しさんNGNG
ありがとうございます。
参考にさせていただきます。
0251デフォルトの名無しさんNGNG
CでXMLのデータを取り出す作業に詳しい人
教えてください。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1055071590
どうすれば 表示できるようになりますか?
0252デフォルトの名無しさんNGNG
>>250
ちなみに二文字以上の文字列で区切ろうとする場合にはstrtokは勧められないので注意を。
第二引数のそれぞれの文字で区切ろうとするからね。
0253デフォルトの名無しさんNGNG
こんなのできたっち
#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;
}
0254名無し@沢村NGNG
sprintf("ある晩、二人の男が風呂に入った。
一人がもう一人のちんぽを見た。
そいつのちんぽはドス黒かった。使い古した後がうかがえた。
「おまえ、ずいぶん女を泣かせただろ?」
「いや、おれはまだ童貞だ」
そいつのちんぽはせんずりで使い古したのだった。 ");
0255デフォルトの名無しさんNGNG
>>253
ここはCスレだYO
0256デフォルトの名無しさんNGNG
CStringの文字をchar型に代入したいんですがうまくいかないです
char a;
CString b;
a = (LPCTSTR)b;
どこが悪いっすか?
0257デフォルトの名無しさんNGNG
スレ違い・・・・
Stringなのにcharに代入できるの?
0258デフォルトの名無しさんNGNG
間違えた
char a[200];
CString b = "aiueo";
a = (LPCTSTR)b;

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

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

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

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

まぁ、よりひどいのを作られても困るので一応何とかする方法を。
csource の型を const char* に変更して
(ついでに cbuffer の型を char* に変更して)、
 sprintf(ctemp, "%%%02X", *(csource + lcount));
を
 sprintf(ctemp, "%%%02X", (unsigned char)*(csource + lcount));
に変更してやれば、
csource へ CString オブジェクトをそのまま渡せるはず。
0282デフォルトの名無しさんNGNG
>>277
ダメソースの見本だな。
0283デフォルトの名無しさんNGNG
URLエンコードってもっと単純なはずだよね?
英数字とスペースと_-.*以外を%+二文字の16進数字列にして、スペースを+におきかえるだけだよね?
0284デフォルトの名無しさんNGNG
マジでサンクスです!
すれ違いの馬鹿野郎にまじでどうもです。
早速ためすぞこらー
0285デフォルトの名無しさんNGNG
エラー大量産出。。。
CのコードC++に書き換えなきゃだめかぁ。
>>276
で言ってた方法とは??
0286デフォルトの名無しさんNGNG
XMLのデータを取り出す方法に詳しい人おしえてくれー
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1055071590
Cでやってるから ここでいいっしょ?
0287デフォルトの名無しさんNGNG
>>285
自分でエンコードするためのコードを書くんだと思っていたから。
どうやら>>276の二行目みたいだから>>276は忘れて。
0288デフォルトの名無しさんNGNG
了解です。これ以上スレ違いも痛いんで他スレに行きます。。
どもでした!
0289デフォルトの名無しさんNGNG
>>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 == ' ') {
0290デフォルトの名無しさんNGNG
   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';
}
0291デフォルトの名無しさんNGNG
>>277
ロジックそのままでいいから、CStringかstringをつかって書き直したほうがいいな。
0292デフォルトの名無しさんNGNG
わ。。
ちょっくら試してみます!今度こそうまくいけぇ〜
0293デフォルトの名無しさんNGNG
sprintfって便利だよなぁ。
0294デフォルトの名無しさんNGNG
ビルドエラータスク100件越えますた・・・
Unicode識別子はサポートされないエラーが大量発生です。
環境はVS.NETです。
0295デフォルトの名無しさんNGNG
>>294
全角スペースを半角スペースに置き換えた?
0296デフォルトの名無しさんNGNG
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
全角空白を半角空白かタブにでも置換してから使うように。
0297デフォルトの名無しさんNGNG
もうまじ馬鹿と言って下さい
あぁもう自分が嫌
0298デフォルトの名無しさんNGNG
286ですが
やっぱりだめですか?
0299デフォルトの名無しさんNGNG
>>298
んーと、parse 目的なの〜?
Windows なの〜?

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

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

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

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

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

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

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

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

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

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

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

あと、プロトタイプがあれば、別にキャストしなくても
ポインタでさえあれば何でも渡せるぞ。
0370デフォルトの名無しさんNGNG
誰かポインタをキャストしなければいけないと言ったか?
0371370NGNG
void *に大してintやcharを渡せるのか・・・・警告は出るけど。
じゃあ>>363へか。
0372デフォルトの名無しさんNGNG
なんかどっかにvoid *の扱いはCとC++で違うってのが書いてたな。
コンパイラの違いだったかな
0373デフォルトの名無しさんNGNG
>>372
void *を他のポインタに代入するときのことだと思う。
char *p=(void *)0;とやるとC++ではエラー。だからmallocの戻り値も
0374373NGNG
キャストする必要がある。
0375369NGNG
あ、ごめんよ。void*にintとかを渡すって書いてあったな。
int *とか*がついてるもんだと思ってた。
そんな非常識なことはありえないと思って勝手に補完して読んでたらしい。
すまんすまん。確かにキャストが必要です。
0376デフォルトの名無しさんNGNG
>>368
gccか?
たしかgccではvoid *に対する演算が可能なように拡張されてるけど。
0377デフォルトの名無しさんNGNG
int int377[377];
0378デフォルトの名無しさんNGNG
c言語でπを求めたいのですが、いちばん簡単なプログラムは
どうやって書くか教えてください!!
0379デフォルトの名無しさんNGNG
>>378
数学の勉強しる!
0380デフォルトの名無しさんNGNG
>>378
double pi = acos(-1);
0381デフォルトの名無しさんNGNG
一万桁まで求めたいです…
0382デフォルトの名無しさんNGNG
>>381
電気通信大学の方ですか?
0383デフォルトの名無しさんNGNG
>>378
http://3.141592653589793238462643383279502884197169399375105820974944592.jp/

ここをダウンロードして表示する
0384デフォルトの名無しさんNGNG
>>378
少しは調べれ!
http://hp.vector.co.jp/authors/VA014765/pi/
0385デフォルトの名無しさんNGNG
>383
それが(・∀・)イイ!
0386デフォルトの名無しさんNGNG
円周率で思い出したけどC++のint画型だけ大きさがCPUのビットを同じ記憶空間を
とるんだよね!最近のは32bitだから4バイトだけと16bit機は2バイトになる事
知らなくて大変な思いをしましたね。C++はCの要領でプログラムするやつ多いから
カプセル化していないのがいけないといったら、先輩に人のせいにするなと
怒られた。昔からずっと人のせいにするやつなんだよね俺!!!
0387デフォルトの名無しさんNGNG
独り言age
0388デフォルトの名無しさんNGNG
スレ違いなだけじゃなくて、意味も不明だな。
0389デフォルトの名無しさんNGNG
>>386
32 ビット機が出てすぐの頃、
というか MS-DOS の時代には
殆ど 16 ビットエミュレーションで動いてたので
int は 16 ビットが普通だったな。
今でも LSI-C 試食版は 16 ビットだな。

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

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

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

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

64bitが必要ならlonglongで宣言してるだろうし
longlongの処理を64bitCPU用に最適に
(1レジスタで処理するように)コンパイルできていれば
それで64bitコンパイラの役目は果たしているともいえるかも
0404デフォルトの名無しさんNGNG
>>402
int幅が変わると調整に手間がかかりそうですね
実装によってはライブラリの書き直しとか
テストもしないといけないだろうし
0405デフォルトの名無しさんNGNG
そんな後先考えない実装はしないと思うよ。
0406デフォルトの名無しさんNGNG
>>403
仮に int が 64 Bit になれば、
long は 64 Bit 以上になる。
long long は(ry
0407デフォルトの名無しさんNGNG
>>406
long >= int >= short
0408デフォルトの名無しさんNGNG
>>397
できますた。
サンクスコ。
0409デフォルトの名無しさんNGNG
>>407
何を指摘したい?
0410デフォルトの名無しさんNGNG
http://www.zork.org/safestr/safestr.html
http://www.zork.org/xxl/xxl.html

使ってる奴いる?
0411350NGNG
>>409
longのサイズは必ずしもintより大きくなければならないわけではないってことじゃないの?
0412デフォルトの名無しさんNGNG
う、
>>411のネームランは無視してくれ、このスレでの番号じゃない。
0413デフォルトの名無しさんNGNG
>>411
以上=「>=」
より大きい=「>」
0414デフォルトの名無しさんNGNG
>>411
以上という言葉の意味を辞書で引け。
0415デフォルトの名無しさんNGNG
なんで日本語って「>」に対応する単語が無いんだろう?
未満と以下は存在するのに...日本語の言語仕様のバグ?
0416デフォルトの名無しさんNGNG
超過?
ちがうか・・・
0417デフォルトの名無しさんNGNG
より大きいすごく大きいもっと大きい超大きいすんげぇ大きいぼっけぇ大きい
0418デフォルトの名無しさんNGNG
http://dictionary.goo.ne.jp/search.php?MT=%C4%B6%B2%E1&kind=jn&mode=0&base=1&row=0

超過でいいみたい
0419デフォルトの名無しさんNGNG
ほう、ちょーか
0420デフォルトの名無しさんNGNG
>>415
英語にゃ「以上」や「以下」が無いがな。
0421デフォルトの名無しさんNGNG
大なり小なり
0422デフォルトの名無しさんNGNG
とりあえず「より大きい」といっとけば。単語じゃないけど。
0423デフォルトの名無しさんNGNG
>>419 ワラタ
0424デフォルトの名無しさんNGNG
void (*signal( int sig, void (*func) (int)))(int);
この宣言文が一向に解読できない
signal is function 〜謎〜 returning void
誰か教えれ
0425C語初心者NGNG
初めまして。今日からC言語始めようと思ってます。
んで、学ぶにあたって勉強するのにいい初心者用のわかりやすいC言語の本とかありますか?
あったら情報教えてください。よろしくお願いします
0426デフォルトの名無しさんNGNG
>>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);
0427デフォルトの名無しさんNGNG
>>425
この板の一番上、ローカルルールの書いてあるあたりを参照。
「推薦図書・必読書スレ」へのリンクがある。
0428デフォルトの名無しさんNGNG
>>426
サンクス、よく分かった。あんた神
signalは戻り値が関数へのポインタで
引数にint型変数と関数へのポインタをとる
関数ということね・・・ややこしすぎ
0429C語初心者NGNG
>>427
ありがとです
0430C語初心者 NGNG
誰か暇な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をお願いします。
0431C語初心者NGNG
すいませんスレ間違えました。
04321NGNG
ポインタについていまいち理解できません。
オススメの解説ページみたいなのありますか?
0433デフォルトの名無しさんNGNG
>1
0434デフォルトの名無しさんNGNG
sighandler_tってのはGNUの拡張か。標準規格でも分かりやすいようにtypedefしておけばよかったのに。
0435デフォルトの名無しさんNGNG
signal()の戻り値=第2引数のシグナルハンドラへのポインタ
でいいんすか?
0436デフォルトの名無しさんNGNG
>>430
基本情報処理の試験13年の秋か春に載ってるよ!
最近のC問題は迷路やもぐらたたきなどが出てくるようになった。
そろそろ「ねた」切れか?
0437デフォルトの名無しさんNGNG
int main(void){
char *a = "ABCDE";
char *b = "FGHIJK";

strcat(a, b);

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

これで実行時、エラーが出ちゃいます。
コンパイルは通るのですが・・・
0438デフォルトの名無しさんNGNG
>>437
ネタ決定

char *a = "ABCDE";をchar a[123456] = "ABCDE";に
0439デフォルトの名無しさんNGNG
>>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);
}
で確認してみな!
0440デフォルトの名無しさんNGNG
>>439
あんまりなネタだな…。
0441デフォルトの名無しさんNGNG
先生、VC7のlimits.hで
#define INT_MIN -2147483648
ではなく
#define INT_MIN (-2147483647 - 1)
って書いてあるのはなぜですか?
0442デフォルトの名無しさんNGNG
>>441
なんでだろうね。
負は正にくらべて範囲が一つ大きいですよって強調してるのかな?
0443デフォルトの名無しさんNGNG
・はじめは-2147483647と定義していた
・でもそれが間違いだと判明した
・修正担当者は引き算ができなくて、泣きながら-1を追加した

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

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

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

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

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


0458456NGNG
>>457
まさかおれに言ってるのか?
0459デフォルトの名無しさんNGNG
>458
そうなんじゃないの?
0460451NGNG
ヒント:
予想される関数
main
InputformConsole
CheckValid
CheckString
StroreNums
Sort
Sort_quicksort
Search
Search_tree

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

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

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

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

…以上。
>>451の通りに書いたので、無限ループです。
探索ってのはなにが起きた時にすればいいのかわからん。
0483デフォルトの名無しさんNGNG
インフィニットループの方がいいな。
0484デフォルトの名無しさんNGNG
無限循環のほうがいいな。
0485デフォルトの名無しさんNGNG
俺は思うんだが、文字列を整形することなく標準出力に表示する場合もprintfが使われることが多いな。
putsか、最後に改行しないならfputsを使うほうが、無駄が無くていいと思うんだが。
0486デフォルトの名無しさんNGNG
>>485
printfがあるとCらしくてイイ!
0487デフォルトの名無しさんNGNG
まあputsやfputsは%をそのまま書けるという利点はあるけど。。。
0488デフォルトの名無しさんNGNG
他スレからの転載です。教えて下さい
----
int foo ();
みたいに、引数を省略した場合って(int)になるんだよね?
この挙動って最新のC99で変わってる?
0489デフォルトの名無しさんNGNG
voidだろ?
0490デフォルトの名無しさんNGNG
>>488
つい最近その質問と答えを見た気がするんだが。
それともマルチか荒らしか?
0491デフォルトの名無しさんNGNG
>>488
引数チェック無し
0492デフォルトの名無しさんNGNG
>>490
だから転載って書いてあんじゃん
0493デフォルトの名無しさんNGNG
>>489
C++だったらね
0494Not 490NGNG
>>492
レスに解答があったはずだが。
0495デフォルトの名無しさんNGNG
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%
0496デフォルトの名無しさんNGNG
>>494
本当にアレで正しいのか気になったから
0497デフォルトの名無しさんNGNG
>>496
試そうという気はないの?
0498デフォルトの名無しさんNGNG
>>496
レスを受け入れられないなら質問するなボケ
0499デフォルトの名無しさんNGNG
>>496
ここでも同じ奴が答えるという可能性は、微塵も思い浮かばなかなったのか?
0500デフォルトの名無しさんNGNG
つーか、最初からそう書けばいいのだよ。<正しいのか気になった
0501デフォルトの名無しさんNGNG
>>499
住人てあっちとこっちで結構重なってるよねえ。
特に答える側は。
0502デフォルトの名無しさんNGNG
switch文でcaseごとに変数に代入する値を代えることはできるんでしょうか?もしできるのでしたらその方法をお教えください。
0503デフォルトの名無しさんNGNG
意味がわからん
0504デフォルトの名無しさんNGNG
>>502
例えばこう言うことかな?
switch (value) {
 case 0:
  var = 3;
  break;
 case 1:
  var = 2;
  break;
 default:
  var = 0;
  break;
}
私ならテーブルにしちゃうけど。
0505デフォルトの名無しさんNGNG
ですがなにか?
0506デフォルトの名無しさんNGNG
Cのプログラム実行時間を計るのには、どうしたらいいですか??
0507デフォルトの名無しさんNGNG
int table[3] = {3,2,0};

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

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

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

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

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

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

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

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

q = p;
r = q;

といううっかりミスを防止するため。
0519デフォルトの名無しさんNGNG
>>516
C だと必要ないが、C++ だと必要、というのが定番の答え。
0520デフォルトの名無しさんNGNG
>>518
それがキャストの有無とどう関係ある?
0521512NGNG
>>515

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

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

昔のBSD系が free(char*) で、
SYSTEM V系が free(void*) だったのだ。
んでANSIで free(void*) に統一される。
0526デフォルトの名無しさんNGNG
#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(・・・){、でやってみても実行結果は変わりません。
やはり何か理由があるのでしょうか?
ちなみに望洋本の例題です。
0527526NGNG
あ、//Aってのは無視してください・・・
0528デフォルトの名無しさんNGNG
>>526
標準ライブラリのstrcpyと同じものにしたいからだろ。
0529526NGNG
>>528
なるほど、調べてみたら確かに一緒でした。
ありがとうございました!
0530デフォルトの名無しさんNGNG
>>526
それは標準ライブラリのstrcpyがそうしているから、それに習ったんだと思われ。

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

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

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

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

という風にもかける。
0531デフォルトの名無しさんNGNG
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);
0532デフォルトの名無しさんNGNG
>>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 だにょ

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

char a[1234];
char *s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
char *p = s;
while(strcpy(a,p++)[0]){printf("%s\n",a);}
0537デフォルトの名無しさんNGNG
違和感のない言語があるのか?
0538デフォルトの名無しさんNGNG
CScreenを使って
→

→→

→→→

→→→→
と一個ずつ増えるようにするにはどうすんの?
0539デフォルトの名無しさんNGNG
>>538
何故スレ違いだと思わない?
0540デフォルトの名無しさんNGNG
int map[10000][10000];

これやるとコンパイル通らないんだけどなんで?
0541デフォルトの名無しさんNGNG
>>540
エラーやワーニングくらいよめ。
0542デフォルトの名無しさんNGNG
( ´_ゝ`)∂あぷろだあるから チョットこいや…
http://homepage3.nifty.com/coco-nut/
0543デフォルトの名無しさんNGNG
a>>3
0544デフォルトの名無しさんNGNG
>>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)

エラー読んでもわからないよ。
0545デフォルトの名無しさんNGNG
>>544
不親切なコンパイラだな。何使ってるの?

ちなみに >>540 は「スタック領域のサイズ」について
調べてみなされ。
0546デフォルトの名無しさんNGNG
>>540
400MBものスタックを使える環境を用意しる。
0547540NGNG
>>545
bcc

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

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

map と書いてあるので RPG のマップのようなものだと考えると、
いくつかのブロックに分割して、
現在地近くのデータのみをメモリ上に置くようにする。
0550デフォルトの名無しさんNGNG
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回目のシグナルを受信しないんですが
教えてくらはい
0551デフォルトの名無しさんNGNG
>>550
スレ違い。
ついでに情報不足。
0552デフォルトの名無しさんNGNG
sigaction >>>>>(こえられない壁)>>>>> signal
0553デフォルトの名無しさんNGNG
cってベッドインだっけ
0554デフォルトの名無しさんNGNG
>>551
一回シグナルを受信して定義した関数にジャンプすると
2回目からから引数のハンドラへのポインタが自動的に
signal( SIGINT , SIG_DFL ) に再設定されてしまうつーことなんすかね?
0555デフォルトの名無しさんNGNG
>>551を読んで、なぜ>>554のような質問を>>551にしたのか、私には不思議でならない。
0556デフォルトの名無しさんNGNG
2から数えて100万番目の素数を出来るだけ早く計算するプログラムを作りたいのですが、
どういう方法が一番早く計算できますか?
0557デフォルトの名無しさんNGNG
>>556
スレ違い

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

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

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

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

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 まで処理させたい場合、
どのようなコードを書くのが一般的なんでしょうか。
0573デフォルトの名無しさんNGNG
int i;
for(i=0; i<10; i++)
  printf("%f", 2.0+i/10.0);
0574デフォルトの名無しさんNGNG
>>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;
 }
}

よろしく御願いします。
0575デフォルトの名無しさんNGNG
int n = (c - a) / b;
for (i = 0; i <= n; ++i) {
printf("a = %f\n", a + b * i);
}
0576デフォルトの名無しさんNGNG
floatは使うな。
0577デフォルトの名無しさんNGNG
浮動小数点を使って ==, != という判定はしないのが普通。
0578デフォルトの名無しさんNGNG
いや、御法度
0579デフォルトの名無しさんNGNG
回答期待age
0580572NGNG
お答えくださった方々、ありがとうございました。
とりあえず今回は、四捨五入で数値(変数a)を補正していくという方法で解決させました。
色々やったせいで、40行程のソースが80行程まで膨れ上がってしまいましたが(汗)
0581451NGNG
こっちが折角温情かけてやってるのに(w
要求仕様が決まってない分は,何も突っ込まずに作ったほうが楽だってことを,
身をもって体験したいとは見上げた根性のコザルだな(w
0582デフォルトの名無しさんNGNG
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)
0583デフォルトの名無しさんNGNG
>>582
Nが1ならな。でも1ってことはないと思うよ。
0584デフォルトの名無しさんNGNG
なぜ?
別に定数でないといけないということもないと思うけど。
0585デフォルトの名無しさんNGNG
>>582
> 0からN-1までの数を返そうとする

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

>>590
意味がないので(そういうことするのは)間違いだといったの。
0593デフォルトの名無しさんNGNG
>>582のリンク先はNが定数として書いたんだと思うけどね。
でなければあんなまずいコードをC FAQに載せたりしないでしょ。
0594デフォルトの名無しさんNGNG
>>592
U付けるだけで何も問題ないのに、何故そんなに必死なんですか?
0595デフォルトの名無しさんNGNG
0 しか結果としてでてこないもののどこが乱数なのだろうか?
0596デフォルトの名無しさんNGNG
>>594
UつければNが0の時も問題が起きないんでしょうか。
0597デフォルトの名無しさんNGNG
>>596
今はN=1の話をしてるのに、なんで必死にN=0の話にすり替えようとするの?
0598デフォルトの名無しさんNGNG
命令の配列みたいなものを作りたいのですが、どうすればよろしいでしょうか。
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};
みたいなことをしたいのですが。
どうやらコールバック関数なるものを使うとうまくいきそうな
きもするのですが、よくわからないのです。

よろしくお願いします。
0599デフォルトの名無しさんNGNG
>>597
「何も問題がない」というからでしょ。そもそもNが定数とは限らないなんて言い出すことが(以下略
0600デフォルトの名無しさんNGNG
>>598
int (*Getlist[])()={Get1,Get2,Get3};
こうかな。
0601600NGNG
あと、list[i] = GetList[i]();
0602デフォルトの名無しさんNGNG
600さん、ありがとうございます。
うまくいきそうなので実装してみます
0603600NGNG
>>602
int (*Getlist[])(void)={Get1,Get2,Get3};にしておいて。
でないと多分int Get4(int,char *)でも入れられてしまうと思うから
0604デフォルトの名無しさんNGNG
if(N>=2)とかif(N<=1)とするのが面倒?
0605デフォルトの名無しさんNGNG
>>604
じゃ、x/y とか x%y の計算をする場合、
y=1 の時は計算しなくても答がわかるからって別の処理にする?
0606デフォルトの名無しさんNGNG
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 };
こうやるんですか?でもそうすると、宣言以降は
引数を変更できないですよね。
0607デフォルトの名無しさんNGNG
>>606]
Getlist[i]が関数名だと思って使えばいい。
引数を与えたいなら通常の関数と同じようにGetlist[i](3)とかGetlist[1](n)とする。
0608607NGNG
>>606
> int (*Getlist[])(void)={ GetInt,GetInt,GetInt };

voidじゃ引数がintのGetIntは入れられないって。その場合はint (*Getlist[])(int)={ GetInt,GetInt,GetInt };とする
0609デフォルトの名無しさんNGNG
typedef int (*GetInt_t)(int);

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

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

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

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

だめぽ?専門1年!先生が載ってないがrand教えたから、少し安心
0615デフォルトの名無しさんNGNG
>>613
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.8.2.html
0616デフォルトの名無しさんNGNG
CScreenを使って
→

→→

→→→

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

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

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

0623デフォルトの名無しさんNGNG
揚げてまで粘着線せんでもいいだろう
0624デフォルトの名無しさんNGNG
typedef int GetInt_t(int);
GetInt_t* Getlist[]={GetInt,GetInt,GetInt};

これってイクナイ?
0625デフォルトの名無しさんNGNG
関数ポインタは
***********************func();
とか書いても大丈夫
0626デフォルトの名無しさんNGNG
これもな
(*********************printf)("ok");
0627デフォルトの名無しさんNGNG
ごるぁ♪>(^o^*)
0628デフォルトの名無しさんNGNG
>>625
それはちっとも大丈夫じゃないぞ。
***********************(func());
と同値だぞ。
0629デフォルトの名無しさんNGNG
doubleで定義した変数a、bがあって
if(a==b){
・
・
・
}
てしたいんだけど、小数第二位までを比べる方法ってありますか?例えば
a=1.23456
b=1.23789
でもifの中が実行されるように。
0630デフォルトの名無しさんNGNG
if (fabs(a - b) < 0.01) {
0631デフォルトの名無しさんNGNG
>>630
a=1.23456
b=1.24000
0632デフォルトの名無しさんNGNG
>>629
100倍して小数部を切り捨てるというのは?
0633デフォルトの名無しさんNGNG
漏れはCを始めて間もないです。独習Cを使ってます。
で、分からなくなったのですが、return 0;やreturn n; 、
return 10;などの解釈の仕方が分かりません。
どなたか説明してもらえないでしょうか?
0634デフォルトの名無しさんNGNG
>1
0635デフォルトの名無しさんNGNG
ところでどうしてC言語には
文字列型とクラスとガーベッジコレクションがないの?
0636デフォルトの名無しさんNGNG
文字列型 あるじゃん
クラス 言語が古いから        
ガーベッジコレクション 必要ない
0637デフォルトの名無しさんNGNG
>>633
がんがれ厨房よ
0638デフォルトの名無しさんNGNG
http://jbbs.shitaraba.com/computer/6765/
めっちゃ宣伝 
0639デフォルトの名無しさんNGNG
>>636
古いからねえw C99はどうする?
「ある言語」とCの差異をひとからげに欠点にしたがる
ゆんゆんピープルがこの時期は多いよな。
0640デフォルトの名無しさんNGNG
>>633
'return' は予約語です。その働きは決まっています。
「return;」あるいは「return なんとか;」と使って
教科書どおりの働きなんですが...。
慣れるまでしばし鵜呑みにするのもひとつの手ではあります。
0641633NGNG
教科書どおりの働きですか。
OSにプログラムを無事に終了することを伝えるってことですか?
普通のプログラムでは何も知らずにretorn 0;を使っていたのですが、
突然「return なんとか;」がでてきて焦ってしまいました
0642デフォルトの名無しさんNGNG
>>633
returnは値を返すって意味でいいんじゃない?
メイン関数終了時のreturn 0またはreturnはプログラムが
正常に終了したぜって意味だし。エラーは1だっけ。
うろ覚えですまん
0643デフォルトの名無しさんNGNG
>>641
returnの後ろなんて呼び出したところになんか返すんだから
自分で書いてる関数なんかは自分で決めるもんだろ?
return 0;ばかりで事足りてたならreturn;で十分だろ?
実際のOSだとreturnでエラーとか直接返すことなんてありえないぞ
本なんかの説明での論理的なOSだと値を返せたりするみたいだけど
return 0;しか知らないということはexternでグローバルな変数ばかり確保してるって事か・・・
0644デフォルトの名無しさんNGNG
>>636
> 文字列型 あるじゃん
ありません。

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

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

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

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

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


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

こういう意味不明で自分勝手な言葉遣いする新人がよくいるが
本当につかれる…。
0654デフォルトの名無しさんNGNG
はよ言えやー
0655654NGNG
誤爆スマソ
0656デフォルトの名無しさんNGNG
このスレ圧縮すると1/58くらいは小さくなりそうな気がする。
0657lz5NGNG
圧縮前 圧縮後 圧縮率
136824 . 43099   31%
0658デフォルトの名無しさんNGNG
#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日目です。参考にしたいのでおかしいとこがあれば教えてください。
0659デフォルトの名無しさんNGNG
>>658
もっと改行しろ
0660デフォルトの名無しさんNGNG
せめてまともに動くものをみせろよ
0661デフォルトの名無しさんNGNG
num2をscanfする際、&がついてないぞ。
0662デフォルトの名無しさんNGNG
はい、どこがダメなのか分からないんです。
0663デフォルトの名無しさんNGNG
0による初期化は必要ないのでは。
0664デフォルトの名無しさんNGNG
はぁ!?
の出方が確率的だな
0665デフォルトの名無しさんNGNG
まぁ必要はないが、初期化する習慣をつけるのは悪いことじゃない。
0666デフォルトの名無しさんNGNG
int mainならちゃんとreturn 0;
0667デフォルトの名無しさんNGNG
return getchar();
0668デフォルトの名無しさんNGNG
>>663
グローバル変数は自動で0もしくはNULLに初期化されますが、ローカル変数は
初期化されません。main関数も例外ではありませんので初期化が必要です。
0669デフォルトの名無しさんNGNG
>int num1=0,num2=0,a;
初期化しなくてもいい気がするが、するならするでaもしてやれ。一貫性を持たせよう

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

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

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

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

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

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

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

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

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

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


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

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

これで警告が出るのですが、どのように直せば、警告が消えるのでしょうか?
0726デフォルトの名無しさんNGNG
よくわからんが定数にU付ければいいんじゃない?1Uとか
0727デフォルトの名無しさんNGNG
(void)func(c);
return 0;
0728デフォルトの名無しさんNGNG
int func(unsigned c){ return 1;}
0729デフォルトの名無しさんNGNG
どんな警告か書いて
0730デフォルトの名無しさんNGNG
main からの return 0; がない。
0731725NGNG
>>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;
}
こうでした。
0732デフォルトの名無しさんNGNG
関数は値をかえすべき(関数 main) って警告が出ます。なぜですか?

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

void main(){
}

とコーディングするか、


int main(){

return 0;
}

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


でも(´・ω・`)ワカラン・・・
0741デフォルトの名無しさんNGNG
ポインターのポインターから作った二次元配列の初期化が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));

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

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

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

だと思うけど
0749デフォルトの名無しさんNGNG
>>745
ワラタ。おれ、744を見て「え? そうだったっけ?」って小一時間(うそ、小一秒間)、
コードを読み返しちゃったよw

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

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

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

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

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

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

replace関数内でchar *str=s1;とやってstrをいじらずにreturn str;とすればOKなはずだよ。
0756755NGNG
ん?strは配列でそこにコピーするのか?
それならstatic char str[SIZE];とすればいいんだけど・・・・
0757デフォルトの名無しさんNGNG
>>752
1 s1を直接書き換える
2 staticで用意してやる
3 char *replace ( char *dst, char *s1, char *s2, char *s3 ) ;
  の様に、もう1つ増やしてdstに格納する
4 malloc()でstrのメモリを確保してやる
後は、自分が習った範囲で好きな方法で (かなり進められない方法もあるが)
0758754NGNG
>>756
うん。まあそうすれば一応解決は解決だけど使いづらい関数になるなw
0759750NGNG
なんかいろいろいじってたらできちゃいました。ごめんなさい(´・ω・`)
ちなみにmain関数はこうなってます。
main(){
char *p;
p=replace("tracter","act","imot");
while(*p!='\0'){
printf("%c",*p);
p++;
}
printf("\n");
}
でもポインタがよく分からないのでなんで出来たかもわかってません。
0760デフォルトの名無しさんNGNG
>while(*p!='\0'){
>printf("%c",*p);
>p++;
>}
>printf("\n");
嫌がらせ?
0761755NGNG
昔作ったやつ。多分処理は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;
}
0762750NGNG
>>760さん
嫌がらせなんでしょうか……
>>755さん
知らない文字がいっぱいです(´・ω・`)理解すらできません。
肝心なことを忘れてましたが、ライブラリ関数で使っていいのは
mallocだけだそうです。
0763754NGNG
>>761
文字列の置換て、溢れる可能性があるからディスティネーションの
サイズに気を使うから結構面倒だよね。
サイズが与えられない関数だったらstrlenの長さまでしか置換できないし。
0764デフォルトの名無しさんNGNG
>>762
malloc()を使うのならfree()は忘れずに
0765デフォルトの名無しさんNGNG
>>762
それを早くいってよ。
mallocで確保した領域に置換後の文字列を入れればいいの。
ただ、確保する量を考えるときにちょっと面倒かも。
s2の長さがs3の長さと同じか長ければs1分とればいいんだけど、s3の方がs2より長い場合は計算する必要がある。
s1の長さ+(s1に含まれるs2の数*s2とs3の長さの差)+1 これでOKだと思う。
0766デフォルトの名無しさんNGNG
>>763
そうなのよ。
>>761はstrcpyみたいにかまわず書き込むタイプだから、置換後に長くなる場合は使用者がきちんと領域を確保していないといけない(^_^;)
0767765NGNG
勝手にマッチした文字列を全て置き換えると思ってしまったけど、
もしかして置き換えるのは一個だけでよい?>>762
0768デフォルトの名無しさんNGNG
質問です
C(VCやC++じゃない初期のC)で時計のプログラムを組むという初歩の
プログラムをやってるんですがOSがwindows2000でエスケープシーケンスが使えません
この場合解決策はありますでしょうか?
0769750NGNG
>>765さん
ごめんなさい。ただ置換する文字列が複数個あったらその都度
置き換えるので、二個以上だと足りなくなるような……。
mallocで領域を増やせるのでしょうか。
というか宿題スレ別にあったのですね。すいませんでした〜
0770デフォルトの名無しさんNGNG
>>768
Win2000Proじゃ入っていないと思うけど、telnetサーバ立ち上げてTeraTermから。
0771デフォルトの名無しさんNGNG
>>769
領域はreallocで増やせるけど、先に計算して確保した方がいいと思うけどなぁ。
0772デフォルトの名無しさんNGNG
>>771
つか、mallocしか使っちゃダメとかいうんで、
今、自分でstrlenとかstrstrとか実装してたりするw
0773デフォルトの名無しさんNGNG
>>768
一応スレ違い。

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

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

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

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


    ∧_∧       ∧_∧
    ( ・∀・ )gets!   ( ・∀・ )gets!
    (σ   ,,σ      (σ   ,,σ
     (_,,l⌒l        (_,,l⌒l
      (_)        (_)
0785デフォルトの名無しさんNGNG
>>783
えらい昔のに反応するね。
getchar の返す値は EOF + 0〜255 だから
int じゃないと表現できない。
0786デフォルトの名無しさんNGNG
>>785
×EOF + 0〜255
○EOFとunsigned charが取り得る全ての値
0787Cマガ、日系ソフトに続く第3の本でないかな・・・NGNG
>>785
読み返し中
0788デフォルトの名無しさんNGNG
質問させて下さい。
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++;
とすると入らないんですが、なぜでしょうか?
0789デフォルトの名無しさんNGNG
while(*st++) ;
と
while(*st)
    st++;
の違いを考えましょう。
0790デフォルトの名無しさんNGNG
ヒント
for( ; ; st++)
0791789NGNG
for文に直せるか直せないかの違いですか?
うーん、ちょっとわかんないです・・・。
0792デフォルトの名無しさんNGNG
>>791

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

この違いと同じだ
0793789NGNG
あああわかりました!
インクリメントする回数が前者は一回多くなってしまっているんですね。
ありがとうございました!
0794デフォルトの名無しさんNGNG
ヒント
for(i=0; ;i++)

iはいくつから処理される? いつインクリメントされる?
0795789NGNG
>>794
ありがとうございます!
評価される度にインクリメントされるのだから、
while(*st++)だと一回余計にインクリメントされるんですよね?
0796デフォルトの名無しさんNGNG
>>794
虚しいな
0797デフォルトの名無しさんNGNG
砂上の楼閣というか、底無し沼の上にビルを建ててるような雰囲気だな。
0798デフォルトの名無しさんNGNG
みんなプログラム組むときにフローチャートみたいな図とか何かしらメモ書いてる?
0799798NGNG
あ、スレ違いだ、すまん。
0800デフォルトの名無しさんNGNG
>>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);
}

0801デフォルトの名無しさんNGNG
>>800
stはどこを指しているのかな?
0802デフォルトの名無しさんNGNG
エー エフ オー
0803800NGNG
int main(void) {
char string[25];
scanf("%s", &string);
put_rstring(string);
}
こうにしたら、最初の1文字だけ出るようになりました。
全然reverseされてない。

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

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

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

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

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

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

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

C++は、なんか大げさだし。
0842デフォルトの名無しさんNGNG
size_t って何故必要なんでしょうか?
unsigned long int じゃ駄目なんでしょうか?

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

尤も、特定の環境での定義に依存したコードを書いた途端
移植性が低くなってしまうがな。
0855デフォルトの名無しさんNGNG
型に無意味な名前を付けて偏見から開放されるだけでなく、
環境によって名前を変更してやることによって
どの環境で書かれたか分かる優れものだな。
0856デフォルトの名無しさんNGNG
だれか>>855を分かるように説明して。
0857デフォルトの名無しさんNGNG
左辺値が必要(関数 main )
というコンパイルエラーがでるんですが、どうなんでしょうか?
何が原因でしょうか。
if(seisuu%2=1){
printf("ガクガク");
}
この部分です
0858デフォルトの名無しさんNGNG
>if(seisuu%2=1){
なにこれ、なにがしたいの?
0859デフォルトの名無しさんNGNG
==
0860デフォルトの名無しさんNGNG
seisuuはユーザーが入力するようにするんです
0861デフォルトの名無しさんNGNG
>857
seisuu % 2 == 1
ご愁傷様です
0862858NGNG
代入してどうすんだよ
>>859が書いたとおりif(seisuu % 2 == 1)だろ
代入と等号間違えるなよ
0863デフォルトの名無しさんNGNG
左辺値が必要なんですよ :-P
0864デフォルトの名無しさんNGNG
ガーン。
どうもありがとうござます
0865デフォルトの名無しさんNGNG
#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");
}
}
}
}
これを実行して、縦の列をそろえたいんですが、
どこを工夫したらいいですか
0866ちよNGNG
みてね、無修正だよ〜♪
http://www1.free-city.net/home/kotarou/page002.html
0867デフォルトの名無しさんNGNG
printf("%d ",i*j);ここ
0868デフォルトの名無しさんNGNG
COBOLなら、オレに聞け!<2>
0869デフォルトの名無しさんNGNG
printf("%3d",i*j);
0870シンジNGNG
IPの隠し方教えてください

0871デフォルトの名無しさんNGNG
printf("%2d",i*j);
putchar(j==9?'\n':' ');
0872デフォルトの名無しさんNGNG

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

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

↑だけ空想論とかぬかすなよ、てめーら
0883デフォルトの名無しさんNGNG
びやーね すとらうすとるうぷ
0884デフォルトの名無しさんNGNG
>>882
そんな環境あるかよ。妄想もたいがいにしろ。








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

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

単純化:
複雑な型名を短くできる。
例えば関数ポインタや配列ポインタの型名は複雑だが、
typedef してしまえば簡単な名前で扱う事が出来、
間違いを少なく、そして可読性も上げることができる。
実体を定義する時に構造体型や列挙子型の
struct や enum を省略できるようにするのにも使える。
0902デフォルトの名無しさんNGNG
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から�@にいくようにするにはどうすればいいのでしょうか?
0903デフォルトの名無しさんNGNG
goto
0904デフォルトの名無しさんNGNG
>>902
ロジックを見なおす。
for example.
先ずmain()全体をループに入れ、
ネスト深すぎるから外のcase2のwhile辺りを関数化して、
中のcase2でフラグをセット。
main()に戻ったところでフラグがセットされていたらループ継続。
0905デフォルトの名無しさんNGNG
特定の条件が満たされたら最初からやり直す。
という処理はループよりgotoだろ。盲目的安置でもなければ。
0906デフォルトの名無しさんNGNG
>>902
switch(n) 以下を関数化し(例えば foo とする)、
do {
 scanf("%d", &n); /* ← & も忘れずに! */
} while(!foo(n));
とし、foo はループを継続する場合(異常状態?)は 0 を、
ループを終了する場合(正常状態?)は 1 を返すようにする。
0907デフォルトの名無しさんNGNG
int i;
int *n=&i;
としているから&をつけなくてもいいんでつ。
0908デフォルトの名無しさんNGNG
なんじゃそりゃ。
0909デフォルトの名無しさんNGNG
>>907
それはウソだろう。switch(*n)と書いてないんだから。
0910907NGNG
ちっ・・・
0911デフォルトの名無しさんNGNG
ポインタってどうゆうもんすか?
0912デフォルトの名無しさんNGNG
* ← こういうの
0913デフォルトの名無しさんNGNG
←
↑むしろこれ
0914デフォルトの名無しさんNGNG
↓←
→↑
0915デフォルトの名無しさんNGNG
 ↑
← →
 ↓
0916デフォルトの名無しさんNGNG
( ・ )( ・ )
0917デフォルトの名無しさんNGNG
( ・ Y ・ )
0918デフォルトの名無しさんNGNG
なんか変な方向に向かっているような気が・・・
0919デフォルトの名無しさんNGNG
新キャラ C言語クン

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

ていうか、OSや環境固有のAPIを話題にする時点でスレ違いだ罠
0930デフォルトの名無しさんNGNG
そもそもCと関係ない
0931デフォルトの名無しさんNGNG
http://jbbs.shitaraba.com/computer/6765/
0932デフォルトの名無しさんNGNG
このスレで言える事は、

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

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

0935デフォルトの名無しさんNGNG
system("cls");
0936デフォルトの名無しさんNGNG
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");
0937デフォルトの名無しさんNGNG
int i=10000;
while(i--)
puts("");
0938デフォルトの名無しさんNGNG
ありがとうございます。
では、特定の文字列だけとか指定は可能でしょうか。
0939デフォルトの名無しさんNGNG
バックスペースで消せる範囲なら
バックスペースを表示すればいけることもある。
環境によっては変なのが表示されるけど。
0940927NGNG

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

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

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

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

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

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

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

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

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

>つーか scanf 使ってる時点で(
↑の意味がちょっと分かりません。普通のCプログラムは、scanfみたいな、入門書に載っているような
関数は、馬鹿らしくて、使わないと言う意味なんでしょうか。。
0953デフォルトの名無しさんNGNG
新スレ立ててくる。
ちょっとタイトル変えるけど堪忍して。
0954デフォルトの名無しさんNGNG
>952
バッファーオーバーフロー
0955デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1056109884/

新スレ
0956デフォルトの名無しさんNGNG
scanf("%100s"buf);
0957おしえてくださいNGNG
みなさん、どうもレスありがとうございます。

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

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

これからも、とりあえず、がんばっていこうと思います。
0963デフォルトの名無しさんNGNG
しかし、scanf()の代わりがgetchar()か?
どんな職場だ。
0964デフォルトの名無しさんNGNG
>>963
getcharを使うべきところに、scanfを使うような奴がいる職場。
0965デフォルトの名無しさんNGNG
scanf("%d",&i)を取って代われる優れた関数の実例が言えるか?
0966デフォルトの名無しさんNGNG
fgets(buf, sizeof buf, stdin);
i = atoi(buf);
0967デフォルトの名無しさんNGNG
bufの定義を書いてみろ
0968デフォルトの名無しさんNGNG
>>967
何でそんなに喧嘩腰なの?
0969デフォルトの名無しさんNGNG
教えて欲しいんだけど、素直になれないから
0970デフォルトの名無しさんNGNG
>>968
scanfは使わない、を一般論と言うアフォを論破したい
0971デフォルトの名無しさんNGNG
>>970
誰のことを言ってる?
0972デフォルトの名無しさんNGNG
たとえば961
0973デフォルトの名無しさんNGNG
早く答えろよ、bufの定義
0974デフォルトの名無しさんNGNG
>>973
char buf[MAX];
0975デフォルトの名無しさんNGNG
入力された数字列がMAX-2文字って保証はどこにある
0976デフォルトの名無しさんNGNG
11分もかかってんじゃねーよタコ
0977デフォルトの名無しさんNGNG
「はにゃ〜ん」の定義を述べよ
0978デフォルトの名無しさんNGNG
>>975
入力された数字がiに収まる保証はどこにある
0979デフォルトの名無しさんNGNG
>>975
>>974じゃないが、そうくると思った。
じゃあ、scanfは無限の長さの数字列読めるのか?
そういうのを考慮した場合、
scanfとfgetsとどちらが対処できるか考えればscanfを選ぶことはない。
0980デフォルトの名無しさんNGNG
>>978
そんなのは未定義でいいんだよ
atoiと同じロジックをトレースしてどこまで解析したかを返す関数とか書いてるのかてめーわ
0981デフォルトの名無しさんNGNG
>>979
別な話、無限の数字列を読むロジックは作ればできる
0982デフォルトの名無しさんNGNG
>>981
別に無限にしなくても限界がある。
1行が長すぎると同じ行を2回以上scanfしてしまう。
これにどうやって対処する?
0983デフォルトの名無しさんNGNG
scanf で数値入れるところで文字列入力すると
殆どの場合において暴走するけど、
それも再現しないといけないの?
0984デフォルトの名無しさんNGNG
>>982
>1行が長すぎると同じ行を2回以上scanfしてしまう。
は? もしかして、あの処理系の話か?
0985デフォルトの名無しさんNGNG
>>983
暴走してんのはてめーのアプリだ!
scanfはスペックを守っているに過ぎん
こういうアフォがscanfは使わないとか言ってるのを
聞くたびに耳が腐る思いだ
0986デフォルトの名無しさんNGNG
>>980
支離滅裂すぎ
入力されたものが確実に解析できる訳ではないのだから
どちらで、あっても問題はない
問題なのは、入力されてるデータが無限に続いた場合
プログラムで制御して、入力を打ち切れるか、制御出来ないかの差
0987デフォルトの名無しさんNGNG
>>986
確実に解析できなかった、その先で何をしているんだてめーの関数わ
もしかして、いちばん困ることをしでかしてくれるのか?
0988デフォルトの名無しさんNGNG
>>977
うれし、はずかし?
0989デフォルトの名無しさんNGNG
>>987
エラー返すに決まってんじゃん
つーか、ツッコミ所違うし
0990デフォルトの名無しさんNGNG
>>985
あんた素人でしょう?プロとしてアプリを作ることになれば、
嫌でもscanfを使うなって事が分かるよ。
0991デフォルトの名無しさんNGNG
>>989
fgetsでか?
0992デフォルトの名無しさんNGNG
>>990
いいやCでメシ食ってるよ
嫌でも憶えることは
ブツのスペックだ
0993デフォルトの名無しさんNGNG
>>992
止まったな…
まぁ、結論を言うと、そんな事を調べるより(scanf()が使えるかどうか)
scanf()を使わないようにした方か早いだろ?
0994デフォルトの名無しさんNGNG
素人だの結論だのと腰抜けばっかりだな
このスレは
0995デフォルトの名無しさんNGNG
おおうおおうおおうおおうおおう
0996デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1056109884/

次スレ
0997デフォルトの名無しさんNGNG
「フォーマットの正しくない入力に対する動作は未定義です」
としておけばいいってこと?
素敵な職場だね。
0998デフォルトの名無しさんNGNG
scanfなんか使ってられねえよ。。。
標準入力から入力する場合でも、入力用の関数とかつくらんか?
0999デフォルトの名無しさんNGNG
>>997
そういう仕様にしてるのがscanfの代用としてよく引き合いに出されるfgetsだろうが
1000デフォルトの名無しさんNGNG
1000ゲット♪
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。