C言語なら俺に聞け(入門篇)at TECH
C言語なら俺に聞け(入門篇) - 暇つぶし2ch500:デフォルトの名無しさん
06/06/23 16:41:20
>>499
それはPGで括ることじゃないと思うが
PMだってSEだって(ry

501:デフォルトの名無しさん
06/06/23 17:45:21
>>499
>PGは日本語が不自由だからな。
>意味不明の仕様書しか作れないから
PGの書く仕様書を読まされるあなたは、もしや伝説のコーダー様??

502:デフォルトの名無しさん
06/06/23 19:30:32
元PGってのが仕様書作って来るけど糞って話では?
仕様書通りに作って納品したら、案の定作り直しでデスマであぼーん。

503:デフォルトの名無しさん
06/06/24 14:26:55
無償のVS2005でC言語を始めようと思うのですが、C++かC#どっちがいいと思いますか?
人気のある方がいいです
プログラム経験はあります(perl,ASなど)

504:デフォルトの名無しさん
06/06/24 14:33:36
C++もC#もC言語ではありません。

505:デフォルトの名無しさん
06/06/24 17:12:34
だがしかし、Visual C++のコンパイラはCのソースをコンパイルすることもできる。

506:デフォルトの名無しさん
06/06/24 17:13:04
>>503
とても、プログラム経験がある人の発言とは思えない。

507:デフォルトの名無しさん
06/06/24 17:13:18
>>503
初心者?言語の仕様を習いたいの?それとも教育機関でやる
ありきたりな数学的な知識を使った手法(アルゴリズム)をきちっと理解したいの?
まぁ、どの道どの言語でも、アルゴリズムの部分は共通しているんで
どっちでも良いんだけど、C++にしとけば?

508:デフォルトの名無しさん
06/06/24 20:19:17
>>506
人気のあるほうって何だよそれ人気があればいいのか?じゃあVB

509:508
06/06/24 20:20:04
安価ミス
>>506 ×
>>503

510:デフォルトの名無しさん
06/06/24 21:25:01
人気っつーか、自分が使いやすい方がイイ!

511:デフォルトの名無しさん
06/06/24 22:10:32
おまえら本当にこの手のどうでもいい質問に律儀に答えますね

512:デフォルトの名無しさん
06/06/24 22:31:39
君も仲良しクラブに入らないか

513:デフォルトの名無しさん
06/06/24 23:12:55
俺も入れてくれないか?

514:デフォルトの名無しさん
06/06/25 00:23:31
バブルソートを少しヒントをもらって、なんとか自力でやりとげたんですが
これってどのぐらいの難易度なんですか?
自分はかなり努力したつもりですがみなさんからみたら初歩なんですかね?

515:デフォルトの名無しさん
06/06/25 00:26:12 BE:59908234-#
>>514
バブルソートは、アルゴリズムの本にソースが載ってたんで、
自分で考えるなんてことはしたことがない。

516:デフォルトの名無しさん
06/06/25 00:35:35
>>514
初歩的だが、もっと効率の良いソートを理解する前の前座程度。
しかも、今後作るプログラムにはバブルソートなんて使わず
もっと高速なソートが使われるし、自分で定義しなくてもできたものがあるしね。

517:デフォルトの名無しさん
06/06/25 01:01:51
>>483
どうあっても結婚まで発展しなさそうな気がするんだが


518:デフォルトの名無しさん
06/06/25 01:13:38
C言語を勉強するとAVのモザイクが外せると聞いたのですが
どのようにするといいのか教えてください。

519:デフォルトの名無しさん
06/06/25 01:14:14
勉強しろ

520:デフォルトの名無しさん
06/06/25 01:15:19
別にCじゃなくても出来ると思うが

521:デフォルトの名無しさん
06/06/25 01:15:41
ソートのアルゴリズムはいくらでもそれ専用の本でてるじゃん
それを言語に置き換えるだけで、アルゴリズム理解しようとは思ったこともなかったわ。
シェルソートとクイックソート覚えるだけで良し


522:デフォルトの名無しさん
06/06/25 02:05:39
今日からC言語をやってみたいと思うのですが
C言語を使えばどんなものが作れるのかを教えてください。

その中から簡単そうなプログラムから一つずつ作って行って
C言語を学んでいこうと思います。

523:522
06/06/25 02:41:58
C言語についてググッてC言語のソースを見てみて
感じたのですが。
C言語のソースって、なんだかPerlによく似ているような気がする。
補足するようですが私はPerlを使ってのCGIなら組んだことはあります。

C言語の\nってもしかして、改行を意味する命令?
ifってPerlで使っているifと一緒?

だったら、画面に文字を表示する命令は

print "文字\n";

でしょうか?

524:デフォルトの名無しさん
06/06/25 02:46:56
>>523
本読め寝言を書き込むな。薬でもやってるのか?

525:デフォルトの名無しさん
06/06/25 02:52:17
>>523
命令制御コード制御文の基礎から勉強しとけ


526:デフォルトの名無しさん
06/06/25 03:26:04
ググレば腐るほど入門出てくるというのに…


527:デフォルトの名無しさん
06/06/25 04:24:32
どの入門書がいいですか
都会の本屋に行ったら種類が山ほどあって
近所の本屋に行ったら一冊もなくて
迷います

528:デフォルトの名無しさん
06/06/25 04:37:50
>>527

ネットで検索してネットで注文しなさいよ

プログラミング言語C ANSI規格準拠
B.W. カーニハン

これを、理解できるまで何百回も読み直せ


529:デフォルトの名無しさん
06/06/25 04:41:57
やっぱりその本が一番いいんですかね・・・
お小遣い貯めて買います

530:デフォルトの名無しさん
06/06/25 13:09:44
小学生が2chやってんじゃねーよ

531:デフォルトの名無しさん
06/06/25 20:21:20
小学生ではありません
立派なニートです

532:デフォルトの名無しさん
06/06/25 23:59:37
実家引きこもりで小遣い貰ってるって香具師か。
いきなり本買う前に近所の図書館で借りて読んでみたほうがいいよ。

533:デフォルトの名無しさん
06/06/26 00:51:17
>>528
ちうかそれ、出版された日付が古いぞな・・・
ANSI基準もそれから変わった部分もあるんでは?

534:デフォルトの名無しさん
06/06/26 01:08:41
バブルソートの件を書きこんだものです。
みなさん返信くださってありがとうございます
なんかへこみましたが‥これからも頑張ります

535:デフォルトの名無しさん
06/06/26 01:15:55
>>534
そりゃ経験があなたとは何万時間も違うような人から見たら、
バブルソートなんてアホみたいなものに見えちゃうさ。

別にへこむこと無いよ。そのまま突っ走れ。

536:デフォルトの名無しさん
06/06/26 01:41:43
図書館は敷居が高くて・・・
バブルソートです

537:デフォルトの名無しさん
06/06/26 01:46:27
基本情報やソフトウェア開発の本にもソートについては出てくるが
最初はバブルソートだな。けど、この仕組みを理解するのに苦労するのは
先行き不安だね・・・。単純に、各々の要素を配列の先頭から比較して並び替える程度だし。
まぁ、頭の中だけでなく、実際に数字を並べて自分で並び替えて仕組みを理解してみ。
んな難しくないことだし。

538:デフォルトの名無しさん
06/06/26 02:15:23
>>536
どこかの大学の講義資料とか漁ってみ。
学外から見れるところもまだ結構残ってる。

539:デフォルトの名無しさん
06/06/26 02:32:58
URLリンク(www.elc.ees.saitama-u.ac.jp)
ここにあるけど、ここのは配列の後ろの要素から比べているね・・・
自分が見たものの多くは前からだったが、まぁ概要は同じなんで

540:デフォルトの名無しさん
06/06/26 04:00:40
前からも後ろからも計算量は同じだし。
降順に並べるか昇順に並べるかの差。

Cには関係ない。アルゴリズムの本読めばソートの解説載ってる。
数学屋の理論的な蘊蓄付きで。

541:デフォルトの名無しさん
06/06/26 04:17:20
>>539はモロにC言語なんだがw

542:デフォルトの名無しさん
06/06/26 12:45:00
>>541
君は日本語の勉強を先にした方がいいよ。

543:デフォルトの名無しさん
06/06/26 14:24:46
>>533
いや、この本を理解できればどんなCのマニュアルも理解できる
っつうことでさ。

おれが生まれて初めて読んだ時は10回読んでも理解できんかったw


544:デフォルトの名無しさん
06/06/26 14:58:38
>Cに=関係ない
>>540>>542>>539のPDFが見られず
人間の言葉以前に状況も理解できないサル以下の知能しかないようだ
>>539はバブルソートをC言語で表したものだが?
頭が悪い以前に自分勝手な主観や意見だけでゴリ押しする
周りを無視するタイプだな
所詮、低学歴、低俗、低レベルな奴

545:デフォルトの名無しさん
06/06/26 15:03:51
>>540>>542はこのスレの流れも理解していないようだ。
>>538には
>大学の講義資料とか
あるため、大学でそれに関する文献を公表している場所を示して
話が続いただけなんだが、無理やりバブルソートを話を終わらせようと必死こいた結果
ここはお前が中心になって話を進めるスレじゃないんで、他へ行った方が良いよ?
そういう考えはまともなソースをかけないクズの考え。
一つ一つおろそかにせず、順を追うことは重要。
なぜなら、効率が悪いアルゴリズムを改善していくという部分の勉強も含まれているから。

現代人は最初っから便利なものを使っている。が、その便利なもの
手法が作られる経緯をろくに知らず、さらに、現代の問題を無視して
現在使っているものが引き起こす問題をそのままにしておく傾向もある。
そういう改善をする考えをもてなければ、プログラマとしてでなく
知能を持った人間として成長しない人間になるよ。

546:デフォルトの名無しさん
06/06/26 15:05:48
>>540
>前からも後ろからも計算量は同じだし。
誰もそんなことは聞いてないw
>降順に並べるか昇順に並べるかの差。
え?後ろから比較するか前から比較するかの差は分かるけど?

>Cには関係ない。
モロにC言語で記述されたソースが提示されてんですけどぉ?
C言語でないって言うならスレタイを見て「お前」には聞いてねーって思えよ?w

>数学屋の理論的な蘊蓄付きで。
数学の話なんてしてねーよ

547:デフォルトの名無しさん
06/06/26 15:07:53
>>542が必死こいて自分の勘違いを認めないレスをする↓

548:デフォルトの名無しさん
06/06/26 15:18:49

 ま た お 前 か


549:デフォルトの名無しさん
06/06/26 15:27:08
前からか後ろからかで実際の速度が変わる環境は多いと思うがね。

550:デフォルトの名無しさん
06/06/26 15:34:02
>>549
それは一概に言えないけど、とりあえず上の流れは
明らかに大学のプログラムの講義でC言語を使っているものを例に出しているけどね
そういうと、今度は無理なこじつけとか言い出すだろうけど、C言語において
ソートは出てくるんで、あまり細かいことを言っていたら
それじゃC言語でなんのプログラムを作るの?って話にまで発展しちゃうんで
一例を出しての話はおkだな

551:デフォルトの名無しさん
06/06/26 16:33:18
面減る

552:デフォルトの名無しさん
06/06/26 17:08:59
メンヘル型かまってちゃん症候群

553:デフォルトの名無しさん
06/06/26 17:19:28
お勧めC本(ステップアップ順)
やさしいC
しばたぼうようのC入門のやつ
独習C++
ダイテル親子の本
K&R

554:デフォルトの名無しさん
06/06/26 17:57:35
すいません
質問したものですが私のために揉め事になってしまっているようで
どうもすいませんでした
家の物置を整理したところ
兄の使っていたC言語の本と思しき書物がありましたので
ひとまずそれを繙いてみます

555:デフォルトの名無しさん
06/06/26 19:25:20
>>554
古そうな本はやめておけ。
Cだって生まれたときから今まで全く同じ姿だったわけではない。
せいぜい10年以内できれば5年以内のもので、お前が合っていると感じればよいと思う。

556:名無し
06/06/26 19:26:15
>>517
イケメンなら結婚できる。
void life(const char *job)
{
 int age,lifetime;

 if(strcmp(job,"プログラマ") == 0)
 {
  lifetime = 50;
 }
 else
 {
  lifetime = 70;
 }
 
 age=-1;

557:続き
06/06/26 19:27:46
 while(++age<lifetime)
 {
#ifdef IKEMEN
  if(9<age && age<25)
  {
   printf("%d 人目の彼女が出来ました。\n",age-9);
  }
  else
  {
   if(age==25)
   {
     puts("結婚しました。");
   }
   else
   {
    if (age>29)
    {
     printf("%d 人目の愛人が出来ました。\n",age-29);
    }
   }
  }
#endif
  sleep(31536000);
 }
}

558:デフォルトの名無しさん
06/06/26 19:49:22
#ifdef IKEMEN
  if(9<age && age<25)
   printf("%d 人目の彼女が出来ました。\n",age-9);
  else if(age==25)
    puts("結婚しました。");
  else if (age>29)
   printf("%d 人目の愛人が出来ました。\n",age-29);
  }
#endif

でいいじゃないか。
何でそんなにネスト掘り下げてんの?

559:デフォルトの名無しさん
06/06/26 21:03:39
>>558
else と if がどこに懸かっているのかが分かりにくいから。

560:デフォルトの名無しさん
06/06/26 21:29:37
初心者へ上司からの指令です。

C言語を使って「愛していますか?」って表示させるプログラムを組んでみよ。
さらに、YESとNOの選択を用意して
YESを選択すれば「もちろん!」
NOを選択すれば「なわけねーだろ!」
って表示させるプログラムを組んでみよ。

561:デフォルトの名無しさん
06/06/26 22:05:23
>>559
いつか、ひと目で解るようになれるといいですね。

562:デフォルトの名無しさん
06/06/26 23:00:16
>>560
文字列の受け取り方が分かりません('A`)

int main(void) {
       char yn;

       do {
              printf("愛していますか?");
              printf("(y/n) > ");
              scanf("%c", &yn);
              while (getchar() != '\n') { }

              if (yn == 'y') {
                     printf("もちろん!\n");
                     break;
              } else if (yn == 'n') {
                     printf("なわけねーだろ!\n");
                     break;
              } else { printf("yかnを入力してください。\n"); }
       } while (!(yn == 'y' || yn == 'n'));

       return 0;
}

563:デフォルトの名無しさん
06/06/26 23:09:09
534です。
みなさん色々指示してもらって。助かります。
>>535さんの発言どうり途中であきらめず、この世界で
やっていこうと本気で思いました。本気で突っ走りたくなったんで
更に更に勉強します。

564:デフォルトの名無しさん
06/06/26 23:24:54
思いとどまれよ。
人生負け組みになりたくなければ。

565:デフォルトの名無しさん
06/06/26 23:31:06
>>564
ひとそれぞれだよ。
俺は今年で35歳になるが、この業界に入って後悔したことはただの一度も無い。
負け犬だと思ったこともないし。客観的に見れば社会的ステータスは低いんだろうけどね。

566:デフォルトの名無しさん
06/06/26 23:32:18
質問なんですが
scanfとgetsこの二つは
なにが違うのですか??
初心者ですいません

567:デフォルトの名無しさん
06/06/26 23:36:27
ゲッツは文字列を受け取る
スキャンエフも文字列とか受け取れるがゲッツの方が使い勝手がよいと自分なりに勝手に拝借して候

568:デフォルトの名無しさん
06/06/26 23:52:53
scanfはスペースがあるとそこで区切られるよね。
ところでgetsって
ゲッツ?ゲットエス?

569:デフォルトの名無しさん
06/06/27 00:16:44
getStringの略だからゲットエスだろ。
getsは文字列(string)を受け取るだけ。
scanfは書式指定(Format)できるから、文字列じゃなくて数値とか
いろいろ入力できる。

ま、本当はバッファオーバーランを防ぐためにもfgetsを使う
べきだと思うが。

570:デフォルトの名無しさん
06/06/27 00:33:45
>>568
区切られずに読ませる方法もある。

571:デフォルトの名無しさん
06/06/27 00:45:55
>>566
むしろ同じ所などない。
全てにおいて異なる。

572:デフォルトの名無しさん
06/06/27 00:51:58
>>566です
教えてくれた人ありがとうございます。
勉強になりました


573:デフォルトの名無しさん
06/06/27 16:32:42
opendirはNo errorなのに
readdirでBad addressって言われるのってどういう場合が考えられる?
環境はWindowsのMingwです。

574:デフォルトの名無しさん
06/06/27 18:58:59
単に終端に達したのを勘違いしたとか

575:デフォルトの名無しさん
06/06/28 10:50:19
ん~?ファイルはあるんだけどなぁ。でもそれくらいしかあり得ないか・・・。解答どうもでした。


576:デフォルトの名無しさん
06/06/28 23:27:59
文字列のなかで特殊文字(%や”など)が入っているかをチェック
するときどのようにすればよろしいでしょうか。
目的はSQLでエラーになるような特殊文字を検索時の値として渡さないようにしたい

577:デフォルトの名無しさん
06/06/28 23:44:41
>>576
一文字づつチェックすればいいだろ。



それより、そういう文字は普通、エスケープして渡すべきだと思うよ。

578:デフォルトの名無しさん
06/06/28 23:50:36
エスケープして渡すべきとは具体的にどうすればいいいのですか。

579:デフォルトの名無しさん
06/06/28 23:52:51
>>576
つ[strcspn]

580:デフォルトの名無しさん
06/06/28 23:54:35
SQL エスケープでぐぐれ

メタ文字の意味を消失させる事
例えばCの文字列定数なら"\\"みたいな

581:デフォルトの名無しさん
06/06/28 23:55:29
>>578
そのSQLの仕様見れ

582:デフォルトの名無しさん
06/06/29 10:03:59
Visual C++ 6.0上で実行すると、「Press any key to continue」が最後に出るのに、
直接実行すると、「Press any key to continue」が出ずに
すぐに終わってしまいます。どうすれば、
直接実行したときに、「Press any key to continue」が出るようにできるのでしょうか?

583:デフォルトの名無しさん
06/06/29 10:42:11 BE:15528724-#
main関数の最後に
puts("Press any key to continue.");getch();
と書いておく。

584:デフォルトの名無しさん
06/06/29 16:56:59
>>582
末尾に
system("PAUSE");

585:デフォルトの名無しさん
06/06/29 16:59:05
>>582
コマンドプロンプトを立ち上げて
実行プログラムがある場所に移動してから実行するとか

586:デフォルトの名無しさん
06/06/29 20:19:49
コマンドプロンプト上でカーソル位置を自由に設定する方法を教えてください。
メニュー画面を作って、メニュー番号を入力させるプログラムを作りたいの
ですが、メニュー画面を表示させることはできるのですが、
画面上の真ん中あたりに、メニュー番号を入力させるところを作りたいのですが、
そこに、カーソルをもってくるにはどうしたらいいですか?
お願いします。

587:デフォルトの名無しさん
06/06/29 20:48:22
コンソールAPI でぐぐる。

588:586
06/06/29 21:01:06
>>587
ありがとう!!

589:586
06/06/29 22:12:54
ごめんなさい、やっぱわかんなかった。
VCじゃなくって、まったくのc言語だけでカーソル移動とかさせたいのだけど、
windows.hとか使わないでやる方法教えてください。

590:デフォルトの名無しさん
06/06/29 22:17:07
>>589
ない。
そもそも、標準Cにコンソールとか言う概念自体がない。

591:586
06/06/29 22:21:42
>>590
そうなのか、、ありがと

592:デフォルトの名無しさん
06/06/30 01:03:38
すげぇなぁ。
>メニュー画面を作って、
>メニュー番号を入力させるプログラムを作りたいのですが、
>メニュー画面を表示させることはできるのですが、
>画面上の真ん中あたりに、
>メニュー番号を入力させるところを作りたいのですが、
>そこに、
>カーソルをもってくるにはどうしたらいいですか?
なげぇ文だぜ。
きっとプログラムもmain()で冗長に書いているのだろう。

593:デフォルトの名無しさん
06/06/30 16:42:41
文字列の部分コピーをやりたいです。
先頭から n 文字目までのコピーなら strncpy(*char, *const char, int); で実現できますが、
n 文字目から最後までのコピーは、char配列の1成分ずつfor文等でコピーしないといけないのでしょうか?

594:デフォルトの名無しさん
06/06/30 17:43:09
>>593
strcpy(dst, src+n);

595:593
06/06/30 18:38:32
>>594
できました。ありがとうございます。
このような使い方が出来るとは・・・覚えておきます。

596:デフォルトの名無しさん
06/06/30 19:05:37
>>595
ポインタとヌル終端文字列の基本テクです

597:デフォルトの名無しさん
06/06/30 22:56:30
do-while文で、整数を入力して、0になったらおわりという文はどうしたらいいのですか?最近プログラムの勉強始めたばかりで申し訳ありません

598:デフォルトの名無しさん
06/06/30 23:19:56
>>597 適当に答えてみる
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int num;
char tmp[256];
do{
num=atoi(gets(tmp));
}while(num!=0);
return 0;
}

599:582
06/07/01 00:25:26
>>583,584,585
ありがとうございます。system("PAUSE");を利用することにしました。

>>597
#include <stdio.h>
int main(){
int n;

do{
scanf("%d",&n)
if(n<1) printf("1以上の整数を代入してください!");
}while(n<1);

do{
n--;
}while(n!=0);

return(0);
}

実行してないからバグあるかもしらん。


600:デフォルトの名無しさん
06/07/01 01:04:31
598、599さん、素早い返答ありがとうございます。実は猫でもわかるシリーズの本にあった例で、do~while(n)で終わってて理解できなかったんです。初学者ゆえこれからも質問しますが、よろしくお願いいたしますm(__)m。

601:デフォルトの名無しさん
06/07/02 13:57:54
double a=123456.6789
b=-12345.6789

printf("a=%10.4f b=%10.4f\n",a,b);
printf("a=%7.4f b=%7.4f\n"),a,b);

の結果が両方とも

a=123456.6789 b=-12345.6789になるのはどうしてでしょうか?

602:・∀・)っ-○◎● ◆toBASh....
06/07/02 14:07:24
>>601
%10.4fは、浮動小数の「小数点以上」ではなく「全体の幅」を10文字で表すと言う意味。
もちろん小数点以上の桁数が足りない場合は自動的に補われる。
小数点以下の「4」の部分は、小数点以下に使う桁数の指定。

どっちも7文字でも10文字でも表しきれないので11文字に拡張されて同じ表示になる。

603:デフォルトの名無しさん
06/07/02 14:15:07
>>601
スレリンク(tech板:671番)

604:デフォルトの名無しさん
06/07/02 14:15:33
>>602
よくわかりました。ありがとうございます。

605:デフォルトの名無しさん
06/07/02 14:30:09
目がおかしくなったかなぁ。
>601の後者はコンパイルさえ通らないし、二番目の%10.4fの結果は12桁になるようにしか見えない。

606:デフォルトの名無しさん
06/07/02 16:02:02
Boland C++ Compiler 5.5でアプリケーションプログラムをコンパイルする方法を
教えてください。

パラメータ 'hWnd'は一度も使用されない
パラメータ 'hPrevInstance'は一度も使用されない
パラメータ 'lpCmdLine'は一度も使用されない

といった警告はどうしたら消えるのでしょうか?

607:・∀・)っ-○◎● ◆toBASh....
06/07/02 16:09:20

int WINAPI WinMain(
HINSTANCE /* hInstance */
, HINSTANCE /* hPrevInstance */
, LPSTR /* lpCmdLine */
, int /* iCmdShow */
)
{
 // ほげほげ
}

608:デフォルトの名無しさん
06/07/02 16:36:34
その気持ちの悪いカンマの位置はどんなメリットがあるんだ?
たまに見かけるんだが。

609:デフォルトの名無しさん
06/07/02 17:50:20
Borland Developer Studio 2006 No.06
スレリンク(tech板)l50


int WINAPI WinMain(
 HINSTANCE,
 HINSTANCE,
 LPSTR,
 int,
)
{
 // ほげほげ
};
ってやっちまって、コンパイルエラー出て悩むのを防ぐ馬鹿除けでは?

610:デフォルトの名無しさん
06/07/02 18:10:34
俺ならint WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int)って1行に書く。

611:デフォルトの名無しさん
06/07/02 18:11:34
一応言っておくと>>607-610のように仮引数名を省略できるのはC++だけで、Cではできない。

612:デフォルトの名無しさん
06/07/02 18:40:04
あれ? C99でできなかったっけ?

613:デフォルトの名無しさん
06/07/02 18:47:37
nに入力した数字の数だけ$を表示するプログラムを作ったんですが
数字を入力するとなんか沢山$が出てきちゃいます。
改善方法はありませんか。よろしくお願いします。
#include <stdio.h>
int main(void){
int a;
char c;
while(1){
printf("C=");
scanf("%c",&c);
if(c==0)
break;
if((c <= 'A' && c <= 'Z') || (c <= 'a' && c <= 'z')){
printf("英数字ですぅ\n");
continue;
}
else{
for(a=1;a<=c;a++)
printf("$");
}
  }
}

614:デフォルトの名無しさん
06/07/02 19:58:25
>>613
・scanf()の戻り値をチェックしないとcの値が有効かどうか判らない。
・cには文字が入っている。それは数値ではないので0と比較する意味が殆どない。
・同じ理由で、$の数は文字コードの値に依存してしまう。

やりたいことがよく判らんが、入力と処理を分けて考えた方がいいんじゃないか?

615:デフォルトの名無しさん
06/07/02 20:54:59
 cを入力
  ↓
英字か?no→→→数字か?no→→→→→それ以外
 yes↓     yes↓         ↓
上に戻る  cの数だけ$を表示    終了

616:デフォルトの名無しさん
06/07/02 21:01:46
上のようなプログラムを作りたかったんですが
10進数型で入力にして
if((c <= 'A' && c <= 'Z') || (c <= 'a' && c <= 'z')){
printf("英数字ですぅ\n");

else if((c <= 0){
for(a=1;a<=c;a++)
printf("$");
}

else
break;

このようにしても英字を入力したらダメですし・・・。
上のようなプログラムを作るのは無理ですか。

617:デフォルトの名無しさん
06/07/02 21:05:30
>>616
つ isalpha(), isdigit()

618:デフォルトの名無しさん
06/07/02 21:05:51
>>616
>>616読め

619:デフォルトの名無しさん
06/07/02 21:13:22
cが0以下ってのはどういう事よ

620:デフォルトの名無しさん
06/07/02 21:44:18
signed char であれば、ASCII範囲外を除外しているといえなくも無い。

621:デフォルトの名無しさん
06/07/02 21:48:38
ASCII範囲内を除外しているように見えるが...

622:デフォルトの名無しさん
06/07/02 22:17:10
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
// ここから入力
char buf[200];
if (fgets(buf, sizeof(buf), stdin) == NULL) {
// 入力終端or異常
}
char * ptr;
long foo = strtol(buf, & ptr, 10);
if (ptr[0] != '\0') {
// 数字以外の入力
}
// ここから文字処理
for (unsigned ic = 0; ic < foo; ++ic) {
putchar('$');
}
return 0;
}



623:デフォルトの名無しさん
06/07/02 22:40:48
見たことのない文字がいっぱい・・・。
c言語って難しいですね。
あと、616は間違いだらけでした・・・。
皆さんありがございました。皆さんが言ってることが理解できるようにもっと勉強します。

624:デフォルトの名無しさん
06/07/02 22:45:12
>見たことのない文字がいっぱい・・・。
確かにそれでは文字コードの処理は難しいだろう
…とかいうツッコミは置いといて、
ガンガレ。

625:デフォルトの名無しさん
06/07/02 22:55:52
>>622
改行を除去するか、'\0' || '\n'で判定しないと、
常に数字以外と判定されるよ。

626:622
06/07/02 23:36:30
あ、いけね、忘れてた。
>>625
THX!
こんなもんかな。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char buf[200];
if (fgets(buf, sizeof(buf), stdin) == NULL) {
printf("No input.\n");
return 0;
}
char * ptr = strchr(buf, '\n');
if (ptr) {
* ptr = '\0';
}
if (strlen(buf) == 0) {
printf("Empty input.\n");
return 0;
}
long foo = strtol(buf, & ptr, 10);
if (ptr[0] != '\0') {
printf("Not a number.\n");
return 0;
}
for (unsigned ic = 0; ic < foo; ++ic) {
putchar('$');
}
return 0;
}

627:デフォルトの名無しさん
06/07/02 23:36:32
初歩的な質問ですみません。
main関数とは別のファイルに作ったユーザー定義関数を
呼び出すのはどうしたらいいですか?
#includeで取り込めばいいのでしょうか?
そのときは、やっぱり関数のプロトタイプ宣言は必要ですか?

628:デフォルトの名無しさん
06/07/02 23:37:57
extern付けて宣言する必要がある

629:デフォルトの名無しさん
06/07/02 23:38:16 BE:314515679-#
>>627
環境は?

630:デフォルトの名無しさん
06/07/02 23:39:01
>>629
WindowsXPです

631:デフォルトの名無しさん
06/07/02 23:42:36 BE:239631168-#
>>630
VCとかなら、プロジェクトに別ファイルを追加すればいいよ。
コマンドラインなら、引数で、mainのファイルと、別のファイルを渡せば勝手にリンクされる。

632:デフォルトの名無しさん
06/07/02 23:44:39
すごく初歩的なんですが
c言語を学校で習ってるんですが
家のPCでソース組むにはどうしたらいいでしょうか?

633:デフォルトの名無しさん
06/07/02 23:46:01
答え:先生に聞く

はい次の方どうぞー

634:デフォルトの名無しさん
06/07/02 23:47:57 BE:359446098-#
>>632
メモ帳

635:デフォルトの名無しさん
06/07/02 23:48:54
コンパイラがどれがいいのかわからなんです・・・・

636:・∀・)っ-○◎● ◆toBASh....
06/07/02 23:49:08
コンパイルまでやるなら
Visual C++ Express

637:デフォルトの名無しさん
06/07/02 23:52:17
学校じゃコマンドプロンプトでlcc ソース名でコンパイルできるんですが

638:・∀・)っ-○◎● ◆toBASh....
06/07/02 23:55:23
Visual C++ Expressならコマンドプロンプトから cl ソース名 でおk

639:デフォルトの名無しさん
06/07/02 23:59:08
>>632
コマンドプロンプトでnotepad[Enter]だ。

640:デフォルトの名無しさん
06/07/02 23:59:45
URLリンク(www.borland.com)
URLリンク(www.vector.co.jp)
VC++ Expはダウソに時間が掛かるから、今すぐちゃちゃっとやるならこっつで

641:・∀・)っ-○◎● ◆toBASh....
06/07/03 00:05:42
lcc-win32も自分で環境変数通せばコマンドラインで使えそうだけどな

642:デフォルトの名無しさん
06/07/03 01:23:42
>>637
lccと言えば、LSI C-86のような気がする。
準備(インストール)はなれないと面倒かもしれないが、学校と同じというのは利点かもしれない。

643:デフォルトの名無しさん
06/07/03 02:02:18
4つ程度なら、int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int)って1行でもいいけど、世の中にはもっといっぱい受け渡す関数もあるよ。

今更、lccって気もするなあ。
実務経験的に、gccかVCのインスコと環境構築方法も学習すべき。

644:デフォルトの名無しさん
06/07/03 07:34:30
lccと言ってもLSI-Cではないと思うけどね。
授業でLSI-C使っているならそれはそれで、よっぽど阿呆で楽しいが。

645:仕様書無しさん
06/07/03 13:16:25
配列でhoge[i*j]と*(hoge+i*j)はどちらがいいのでしょうか?
メリットなどがあれば教えてください

見やすいのはhoge[i*j]なのでこっちで書くほうが多いのですが



646:デフォルトの名無しさん
06/07/03 13:34:54
>>645
a[i] は *(a + i) の略記法なんだからコンパイラにとってはどっちでも同じ。
見やすい方で書けばいい。

647:デフォルトの名無しさん
06/07/03 15:55:19
pow()や、malloc()は重い関数と聞いたのですが、
ではclock()は重い関数なのでしょうか。
というか、重い関数というのはどこでどうやって知るのでしょうか?


648:デフォルトの名無しさん
06/07/03 15:58:51
>>647
OSのソースを読むとか実際に測定してみるとか。


649:デフォルトの名無しさん
06/07/03 16:06:47
>>648
ということは重いかどうかというのは環境依存なんですね。
分かりました。どうもありがとうございます。

650:デフォルトの名無しさん
06/07/03 18:46:45
>>647
>というか、重い関数というのはどこでどうやって知るのでしょうか?
というか、重い関数というのは何を基準に決めるのでしょうか?

651:デフォルトの名無しさん
06/07/03 19:14:34
主観

652:デフォルトの名無しさん
06/07/03 21:21:28
相対的なもんじゃね。

653:デフォルトの名無しさん
06/07/03 22:04:21
他に手段があるならそれと較べて重い(≒遅い)か判断すればいいんじゃない?

pow()はpow(5, 2)と5*5を較べれば一目瞭然だし、malloc()の代わりにC99の可変長配列を使うとか、
malloc(100)を1万回の代わりにmalloc(100 * 10000)すればずっと早くなるわけだし。

654:デフォルトの名無しさん
06/07/03 23:06:35
各辺が全て500以下であるようなピタゴラスの三整数を全て求めよ。
ただし、三重にネストしたforループを使う事。

#include<studio.h>

main()

  int x,y,z;

 for( z = 1, z <= 500 , z++ ){
  for( x = 1, x <= 500 , x++ ){
   for( y = 1, y <= 500 , y++){
    if( pow(z,2) == pow(x,2) + pow(y,2 ))
     printf("%dの二乗は%dと%dの二乗の和に等しい\n",z,x,y);}}}

 return0;



上記で合ってますか?


655:デフォルトの名無しさん
06/07/03 23:15:42
宿題スレで会おう!

656:デフォルトの名無しさん
06/07/03 23:21:42
>>655
スマソ
サンクス

657:デフォルトの名無しさん
06/07/04 01:57:58
ちょっと質問です。

a , b ? c , d : e , f;

a , (b ? (c , d) : e) , f;
と同じでしょうか?

あと、

a = b ? c = d : e = f;

a = (b ? (c = d) : (e = f));

ですか?

どうも3項演算子の優先順位が今ひとつ…。
括弧つけろってのは別の話ということで、
よろしくお願いします。



658:デフォルトの名無しさん
06/07/04 02:11:37
URLリンク(www.google.co.jp)

で、その式はコンパイル通るのか?

659:デフォルトの名無しさん
06/07/04 09:13:57
>>658
VC6で試したけどコンパイルは通りました。

たとえば条件演算子と、代入演算子やカンマ演算子は、条件演算子の方が優先順位の方が高いじゃないですか。
なら、そのまま解釈すると

a = b ? c = d : e = f;

a = (b ? c) = (d : e) = f;

a , b ? c , d : e , f;

a , (b ? c) , (d : e) , f;

こうなっちゃいそうだけどそれじゃあ本当にコンパイルが通らないし、それで聞いてみたんです。

a , b ? c , d : e , f;
これは、
(a , b) ? (c , d) : (e , f);
こう括弧でくくってもコンパイル上は問題になりませんが、優先順位としては明らかにカンマの方が高くなっているから
ありえない。実際動作もそうなってはいないようです。

で、演算子を解釈していくときのプロセスで、3項演算子だけは二項演算子とは違った特異な処理をしているんしょうか?

ちょっと入門の質問じゃないかも知れないですが、どうも自分の考え方が理解の域に達していないので、初心者とし
て質問させていただきました。

グーグル先生以外の人間の達人の方、出来ましたら演算子の解釈順序なんかをご教示くださいませんでしょうか。

よろしくお願い致します。



660:デフォルトの名無しさん
06/07/04 09:28:04
>>659
a = b ? c = d : e = f;

a = (b ? (c = d) : e) = f;

a , b ? c , d : e , f;

a , (b ? (c , d) : e) , f;

だ。
? と : の間は分離なんかできるわけがないから、
ここは常に ? ... : は ? (...) : と同じになる。

661:デフォルトの名無しさん
06/07/04 10:12:54
>>660
どうもありがとうございます。ただ、まだちょっと納得いってません。aを除いて、
b ? c = d : e = f;
これはご教示に従えば

(b ? c = d : e) = f;

こうなりますよね? ここで、bが偽なら 最初の括弧の中は (e) となって、
e = f が実行されますが、 b が真のとき、(c) = f が実行されないのでしょうか?

(b ? c = d : e) = f;

(c = d) = f;

(c) = f;


bが真のとき、実際に挙動を見てみると、

b ? (c = d) : (e = f);

こうなっているように思えるのです。なので、

a = b ? c = d : e = f;

このケースでも、bが真か偽かによって、 a の値が d か f のどちらかになります。


662:デフォルトの名無しさん
06/07/04 10:13:39

改行が多いみたいで、上の続きです。

a = (b ? (c = d) : e) = f;
a = b ? c = d : e = f;

これはトレースすると、挙動が違うんです。もし手軽に試せる状況なら、
追試していただけないでしょうか?

お手数ですが、よろしくお願い致します。






663:デフォルトの名無しさん
06/07/04 10:33:12
(b ? c = d : e) = f; ってコンパイル通るか?
三項演算子は左辺に置けないと思うんだけど。

664:デフォルトの名無しさん
06/07/04 11:11:47
ちと勘違いしてました。VC6でWinMainで試してました。
C++だと変数の参照を返すからコンパイル通るんだ…。

ここはC言語スレでしたかorz

たしかにCだと
b ? c = d : e = f;

これは書けませんね。

ただ、演算子の優先順位というに点だけ着目すると、Cでは
(b ? (c = d) : e) = f;
こうなって左辺値に不適合でエラー

C++だと
b ? (c = d) : (e = f)

このように実動作しているようです。直感的にはC++流の解釈の方が
素直な気がしますが、三項演算子の コロン以降だけを特別処理している
気がしてならない…。

スレ汚し失礼しました。C++スレに行って来ます。

665:デフォルトの名無しさん
06/07/04 11:13:34
言語の優先順位に頼った可読性の悪いソース書くなよ。
括弧使え括弧。


666:デフォルトの名無しさん
06/07/04 11:24:20
>>665
ですので、最初に書いたとおりに、括弧をつけるのは別の話です。
コンパイラの式処理がどうなっているのか勉強しているので。

667:初心者
06/07/06 10:08:35
初心者レスですよね?!心優しい皆さんよろしく!!
数列の長さを設定しました。
キーボードで文字を入力します。
入力した文字が設定した長さを超えるとごみが出て
次の入力を影響します。
設定した長さ以後のごみをメモリからとる方法は??


668:デフォルトの名無しさん
06/07/06 12:47:59
むり

669:デフォルトの名無しさん
06/07/06 13:05:30
FreeBSDやMac OS Xならば、
  fpurge(stdin)
で入力バッファに入っている文字を落とせる。

これが無いとちょっと面倒だけど、とりあえず改行文字まで
落としたかったら
  while(getchar() != '¥n');
でいいんじゃない?

670:初心者
06/07/06 13:06:42
何が無理?


671:初心者
06/07/06 13:13:37
>>669御免初心者なんで、FreeBSD<<わからない。
例として:
#include <stdio.h>
int main(void)
{
char gg[22],*gu;
char hh[33],*jj;

printf("数列入れて>\n");
fgets(gg,22,gu);
printf("数列いれ>\n");
fgets(hh,33,jj);

getc(stdin);
}
数列を多い目に入れると、次の入力ができない。


672:もはもは
06/07/06 13:14:46
HELPです!!!!!

1次元配列に 34 57 45 21 89 63 39 48 78 68 76 84 92 53 62 のデータをセットして、
これらの平均値を求めよ。
さらに int eval[3]という1次元配列を用意して
eval[0] には0~60の数の個数
eval[1]には61~80の数の個数
eval[2]には81~100の数の個数
を格納するようにし、それらを出力するプログラムを作成せよ。

よろしくお願いします。

673:デフォルトの名無しさん
06/07/06 13:29:23
>>671
どうゆう入力を想定してるの?

674:デフォルトの名無しさん
06/07/06 13:32:11
>>671
fgets(標準ライブラリのものと仮定)の使い方が間違ってる。
標準入力から入力して欲しいのなら、

fgets(gg, 22, stdin);
fgets(hh, 33, stdin);

のように書かなくては。

675:初心者
06/07/06 13:54:51
>>673
プログラムの一部なの。(全体は汚いプログラムなので見せない><)
まぁ、かんたんに言えば、
キーボードから入れた文字を好きな所まで取り
オーバーしたものは消す方法。
神様、私の願いを!!!

676:デフォルトの名無しさん
06/07/06 14:09:56
何が言いたいのかよくわからん。
Cより前に日本語をちゃんと勉強しろよ。

677:デフォルトの名無しさん
06/07/06 14:17:55
留学生か?>初心者

678:初心者
06/07/06 14:22:39
勉強中です><(怒らないで);
(本当に外国人です!!!日本語下手で御免なさい><);
会社からcを無理やり勉強させました。
お願いします。

679:デフォルトの名無しさん
06/07/06 14:27:35
english ok

680:デフォルトの名無しさん
06/07/06 14:29:31
・・・変数宣言って何・・・?

681:初心者
06/07/06 14:29:39
むり!韓国語なら>>

682:初心者
06/07/06 14:36:10
#include <stdio.h>
int main(void)
{
char gg[22],stdin;
char hh[33],stdin;

printf("数列入れて>\n");//ここに20文字以上入れるとおかしくなる
fgets(gg,22,stdin);
printf("数列いれ>\n");
fgets(hh,33,stdin);

getc(stdin);
}


683:デフォルトの名無しさん
06/07/06 14:51:10
>>682
おかしくなるのは仕様です。面倒ですが、次のように大きなバッファを用意して、
そこに一旦とりこむ必要があります。配列の大きさよりひとつ少なくしか使えないのは、
最後にヌル文字を入れる必要があるからです。

#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[1024];
char gg[22];
char hh[33];

printf("数列入れて>\n");
fgets(buf, sizeof buf, stdin);
buf[strlen(buf) - 1] = '\0';
memset(gg, '\0', sizeof gg);
strncpy(gg, buf, sizeof gg - 1);

printf("数列いれ>\n");
fgets(buf, sizeof buf, stdin);
buf[strlen(buf) - 1] = '\0';
memset(hh, '\0', sizeof hh);
strncpy(hh, buf, sizeof hh - 1);
}

684:初心者
06/07/06 15:09:57
>>683
先に入れる所用意する事までは分かりました。
でもこれも限界がある(入力がbufの1024字超えれば)と思います。
(他にも使い所あるので><)
butに無限入力できる方法ないかしら??
(どんな入力も対応できる方法)
よろしくおねがいします。

685:デフォルトの名無しさん
06/07/06 15:13:22
ハードウェアのリソースが有限な以上
どんな入力にも対応するなんてのは無理。
そのために仕様が存在する。

686:初心者
06/07/06 15:20:06
>>685
そうなんですか!!!!
本当にありがとうございました。
はんぱな日本語で迷惑かけました>>礼>>

687:デフォルトの名無しさん
06/07/06 20:02:38
CとJavaで、初心者が学びやすいのはどちらでしょうか?
最初に学ぶのはどちらがいいのでしょう…?
またCとJavaは数学的な要素(計算など)がどちらも必要になってくるのでしょうか。
返信お願い致します。

688:デフォルトの名無しさん
06/07/06 20:11:10
>>687
将来プログラミングで生計を立てたいのなら、まずCから。もちろんその後Javaもやる。
趣味でやるならどちらでも。Javaオンリーでもかまわない。

689:デフォルトの名無しさん
06/07/06 20:26:42
>>688
そうですか。
計算などが出てきてしまうと辛いのですが、両者とも計算式を
使ったりするのですか?

690:デフォルトの名無しさん
06/07/06 20:35:08
>>689
プログラミングでどのようなものをやるのかによる。

が、言語そのものの学習中にはほとんど出てこない。
数学的センスがあったほうが有利な場面があるかもしれないが。

691:デフォルトの名無しさん
06/07/06 20:52:14
>>690
わかりました。ありがとうございます。

692:デフォルトの名無しさん
06/07/06 21:03:06
でも1 + 1やx + yもいわゆる計算式ではないだろうか。

693:デフォルトの名無しさん
06/07/06 21:05:18
>>692
ええ、計算式です。間違いなく計算をする数式です。

694:デフォルトの名無しさん
06/07/06 21:09:13
>>692>>693
それはCとJavaの両方とも使うのですか?
Cは関数を計算し求めると聞いたのですが、Javaもなのでしょうか。

695:デフォルトの名無しさん
06/07/06 21:12:42
>>694
その書き込み、本気なのか?
だったら、プログラミングなど勉強するだけ無駄だからやめとけ。

696:デフォルトの名無しさん
06/07/06 21:18:31
数学がさっぱりでもいいが、算数は必須。

697:デフォルトの名無しさん
06/07/06 21:27:52
>>695
私情でやらざるを得ない状況になりましたので、今回[入門]とあったこちらで
質問致しました。

レス参考にさせて頂きます。ありがとうございました。

698:デフォルトの名無しさん
06/07/06 21:31:17
まずやってみたら?プログラミングがどんなことするか分かってない気がする

699:デフォルトの名無しさん
06/07/06 21:49:20
ここにもチョンが湧いてるのか。
ミサイル発射の謝罪と補償を要求する!

700:デフォルトの名無しさん
06/07/06 22:06:02
ここの回答者の人たちは参考書は何を読んで覚えたんですか?
0から始めた参考書と、それなりにわかってから読んだ参考書を教えてください

701:デフォルトの名無しさん
06/07/06 22:17:54
言語としてのCに限るなら林のビギナー編だけしか読まなかったな。
もう後輩に売っちまった。

702:デフォルトの名無しさん
06/07/07 00:42:13
>>699
お前ひとりに直撃すりゃあ良かったのにな。

703:デフォルトの名無しさん
06/07/07 11:30:11
在日は速く半島に帰れ!
また有事の際に日本で儲けていたと半島のチョンに蔑まれ続けるぞ。

704:デフォルトの名無しさん
06/07/07 11:33:22
>>700
0からK&Rの第一版。
20年ぐらい前に覚えたのだが、それ以上にまともに書いてある本はなかった。
その後第二版も読んだ。

705:デフォルトの名無しさん
06/07/07 11:41:42
>>703
憂さ晴らしは妥当な板でどーぞ

706:初心者
06/07/07 12:01:46
>>699話す事あるなら他のレスでどうぞ、
(ちゃんと見るから!!)
このレスを汚くするな!!

707:デフォルトの名無しさん
06/07/07 16:37:53
PGの雇用が奪われてるのは、不法滞在し異常に安い賃金で働くチョンのせい。

708:デフォルトの名無しさん
06/07/07 18:55:02
>>706
いちいち反応するな。流せ

オレモナー

709:デフォルトの名無しさん
06/07/07 23:24:53
>>706の「レス」に反応

710:デフォルトの名無しさん
06/07/07 23:39:50
ごめんね、スレとレスの違いも分からなくて
ごめんね

711:デフォルトの名無しさん
06/07/07 23:44:17
ごめんね、ごめんね、ごめんねごめんね、
ごめんねごめんね、ごめんね、ごめんね、
ごめんね、ごめんね、ごめんねごめんね、
ごめんねごめんしねごめんね、ごめんね、
ごめんね、ごめんね、ごめんね、ごめんね
ごめんねごめんね、ごめんね、ごめんね、

712:デフォルトの名無しさん
06/07/08 10:29:13
チョン氏ね!

713:デフォルトの名無しさん
06/07/09 00:22:08
エンターキーが押されたかどうかの判定の仕方と、
スペースキーが押されたときの判定の仕方を教えてください

714:デフォルトの名無しさん
06/07/09 00:29:35
環境に依存するからもうちょっと情報だして

715:713
06/07/09 00:37:55
標準c言語で、コマンドプロプト上で動かすコンソールアプリです。
OSはWindowsXPです。よろしくお願いします

716:デフォルトの名無しさん
06/07/09 03:15:58
VC++4.0でXP用のソフトを組んでます。
操作ミスなどで警告音を鳴らしたいのですが、
MessageBeep()関数だと単純な音しか鳴らせず、おもしろくありません。
かといって、警告音のためにWAV作ったりするのも大変なので、
少しだけシャレた警告音を簡単に慣らす方法がありませんか?

717:デフォルトの名無しさん
06/07/09 03:24:07
Beep()を沢山つかって音楽でも奏でてはいかが?
10ミリ秒ごとにアルペジオさせれば和音っぽく聞こえて
周りをちょっと驚かすぐらいはできるよ。

718:デフォルトの名無しさん
06/07/09 03:36:44
適当に答えてみる。
>>713
標準c言語だと、getchar()かな?
でも、エンターが押されないと、stdinに入ってこない。
MS-Cだと、getch()が1文字ずつとれる。(エコーなし)
エコーしたいなら、getche()。
<conio.h>に入っている。

719:デフォルトの名無しさん
06/07/09 04:20:51
CでGUIアプリ作る方法教えてください

720:デフォルトの名無しさん
06/07/09 05:49:53
Cでかいたプログラムから命令(メッセージ?)送ると
グラフィックだけ出力してくれるサーバっぽいアプリケーション
ってないですか?


721:デフォルトの名無しさん
06/07/09 05:57:51
X?

722:デフォルトの名無しさん
06/07/09 05:58:37
あ、「Windows」の方が適切かな

723:デフォルトの名無しさん
06/07/09 06:12:09
適当に答えてみる。
>>720
system("start C:\\temp\\test.gif");
なんてやれば、windowsならgif拡張子に関連付けしてるアプリを
よんでくれるはず。(.bmpとか.jpgでもOK)

724:デフォルトの名無しさん
06/07/09 11:38:34
OpenGLとかActiveXの記述だけで描画してくれるアプリが欲しいってこと?
普通は鯖といちいち通信するのが面倒だから自前でライブラリ抱えます。

少しだけシャレた警告音はwavでも鳴らさないと無理な悪寒。
どんなのが少しだけシャレた警告音なのか録音してウpしてみてくれ。

常に入力を監視する。
スペースかリターンが押されたのを判定すればいい。
普通はキー入力があったらイベント飛んで来るから、入力に対応した処理を記述しておけばOSが実行してくれる。

725:713
06/07/09 11:39:33
適当な回答ありがとうございます。参考になりました

726:デフォルトの名無しさん
06/07/09 11:56:05
MS Visual C++ NET
BorLand C++ Builder6
てどちらが使いやすい?



727:デフォルトの名無しさん
06/07/09 22:16:51
両方使ってみてそれぞれにスレがあるから感想でもカキコしてみたら?
ムカつくほうは使わないほうがいいと思う。ストレス感じるだけ。

728:デフォルトの名無しさん
06/07/09 23:29:29
>>726
単なる数値計算やら簡単なプログラム(アルゴリズムの勉強)程度なら
Borland C++ 5.5が手軽で良いYO!

729:716
06/07/10 01:26:04
>>717
10mS毎に?
うーん、他にいい方法がなかったら試してみます(汗

730:デフォルトの名無しさん
06/07/10 01:36:13
質問です。
「'」という文字を配列に格納したいのですが、エラーが出てうまくいきません。
エラーは以下の3つです。
文字列定数は1文字か2文字でなければならない。
,が必要。
文字列または文字定数が閉じていない。

宜しくお願いします。

731:デフォルトの名無しさん
06/07/10 01:41:01
¥’

732:デフォルトの名無しさん
06/07/10 03:17:38
>>731
ありがとうございます!

733:デフォルトの名無しさん
06/07/10 12:36:59
>>730-731
せめて半角で書いて欲しいとオモタ

734:デフォルトの名無しさん
06/07/10 20:38:16
CHAR PTCHAR TCHAR WCHAR型の違いを教えてください

735:デフォルトの名無しさん
06/07/10 21:49:40
typedef char CHAR;
typedef wchar_t WCHAR;
#ifdef UNICODE_
typedef WCHAR TCHAR;
#else
typedef CHAR TCHAR;
#endif
typedef TCHAR *PTCHAR;

736:726
06/07/10 21:50:19
>> 728
サンクス

737:デフォルトの名無しさん
06/07/10 21:58:42
putchar だけで文字コード 112、117等 を出力するプログラムを教えてください。

738:734
06/07/10 22:08:03
>>735
アリガ10

739:デフォルトの名無しさん
06/07/10 22:28:49
>>737
putchar(112)

740:デフォルトの名無しさん
06/07/10 22:58:26
そのまんまですな。

741:デフォルトの名無しさん
06/07/11 02:29:38
ワロタ

742:デフォルトの名無しさん
06/07/11 02:33:22
CでGUI?
WindowsならWin32
LinuxならGTK+
どっちもCライブラリ

743:デフォルトの名無しさん
06/07/11 09:08:17
>>728
BorlandC++と一緒にTurboDebugger落として使ってみたら、
このデバッガって、キャラクタ画面ベースのUIなのな。
あまりに懐かしいスタイルにめまいがしたyo!

744:デフォルトの名無しさん
06/07/11 16:09:48
GUIのデバッカってメモリ喰うしデバッカに落ちた時点で表示できないと思う。

745:デフォルトの名無しさん
06/07/11 22:50:17
DLL内でmallocした物をexeからfreeしてはいけないと聞いた事があるのですが
malloc以外のHeapCreateやHeapAlloc(GetProcessHeapとかなら問題ないのでしょうか?

746:デフォルトの名無しさん
06/07/11 23:12:42
>>745
確保するときと解放するときとで、同じヒープハンドルを用いれば問題ない。

けれどDLLでメモリを確保して、そこへのポインタをEXEに返すのだったら、
DLLはそのメモリを解放する関数も公開するのが一般的だと思う。

747:デフォルトの名無しさん
06/07/11 23:19:17
>>745
ちなみに前者がいけない理由が、ことなるメモリマネジメントルーチンを使っている
可能性があるから。VCのDebug/Releaseモードとか。

748:デフォルトの名無しさん
06/07/11 23:45:52
>>746-747
そのルーチン覗いてみるのも勉強になるかもしれませんね。
とりあえず一般的な方法でしてみたいと思います。
ありがとうございました。

749:デフォルトの名無しさん
06/07/12 01:01:46
VC++なんですが、以下のように配列を定義しています。
signed short foge[]={
0x0001,
0x7fff,
0x8000,
0xffff
};


コンパイルするとマイナス値(0x8000と0xffff)で
warning C4305: 'initializing' : 'const int ' から 'short ' へ切り詰めます。
というワーニングがでます。
C言語ではsigned 16bitを表す接尾子が無いようなんで、
キャストで回避するしか無いんでしょうか?


750:デフォルトの名無しさん
06/07/12 01:04:40
素朴な疑問。
何故const signed shortにしないのだろう。
それはさておき、-0x8000, -0x0001ではダメ?

751:デフォルトの名無しさん
06/07/12 01:11:56
>>749
よくわからないけど、キャスト以外の方法で、警告消したいだけなら
0x8000 → -32768
0xFFFF → -1
とか、#pragma とかがあるよ。

752:デフォルトの名無しさん
06/07/12 01:26:04
すみません
ファイルからの読み込みなのですが
改行がCR(0D)のみで書かれているテキストファイルから
テキストモードでデータを読み込みたいのです

fscanf(fp,"%d",&data1);
のように書くと、だいたいはCRのみの改行も改行として読んでくれるのですが
たまに改行をすっ飛ばして変な値を読んでしまいます

改行がCRのみのテキストファイルをうまく読み込む方法はありませんでしょうか

753:デフォルトの名無しさん
06/07/12 01:27:43
fgets()

754:デフォルトの名無しさん
06/07/12 10:47:28
>>752 だいたいうまくいくけど、たまに変になるって、違うところでバグってるんじゃないの?


755:デフォルトの名無しさん
06/07/12 11:17:19
3.4E-38って
0.00000000000000000000000000000000000000034?


756:デフォルトの名無しさん
06/07/12 11:49:45
>>755
0.000000000000000000000000000000000000034


757:デフォルトの名無しさん
06/07/12 14:13:29
>>756
あ、ごめん、3のところが38番目になればいいのね。
じゃあfloat型って3.4E-38~3.4E+38って書いてあるから
34000000000000000000000000000000000000~0.000000000000000000000000000000000000034?
でも有効桁7桁ってどういうこと?

758:デフォルトの名無しさん
06/07/12 14:42:48
>>757
>でも有効桁7桁ってどういうこと?
数学の時間寝てたのか
それともまだ習ってないのか
まあとにかくググれ。

759:デフォルトの名無しさん
06/07/12 15:01:17
ぐぐってもわからん
float fe;
fe=5e2;
って書くと
500.000000
って出力されるけど、どこが7桁?

760:デフォルトの名無しさん
06/07/12 15:21:00
>>759
俺のところで実行したらこうなるよ。

#include <stdio.h>

main()
{
float f = 1.0 / 3;
double d = 1.0 / 3;

printf("%.30f\n", f);
printf("%.30f\n", d);

return 0;
}

結果
0.333333343267440795898437500000
0.333333333333333314829616256247



761:デフォルトの名無しさん
06/07/12 15:22:11
グローバル変数を多用してしまうのですが、
変数を各関数で共有する方法ってグローバル変数以外に何かありますか?

762:デフォルトの名無しさん
06/07/12 15:31:49
>>757
3.4E-38 は 3.4 * 10の-38乗 だ。
有効桁数は扱える桁数。7桁なら 1.234567 とか 1.234567E+100 とか、
とにかく 7 桁は扱えるが 1.2345678 と書いても最後の 8 が扱えない。

>>759
どう出力されるかということと内部的に何桁保持されているかという
ことは別の話。


763:デフォルトの名無しさん
06/07/12 15:35:45
>>760
いやそうなるのはわかるけど、
float型が3.4E-38~3.4E+38で有効桁7桁ってどういう意味?
float f = 1.0/3
printf("%f")
だと
0.333333
で7桁まで出力されるって意味?
3.4E-38~3.4E+38ってどういうこと?
出そうと思えば50桁以上出せるけど…

764:デフォルトの名無しさん
06/07/12 15:39:15
>>761
必要な変数は構造体のメンバにして
その構造体へのポインタを受け渡しする。

765:デフォルトの名無しさん
06/07/12 15:39:28
>>762どうも
じゃあfloat型が3.4E-38~3.4E+38っていうのは?

766:デフォルトの名無しさん
06/07/12 15:50:21
普通に3.4*10^-38~3.4*10^38でしょ?
3.400000*10^38のほうが正しいかな?

767:デフォルトの名無しさん
06/07/12 15:53:15
>>764
ありがとうございます、さっそくチャレンジしてみます

768:デフォルトの名無しさん
06/07/12 15:53:27
>>766
はあ・・・
でも10の50乗でも100乗でも入力できるし出力も出来るよ?

769:デフォルトの名無しさん
06/07/12 15:56:39
なんかよくわかんないけど、まあこれでも読んでよ。

「浮動小数点型と誤差」
URLリンク(www.kyoto-su.ac.jp)

770:デフォルトの名無しさん
06/07/12 16:04:31
>>769
ああ…それよんだんだけど
1.175494 10-38 < float の絶対値 < 3.402823 10+38
って書いてあるよね。
私の本は
3.4E-38~3.4E+38
って書いてあるよ。
それで、例えば、
float f=1000000000000000000000000000000000000000000000000.00000000000000000000000000000000000000001;
printf("%40.40f",f);
って書いても
1000000000000000000000000000000000000000000000000.00000000000000000000000000000000000000001;
って表示されるよ。38超えてるよ?

771:770
06/07/12 16:07:09
あ、ちょっとコピペミスしたけど、気にしないで

772:デフォルトの名無しさん
06/07/12 16:11:00
>>770
コンパイラ何使ってるの?

773:デフォルトの名無しさん
06/07/12 16:11:58
floatよりdoubleの方が速いってよ

774:770
06/07/12 16:12:42
>>772
cygwinのgccだけど・・・

775:デフォルトの名無しさん
06/07/12 16:16:17
>>774
>>770のソースを「全部」コピペしてみて。動かしてみるから。

776:770
06/07/12 16:20:30
>>775え・・・でも770そのまんまだよ?

#include <stdio.h>

main(){
float f=1000000000000000000000000000000000000000.0000000000000000000000000000000000000001;
printf("%40.40f\n",f);
}

終わり。




777:デフォルトの名無しさん
06/07/12 16:22:13
>>776
うちでは"Inf"って表示されるけど・・・
gccのバージョンはいくつ?

778:770
06/07/12 16:24:22
gcc version 3.4.4 (cygming special)
です。

779:770
06/07/12 16:26:21
コンパイラの問題なの?

780:777
06/07/12 16:30:09
>>778
おかしいな・・・。うちとまったく一緒のコンパイラなのに。
ちなみに
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
ってやってみて。
8って表示されるはずだから。これはその数値がdouble型のリテラルだって
コンパイラが判断してることを示してる。それをfloat型に代入するときに
暗黙の型変換が行われるはずなんだけど・・・。

ってことで、俺はお手上げ。


781:777
06/07/12 16:30:42
あ、ちなみに"Inf"ってのはInfinityね。正の無限大。

782:デフォルトの名無しさん
06/07/12 16:34:30
>>770
そのソースでそのgccだと、警告が表示されると思うのだがそれをコピペして見給え。

783:770
06/07/12 16:38:20
>>777
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
ってしたら
core dump
しました。
うちの環境がおかしい?WinXP Cygwin最新のものだけど…
入れなおすか…?

どうもありがとうございました。うちがおかしいってことが分かったのでうれしいです。


784:777
06/07/12 16:39:20
>>782
-Wallでも出ない。

785:デフォルトの名無しさん
06/07/12 16:39:53
釣りか? 壮大な釣りだったのか?

786:770
06/07/12 16:41:12
>>783
あ、いや、間違ってた
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
でちゃんと8って表示されました。

>>782
警告も何にも出ませんよ。普通にa.exeすると結果表示されます。

787:777
06/07/12 16:42:35
>>786
んじゃ、最後にuname -aした結果をコピペしてくれ。

788:782
06/07/12 16:46:07
>>770
>>777
警告出ないか? main()の戻り値の型がないと。漏れの端末だとこうなるのだが。
--
$ gcc --version ; gcc foo.c
gcc (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

foo.c:3: warning: return type defaults to `int'
foo.c: In function `main':
foo.c:6: warning: control reaches end of non-void function

789:770
06/07/12 16:47:14
う~Cygwinコピペできないからつらい
uname -a は
CYGWIN_NT-5.1 ****** 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin
です。名前は伏せ。珍しくもないけど

790:デフォルトの名無しさん
06/07/12 16:48:04
>警告も何にも出ませんよ。普通にa.exeすると結果表示されます。
make使ってて更新されたと認識されていないとか、違うところのa.exeが起動されているとか。
make使わず直接gccを動かしてみるとか、明示的にパスを指定してみるとかしてみたら?

791:デフォルトの名無しさん
06/07/12 16:49:54
普通にcygwinをインストールすると所謂dos窓で動くから、
マウスで範囲選択して右クリックでコピペされると思うけどなぁ。

792:デフォルトの名無しさん
06/07/12 16:50:08
sizeof(float) が 8 だったりしたら…


793:777
06/07/12 16:51:56
>>788
あ、すまん、そこは警告出る。警告でないといったのは、4,5行目に関して。
手間かけさせてスマンかった。

794:777
06/07/12 16:53:26
>>789
うちより一つ新しいバージョンだな。ちなみにうちは、
CYGWIN_NT-5.1 MARS 1.5.18(0.132/4/2) 2005-07-02 20:30 i686 unknown unknown Cygwin

最新の1.5.20も怪しいところがあるみたいだから、しばらく更新はしないでおこうw

795:770
06/07/12 16:53:38
>>782
あ、範囲指定できたんだCygwinて・・・
gcc (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

しかでません。makeつかってません。フォルダの中にa.exeもソースも一個しかありません。


796:デフォルトの名無しさん
06/07/12 16:56:04
実行するときに

./a

または

./a.exe

でやってる?


797:770
06/07/12 16:56:57
>>796
やってますよ~
そこまでバカではない・・・w

798:デフォルトの名無しさん
06/07/12 16:58:25
じゃあ sizeof(float) はいくつ?
printf("%d\n", sizeof(float));
で出してみて。


799:770
06/07/12 17:01:15
8ですた。

800:782
06/07/12 17:03:02
漏れの方は同じだな。Win2Kだけど。
CYGWIN_NT-5.0 whee 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin

コンパイラよりも疑うべきはライブラリか?

801:782
06/07/12 17:04:57
>>799
それが原因か……
#じゃぁなんでfloatが8バイト? 64ビットLinuxでも4バイトなのに……

802:770
06/07/12 17:09:16
>>801
やっぱおかしいんすね。環境作り直します。
Cygwin入れなおします。ちゃんと正規のルートで(学校の先輩からもらわずに)。
どうも失礼しました。

803:デフォルトの名無しさん
06/07/12 17:13:31
いやまぁ先輩から貰っても全然OKなんだが、オチを知りたいんだよなぁオチを・・・

804:デフォルトの名無しさん
06/07/12 17:14:13
はっ、その先輩がスーパーハカーだったというオチ!?

805:デフォルトの名無しさん
06/07/13 13:27:50
自分でコンパイルしたのかな?
>>804
gcc を自分でコンパイルできるとスーパーハカーなの?
じゃあ俺も10年ぐらい前からスーパーハカーだったんだね。


806:デフォルトの名無しさん
06/07/13 13:38:59
猫でもわかるC言語プログラミングって本を読んで勉強はじめたんだけ
この本の説明めちゃくちゃ解り辛い・・・
まぁ単に俺が知識0ってこともあるんだろうけど、どの入門書籍もこんなもん?

807:デフォルトの名無しさん
06/07/13 14:12:46 BE:224654459-#
猫でもわかるの書籍版は読んだことないけど、プログラムそのものが
まったく初めてなら、入門書一冊読んだだけじゃなかなか難しいと思う。


808:デフォルトの名無しさん
06/07/13 14:15:29
どの本でも同じだけど、HelloWorldが動いているのを見て喜べるピュアな心の持ち主なら
どんな本読んでも上達出来ます。

809:デフォルトの名無しさん
06/07/13 14:15:50
猫以下なんじゃね?

810:デフォルトの名無しさん
06/07/13 14:31:58
プログラムそのものが難しいって言うより、説明が言葉不足だったり
説明なしでいきなり「ここはこうなりますね、ここはこうなるので」
みたいなところが多くて・・・

Cからはじめるのがそもそも間違いなんだろうか

811:デフォルトの名無しさん
06/07/13 17:53:08
>>810
まずはAから段階を踏まないと

812:デフォルトの名無しさん
06/07/13 18:32:39
>説明なしでいきなり「ここはこうなりますね、ここはこうなるので」
そういうのに一々疑問を持ってストレスを貯めるやつはプログラム書けないよ
すべてそういうもんなんだと素直に覚えないと。
そもそもプログラミングの入門書って根幹に触れないからみんな説明不足といわれれば説明不足になる罠


813:デフォルトの名無しさん
06/07/13 18:44:26
英語だって、なんでアルファベットなんだろうとか思い始めたらダメだよ。
挨拶はハローとか決まりきった定型パターンがあるからそう言うのは理屈無しに覚えるしか無い。

日本語でも、10年以上話して使っていて未だに表現方法とかの新発見がある様に、覚えたてでその言語の全てを理解するのは無理。

とりあえず義務教育の英語の教科書の様に、入門書を最後まで一通りやってみて、分からない所は他の書籍や先輩に訊くとかセミナーや研修にでも出るとかで補完していかないと。
自分でそう言う学習法が出来ない香具師は、金出してスクールに通ったほうがいいよ。

814:デフォルトの名無しさん
06/07/13 18:49:56
心配しなくてもあとで「そういうことだったのか!」って気づくことになるから安心してその本をまずは読破すれ。

815:デフォルトの名無しさん
06/07/13 19:04:24
理系が文章力カスなのはわかりきったことだろ

816:デフォルトの名無しさん
06/07/13 22:45:20
とりあえずは鵜呑み丸暗記にしておいて
必要が出てきたり気になったら自分で調べたりこういう場所とかで聞けばいいよ

入門書の中には一部間違ったことが書いてあるものもあるから
完全に鵜呑みってのもちょっとまずいことはまずいんだけどね
まあ気にするな

817:デフォルトの名無しさん
06/07/14 01:46:26
C++で7桁×7桁の計算プログラム組んでるんですが
float使ったら小数点以降が表示されてあまり美しくない。
小数点以降を表示しない方法、教えてください。

818:デフォルトの名無しさん
06/07/14 01:52:24
main()
{
Card deck[40];
int *face[] = {1,2,3,4,5,6,7,8,9,10};
char *suit[] = {"hart","daiya","kurab","superd"};


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

printf("baeojunnbisimasu");
return 0;
}
プログラミングの一部なんですが 
コンパイルが通りません
int faceのところがだめらしいのですが何処が悪いんでしょうか?
どなたか解る方おしえてください

819:デフォルトの名無しさん
06/07/14 01:54:23
>>817
整数型にcastして表示しろ

820:デフォルトの名無しさん
06/07/14 01:55:12
>>818
int *faceではなく、int face

821:デフォルトの名無しさん
06/07/14 02:02:38
ごめん、castって何?

#include <stdio.h>

int main(void)
{
float alfa, beta, ganm;

printf("7桁の整数を入力して下さい(1回目):");
scanf("%f",&alfa);
printf("7桁の整数を入力して下さい(2回目):");
scanf("%f",&beta);

printf("\n%f * %f = %f\n", alfa, beta, alfa * beta);
}

822:デフォルトの名無しさん
06/07/14 02:11:56
>>820さん
マジでありがとう^^
通りました

823:デフォルトの名無しさん
06/07/14 03:31:14
%fではなく%gを使う習慣をつけよう。
#って話か?

824:デフォルトの名無しさん
06/07/14 08:34:11
#include<stdio.h>

int main(void)
{
int n,temp,m=0;
FILE*fp1=fopen("2バイト文字.txt","r");
FILE*fp2=fopen("改行テスト.txt","w");

while((n=fgetc(fp1))!=EOF){
if(n=='\n'){
m=0;
}
else if(m==40){
fputc('\n',fp2);/*ここが上手くいかない模様*/
m=0;
}
fputc(n,fp2);
m++;
}
fclose(fp1);
fclose(fp2);
printf("end\n");
return 0;
}

825:824
06/07/14 08:37:11
2バイト文字、日本語のテキストを行の文字数20で改行するようなプログラムを作りたいです。
例えば、行の文字数40のやつを、原稿用紙の形式に変換したい。

しかし、>>824のやつだと、改行後の一文字目が変になってしまいます。
文字コードの問題なのかどうかすら分かりません。
ここが変だ、という場所の指摘をお願いします。

826:824
06/07/14 08:44:11
失礼。
tempとprintf("end\n")は気にしないで……。

827:デフォルトの名無しさん
06/07/14 10:15:49
超基本問題です。
main(){

int i;
float f;
double d;
long l;
char st[80];

printf("文字1文字,%%c,int,%&i=");
scanf("%c",&i);
printf("%%c,int,i=%c\n",i);

printf("文字列,%%s,char,st=");
scanf("%s",st);
printf("%%s,char,st=%s\n",st);
printf("文字列入力の時には&は不要\n");

printf("8進数%%o,int,%&i=");
scanf("%o",&i);
printf("%%o,int,i=%o\n",i);
printf("%%d,int,i=%d\n",i);

printf("10進数%%d,int,%&i=");
scanf("%d",&i);
printf("%%d,int,i=%d\n",i);


828:デフォルトの名無しさん
06/07/14 10:17:35

printf("16進数%%x,int,%&i=");
scanf("%x",&i);
printf("%%x,int,i=%x\n",i);
printf("%%d,int,i=%d\n",i);

printf("long型%%ld,long,%&l=");
scanf("%ld",&l);
printf("%%ld,long,l=%ld\n",l);
printf("%%d,int,l=%d\n",l);

printf("実数float型%%f,float,%&f=");
scanf("%f",&f);
printf("%%f,float,f=%f\n",f);
printf("%%d,int,f=%d\n",f);

printf("実数double型%%lf,double,%&d=");
scanf("%lf",&d);
printf("%%lf,double,d=%lf\n",d);
printf("%%d,int,d=%d\n",d);

}
これやると、例えば
8進数%o,int,&i=70
とか入れると、iに7しか入ってくれなくて、0が次の10進数の処理に自動的に入っちゃうんだけど、なぜ?


829:デフォルトの名無しさん
06/07/14 11:01:09
親から習う日本語が方言訛りで一部怪しかったりしても、使ってるうちに標準語の表現に気づいて修正できるものだよ。
もちろん最初から標準語で覚えられるような環境を探すのも手。

gcc方言とか、IA方言とか、VC方言とかウィンドウズ方言とかいくらでも環境依存の癖はある。

830:デフォルトの名無しさん
06/07/14 11:39:34
>>829
その直前の文字列の入力をコメントにしたらどうなる?

831:デフォルトの名無しさん
06/07/14 13:17:59
すいませんこのプログラムのどこがわるいかおしえてもらえないでしょうか
うるう年の判定プログラムで
#include<stdio.h>

int main(void){
int n;
n=1;
printf("年数を入力してください");
scanf("%d",&n);

if(n%400=0)printf("うるう年である");
else if(n%4=0&&n%100!=0)printf("うるう年である");
else printf("うるう年ではない");

return(0);}

左辺の値がないとかエラーがでるんですけど

832:デフォルトの名無しさん
06/07/14 13:30:41
初心者乙

833:デフォルトの名無しさん
06/07/14 13:44:21
>>831 ==だよ。

>>830
今度は、
8進数%o,int,&i=179
と3桁にすると、iに17が入って、9が次の10進数の処理に自動的に入ります。
なぜ?

834:824
06/07/14 17:19:31
>>833
scanf("%c",&i);の時、1000とか入力すると、%cの分の1をscanf("%c",&i);で取り込み、残りの000は次のscanf("%s",st); に勝手に入力されてしまう。

8進数だから、7、8、9なんかは入力できない。
すると179は17まで8進数と見なされ、残りの9は型が違うものと認識される。
17dとか入力しても同様。

型が違うものと認識されたものは、次のscanfに勝手に入力されてしまう。
標準入力ストリームがバッファリングの構造を取るから。
型が違うもの、と認識されたものは、一度バッファに戻ってから、次のscanfに入力されてしまう。

環境によっては、scanf("%d",i);のところで、a、とか入力すると、
型が違うものだからバッファに戻す→バッファからaがscanfに入力される
というルーチンを延々と繰り返してしまう。
この繰り返しが起こらない環境ならば、型が違うものでも強制的な変換が行われ、scanfに取り込まれるということ。

835:デフォルトの名無しさん
06/07/14 18:40:08
>>834
どうもありがとう
なるほどね・・・

836:デフォルトの名無しさん
06/07/14 21:29:18
>>824
while((n=fgetc(fp1))!=EOF){
fputc(n,fp2);
m++;
if(n=='\n'){
m=0;
}
else if(m==40){
fputc('\n',fp2);
m=0;
}
}

入力ファイルがすべて 1文字==2バイトと決まっているならこれで良いけど
wchar_tを使うか、文字コードの判定をするかしたほうが良いかも。

837:824
06/07/14 21:55:49
>>836
なるほど。

838:デフォルトの名無しさん
06/07/15 08:47:40
パチンコのシミュレーターを作ろうと思ってるんですが、

確変をひいた場合にループをさせる時どのようにすればいいのでしょうか?

for(;;){
switch(GetRandom(1,2)){
case 1:b++;
case 2:break;

}
}

乱数で1だったらループ2だったらfor文を抜けたいとおもうのですが、
これだと止まってしまいます。何故でしょうか。

839:デフォルトの名無しさん
06/07/15 09:19:20
>>838
直接の原因は、break は一つ外側の構文に対してしか作用しないこと。
switch 内で break しても、その switch の外側に抜けるだけ。
それで結局、for を抜け出せなくて無限ループになっている。
ネストされた構文から任意の場所に制御を渡したい場合は goto を使うか、
関数を書いてそれを呼ぶしかない。

あと、その case の書き方はやめておけ。
switch はフォールスルーと言って、break を書いておかないとその後の
case にある処理に突入してしまう。

for(;;){
switch(GetRandom(1,2)){
case 1:
b++;
break;
case 2:
goto end_for;
}
}
end_for: ;

840:デフォルトの名無しさん
06/07/15 09:27:03
>>838 なんか初めの方の文章がよくわからねいけど
そのbreakでは、switch文しか抜けられない。
for文を抜けたければ、goto文とかflagをつかえばいい。
◆goto文の場合
for(;;){
switch(GetRandom(1,2)){
case 1:b++;
case 2:goto FOR_EXIT;
}
}
FOR_EXIT:;
◆flag
int flag = 1 ;
for(;flag;){
switch(GetRandom(1,2)){
case 1:b++;
case 2:flag=0;
break;
}
}

841:840
06/07/15 09:28:39
かぶった。しかも劣化している。。。839のいうとおりだ。

842:デフォルトの名無しさん
06/07/15 09:33:50
>>839,840
ありがとうございます。
gotoが便利そうなんでそっちを使いたいとおもいます。
これでやっと先に進めそうです。

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

843:デフォルトの名無しさん
06/07/15 09:39:09
1と2しか判定しないなら素直に
for(;;){
if(GetRandom(1,2)==2) break
b++;
}
も頭の隅っこに置いとくといいかも

844:デフォルトの名無しさん
06/07/15 10:24:29
質問です~
char st[10]="text";
char *p;
p=st;
すると、st[10]の先頭アドレスがpに入るって書いてあるんですけど、
printf("%p,%p",p,&p);
pの値と&pの値が違うのはどうしてですか?


845:デフォルトの名無しさん
06/07/15 10:32:48
いくらpにstを代入しても、あくまでpはpという1つの変数だから。

846:デフォルトの名無しさん
06/07/15 10:44:26
あーなるほど。どうも~

847:デフォルトの名無しさん
06/07/15 17:31:59
pと&pの違いは重要
と言ってみる

848:デフォルトの名無しさん
06/07/15 22:31:54
念のため聞いておきたいんですが、参考書を見るとコマンドプロンプトで表示させるだけっぽいですけど
ちゃんと画像のついたソフトやゲームなんかも作れるんですよね?

849:デフォルトの名無しさん
06/07/15 23:51:47
>>848
できるけど、標準Cと言われるものの範囲では、画像を表示するなどと言ったことができず、
また、コマンドプロンプトで文字を入出力するのとは、桁違いに面倒だから、入門レベルでは扱わないというだけ。

850:デフォルトの名無しさん
06/07/16 03:37:48
質問させてください。
自分はVB8アカデミック(=SE)を使っているのですが。
#include <stdio.h>
int main(void){ printf("HELLO"); return 0; }
のようなDOS窓で動作するようなコードは正常にコンパイルできるのですが、
#include <windows.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
) {
MessageBox(NULL, "Kitty on your lap","メッセージです。", MB_OK);
return 0;
}のようなウィンドウズアプリケーションをコンパイルしようとすると必ずエラーがでてしまいます。
↑のコードは今思い出しながら書いたものなのでもしかすると間違っている箇所もあるかも
しれませんが書籍を参考に10個ほどサンプルを丸写ししてコンパイルしても同じ結果だったので
コードに問題はないと思います。
VB8を再インストールしてみたりもしたのですがまったく効果がなく、もしかして
インストール後になにか他にもインストールしたり環境設定したりと別の作業が必要なのかとも思ったのですが・・・・
どなたか原因がわかる方がいらっしゃいましたら助言いただけないでしょうか。
BBSもプログラミングも初心者なもので失礼もあるかとは思いますがよろしくお願いします。長文ですみません^^;

851:デフォルトの名無しさん
06/07/16 03:41:08
if(){}って()内が1なら{}が実行されるんですか?
それとも0以外なら実行されるんですか?

852:デフォルトの名無しさん
06/07/16 03:50:05
真なら実行され偽なら実行されない

853:デフォルトの名無しさん
06/07/16 03:50:16
>>850
書店に行って、自分に合う入門書を買ってくること。

854:デフォルトの名無しさん
06/07/16 03:51:47
>>851
()内に=や<>なんかがない場合は
()の中に入る数字(変数でもいい)が0以外なら真と見なしループを続ける(=実行)
0以外なら偽と見なしループを抜け出します。


855:デフォルトの名無しさん
06/07/16 03:56:20
>>854
ありがとうございました

>>853
入門書読んでるんですけど、そこがかいてなかったのです

856:デフォルトの名無しさん
06/07/16 03:59:06
ここは回答者の入門スレなのか?
堂々と間違った回答をされても困るんだが。

857:デフォルトの名無しさん
06/07/16 04:09:32
>>851さんごめんなさい。。。
while文とごっちゃになってましたOrz
真ならループではなくただ実行されるだけでした
偽ならスルーします。
>>856さんこれであってますでしょうか?

858:デフォルトの名無しさん
06/07/16 07:15:37
1と2しか判定しないなら素直に
for(; GetRandom(1, 2) != 2; b++)
;

859:デフォルトの名無しさん
06/07/16 07:49:25
そして結局
while(GetRandom(1, 2)!=2)b++;

860:デフォルトの名無しさん
06/07/16 07:58:25
>854
>0以外なら偽と見なし(略)


861:デフォルトの名無しさん
06/07/16 09:00:28
>>850
エラーメッセージを書け。
あと、CのコンパイルにVBは関係ないだろ。

862:デフォルトの名無しさん
06/07/16 13:04:57
あの~
2進数表記する型ってないんですかね。
ライブラリさがしてるんですけど・・・

863:デフォルトの名無しさん
06/07/16 13:30:54
>>862
#include <stdio.h>

/* 静的アサーション */
void SASSERT_(int(*p)[1]) { }
#define SASSERT(b) SASSERT_((int(*)[(b) ? 1 : -1])0)

/* 2進1バイトリテラル */
#define BYTE2(x) \
 (SASSERT(1 < sizeof (#x) && sizeof (#x) <= 9), /* 1~8 文字に制限 */ \
  SASSERT((0x##x & ~0x11111111) == 0), /* 余計なビットがあるとエラー */ \
  (0x##x >> 0) & 0x01 | \
  (0x##x >> 3) & 0x02 | \
  (0x##x >> 6) & 0x04 | \
  (0x##x >> 9) & 0x08 | \
  (0x##x >> 12) & 0x10 | \
  (0x##x >> 15) & 0x20 | \
  (0x##x >> 18) & 0x40 | \
  (0x##x >> 21) & 0x80)

/* 2進2バイトリテラル */
#define WORD2(x1, x0) ((BYTE2(x1) << 8) | BYTE2(x0))

/* 2進4バイトリテラル */
#define DWORD2(x3, x2, x1, x0) ((WORD2(x3, x2) << 16) | WORD2(x1, x0))

int main() {
 printf("%X\n", BYTE2(01011011));
 printf("%X\n", WORD2(11001011, 10000011));
 printf("%X\n", DWORD2(01011011, 11001011, 10000011, 00000000));
}

864:デフォルトの名無しさん
06/07/16 13:31:52
型…?

もしかしてBASICの&Bみたいに2進でリテラル書きたいってこと??

865:デフォルトの名無しさん
06/07/16 13:56:36
>>863 ちゃいまんねん
>>864 そうそう。型指定文字のこと。

866:デフォルトの名無しさん
06/07/16 14:42:03
ない

867:デフォルトの名無しさん
06/07/16 14:43:17
ないからこその代案が>863なわけだな。

868:デフォルトの名無しさん
06/07/16 14:44:15
2進でリテラル書きたいだけなら、
>>863 で何か不都合でもあるんだろうか。
文法的な事を知りたかっただけなの?

869:デフォルトの名無しさん
06/07/16 14:46:04
>>863の(0x##x >> 0) & 0x01ってどういういみですか?
すいませんが説明していただけるとたすかります

870:デフォルトの名無しさん
06/07/16 14:48:24
やっぱいちいち計算しなきゃ駄目なのか・・・

871:デフォルトの名無しさん
06/07/16 14:50:36
256通りのテーブル作って、テーブル引きしたほうが早くないか?

872:デフォルトの名無しさん
06/07/16 14:52:09
0x##x は、0x と x(マクロの引数)をくっつけるもの。
例えば、BYTE2(01011011) なら 0x##x は 0x01011011 になる。
この時、結局 (0x##x >> 0) & 0x01 は
(0x01011011 >> 0) & 0x01 になる。
つまり、0 ビット目を抜き出す操作に相当する。
(0x##x >> 3) & 0x02 は 4 ビット目を 1 ビット目に持ってきて、
それ以外のビットを消す。
(0x##x >> 6) & 0x04 は 8 ビット目を 2 ビット目に持ってきて(ry
こうやって、0x01011011 を2進数 01011011 にしている。

これらの計算は静的に行われるので、
コンパイル時に全部計算が行われて、
単なる定数に置き換わる。
速度は気にする必要ない。

873:862
06/07/16 14:52:11
あ!そういうことか!
どうもトンクス>>863-868

874:デフォルトの名無しさん
06/07/16 14:57:22
>>872
へー、それ知らんかった。勉強になった。

875:850
06/07/16 19:52:59
>>861
訂正。
×自分はVB8アカデミック(=SE)を使っているのですが。
○自分はVS8アカデミック(=SE)を使っているのですが。
エラーメッセージは850で書いたコードをコンパイルした場合、
(9) : error C2664: 'MessageBox' : 2 番目の引数を 'const char [18]' から 'LPCTSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
というメッセージがでます。

876:デフォルトの名無しさん
06/07/16 20:05:10
>>875
_T("Kitty on your lap")
_T("メッセージです。")
とするか
プロジェクトのプロパティ→構成プロパティ→全般→文字セット→マルチバイト文字セットを使用する
に設定。

LPCTSTRはUnicodeを使うかマルチバイト文字を使うかでLPCWSTRかLPCSTRになる。
MessageBoxもMessageBoxWとMessageBoxAで切り替わる。
単にダブルクォーテーションで囲んだだけだとcharの配列 → LPCSTRに変換→引数の型不一致。
文字列リテラルを_T()で囲むとUnicodeの時には頭にLを付けてくれるからLPCWSTRにできる。

877:デフォルトの名無しさん
06/07/16 20:37:58
質問です。
これの間違いを教えて頂きたいッス!
文字列を入力させる。その中に”ABC”という部分文字列(連続)が含まれていれば「OK」、そうでなければ「NO!」と出力される。
#include<stdio.h>
main()
{
char moji[256];
int n=0,flag=0;
scanf("%s", &moji[n]);
while(moji[n]!='\0'){
if(moji[n]=='O' && moji[n+1]=='U' && moji[n+2]=='P')flag=1;n++;}
if(flag=1){printf("OK\n");}
else printf("NO!\n");
}

878:875
06/07/16 20:48:57
>>876
詳しい説明ありがとうございますっ
しかし知識がなさすぎて理解できませんでしたOrzすみませんホント
林○比古の本でも買って勉強してきます。
ありがとうございました。

879:デフォルトの名無しさん
06/07/16 20:50:04
scanf("%255s", moji);
printf("%s\n", strstr(moji, "ABC") ? "OK" : "NO!");

880:デフォルトの名無しさん
06/07/16 20:56:51
DirectXで全画面で動いてるゲームとかの画面上に自分のアプリのウィンドウ出したいんだけど
できるの?
できるなら何かヒントちょうだい

881:デフォルトの名無しさん
06/07/16 20:56:56
>>879
いただきましたーーーー!!
ありがとうございました☆

882:デフォルトの名無しさん
06/07/16 21:04:59
>>880
全画面ゲームの場合排他モードで動作してるかもしれないので無理かも

883:デフォルトの名無しさん
06/07/16 21:11:11
なんかネトゲのボットを作りたいらしき質問をあちこちでみるな

884:デフォルトの名無しさん
06/07/16 23:49:46
>>882
そうなんだ。排他モードなんてものがあるのか。どうも。

885:デフォルトの名無しさん
06/07/17 04:07:28
>>880
そういう場合はd3dx9のラッパーを書いて
Presentメソッドに細工して自分が描画したいものを割り込ませる

886:デフォルトの名無しさん
06/07/17 04:40:50
必死にチートしようとしてるとか?
鯖側でプログラムやってる香具師はちゃんとチェック機能付けて排除する対策してると思うよ。

887:デフォルトの名無しさん
06/07/17 05:50:48
>>885
へー、なんか凄いヒントもらっちゃった。ありがと
>>886
ボットも面白いかもね。でも後ろで動かしとけばいいんじゃないの?分かんないけど

いいヒント貰ったのであとはDXスレ見てくる

888:デフォルトの名無しさん
06/07/17 10:07:25
ポインタがわからない・・・

main(){
char *c;
*str='c';
int *i;
*i=1;
printf("*c=%c\n",*c);
printf("*i=%d\n",*i);
}
これの何がわるいんだか教えてちょんだい・・・

889:デフォルトの名無しさん
06/07/17 10:09:25
あ、間違えた
*str='c';->*c='c';

890:デフォルトの名無しさん
06/07/17 10:10:51
ポインタは虚構

891:デフォルトの名無しさん
06/07/17 10:12:54
>>888
cもiも、まだどこも実体を指していないうちに*で間接参照しているから。

892:デフォルトの名無しさん
06/07/17 10:19:11
>>888
>これの何がわるいんだか教えてちょんだい・・・
あんたの頭。

・エラーがでた。
→エラーメッセージを張れ。
・想定したとおりの動作をしない。
→想定した動作と実際の動作を書け。
・間違いを指摘された。
→指摘した人間に聞くか、どう指摘されたか書け。

893:デフォルトの名無しさん
06/07/17 10:26:12
>>890-891これならいい?
main(){
char *c;
char ch;
ch='c';
c=&ch;
int *i;
int in;
in=1;
i=∈
printf("*c=%c\n",*c);
printf("*i=%d\n",*i);
}
でもこんな書き方してるソースなんて見たことないぜ。

894:デフォルトの名無しさん
06/07/17 10:32:40
>>893
そんな書き方する意味がないからな

895:デフォルトの名無しさん
06/07/17 10:33:36
>>893
お前入門者以下だからよそ池

896:デフォルトの名無しさん
06/07/17 10:44:42
(´・ω・`)ショボン

897:デフォルトの名無しさん
06/07/17 10:46:06
>>893
まず、なにをしたいのか日本語で説明してもらえまいか?

898:デフォルトの名無しさん
06/07/17 11:01:11
fish...

899:デフォルトの名無しさん
06/07/17 11:09:10
(´・ω・`)エサだったのか

900:デフォルトの名無しさん
06/07/17 11:10:07
>>897
俺が持ってる林晴比古著新C言語入門シニア編のポインタの初期化てところに
ex1
int d;
int *p=&d;
ex2
char s[80];
char *p=s;
ex3
char s[80];
char *p=&s[3];
ex4
char *p = "ABCDE";
ex5
char *p=(char *)malloc(100);
って書いてあったけど、あれ*pって配列ABCDEなら文字A(p[0])が入るよな~と思って、
char *c;
*c='c';
ってやってみたら*cの値に'c'が入るのかなと思ってやってみたらできなかったので
なぜだか聞いてみた。
でも
int *i;
*i=1;
はちゃんと1って出てきたよ?char型とint型って違う動きするの?


901:デフォルトの名無しさん
06/07/17 11:14:56
>>900
> int *i;
> *i=1;
> はちゃんと1って出てきたよ?char型とint型って違う動きするの?

たまたま動いてるだけ。実際はメモリを破壊してる。

あと
char *c = (char *)malloc(100);

char *c;
c = (char *)malloc(100);
と同義で、*c = とは別

902:デフォルトの名無しさん
06/07/17 11:28:03
他の参考書を見てみたら?

903:デフォルトの名無しさん
06/07/17 11:41:06
親父の本はこれとこれのビギナー編しかない
発行見てみたら1992年だった
古すぎ?

904:デフォルトの名無しさん
06/07/17 12:11:37
>>903
古いか新しいかじゃなくて、肝心な事がちゃんと書いてあるかどうか。
>>900の疑問に答えてくれる本、っていう基準で探すのもテだぞ。


905:デフォルトの名無しさん
06/07/17 12:30:42
本屋いってくるか・・・雨だけど・・・

906:デフォルトの名無しさん
06/07/17 15:49:17
void make_fare_table(int num, double *dist_list,
COSTUNIT *cost_list, int **fare_table) {

ていう関数を書いたとき、
引数のint **fare_tableはmainでどーやって指定すればいいんですか?
ちなみにfare_tableは2次元配列です。fare_table[30][30]って感じ。


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