【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131at TECH
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131 - 暇つぶし2ch750:デフォルトの名無しさん
07/07/17 19:16:46
>>749
スマソ。そしてありがとう。
そうやったら、できました。

751:c言語初心者
07/07/17 19:38:16
突然すいません!!学校の問題でc言語の問題が3つ出たのですがまったくわからないです。問題書き込むんで誰か解いてもらえませんか?
よろしくお願いします。


752:デフォルトの名無しさん
07/07/17 19:40:08
OKとりあえず宿題スレ逝け。

753:c言語初心者
07/07/17 19:43:22
宿題すれってあるんですか??


754:デフォルトの名無しさん
07/07/17 19:45:11
C言語なら俺に聞け(入門篇) Part 16
スレリンク(tech板)


755:c言語初心者
07/07/17 19:50:54
ここならしていただけるんですか??

756:デフォルトの名無しさん
07/07/17 19:53:03
>>755
>>751
> 学校の問題

C/C++の宿題を片付けます 93代目
スレリンク(tech板)


757:デフォルトの名無しさん
07/07/17 19:55:22
ただし回答者の気が向いたら
気に入られなければスルーされる

758:デフォルトの名無しさん
07/07/18 05:49:19
スレ立てられなかった。誰かキボン。

スレタイ: 【初心者歓迎】C/C++室 Ver.40【環境依存OK】

エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
age 推奨ですが、自己判断で。

◆ 前スレ: 【初心者歓迎】C/C++室 Ver.39【環境依存OK】
スレリンク(tech板)

◆ アップローダー (質問が長い時はココ使うと便利)
URLリンク(kansai2channeler.hp.infoseek.co.jp)

759:デフォルトの名無しさん
07/07/18 11:05:17
>>758
何故このスレで……

760:デフォルトの名無しさん
07/07/18 13:58:47
もう立ってるね

761:デフォルトの名無しさん
07/07/19 01:02:10
cの入門書とポインタ攻略本を読んでほぼ理解できたんだけど次に何読めばいいかわからん

何かお勧めの参考書教えてください

762:デフォルトの名無しさん
07/07/19 01:05:40
アルゴリズムとデータ構造

763:デフォルトの名無しさん
07/07/19 01:10:14
30日でできる! OS自作入門

764:デフォルトの名無しさん
07/07/19 01:13:03
K&R

765:デフォルトの名無しさん
07/07/19 01:41:38
アルゴリズム辞典

766:デフォルトの名無しさん
07/07/19 10:10:47
>>761
>読んでほぼ理解できたんだけど
本当なら大したもんだけど、
>cの
も少しケースセンシティブになろうね。

767:デフォルトの名無しさん
07/07/19 21:12:03
ケースセンシティブにもう少しもないものだ

768:デフォルトの名無しさん
07/07/20 01:15:22
たしかにw

まぁ、ポインタは理解したんだろう。
面倒なのはポインタよりも、ポインタの絡んだ型宣言の方だから。

769:デフォルトの名無しさん
07/07/20 01:38:29
えーとintの配列へのポインタを受け取って関数へのポインタへのポインタを返す関数・・・

770:デフォルトの名無しさん
07/07/20 11:12:34
typedef って便利だよな。

771:デフォルトの名無しさん
07/07/20 13:33:33
俺は、typedef void (*func)(int)っていうのを見て
何をtypedefしてんだ?と思った時期もありました。

772:デフォルトの名無しさん
07/07/20 16:53:23
void (*const *foo(const int (*p)[10]))(void (T::*)(int (U::*)()));

773:デフォルトの名無しさん
07/07/20 17:03:50
typedef様様だな

774:デフォルトの名無しさん
07/07/20 17:16:19
>>771
それ何をtypedefしてるの?
初めて見た

775:デフォルトの名無しさん
07/07/20 17:29:32
>>774
intの引数が1つで値を返さない関数を func にtypedef
例えば、、、

void foo(int);
func f = foo;
とか

776:デフォルトの名無しさん
07/07/20 17:38:57
なるほどー
自分に使う機会が来るかはわからんけど覚えておこう
thx

777:デフォルトの名無しさん
07/07/20 18:12:25
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?

778:デフォルトの名無しさん
07/07/20 18:13:29
typedef int (U::*FP1)();
typedef void (T::*FP2)(FP1);
typedef void (*FP3)(FP2);

const FP3* foo(const int p[][10]);

779:デフォルトの名無しさん
07/07/20 20:18:26
>>777
ビットフラグのクリアとか?

780:デフォルトの名無しさん
07/07/20 20:45:24
>>777
ビットの配列を作るときに使う

781:デフォルトの名無しさん
07/07/20 20:45:55
「作る」じゃなくて「操作する」だな。すまん。

782:デフォルトの名無しさん
07/07/20 21:50:27
>>779-781
ビットシフトはなんの役に立つのでしょうか?
でぐぐれ

783:デフォルトの名無しさん
07/07/20 21:56:19
そういえばどうしてローテートはないんだろ

784:デフォルトの名無しさん
07/07/20 22:20:58
>>777
コレ見るの、3回目か4回目くらいなんだけど、ギャグかなんかなの?

785:デフォルトの名無しさん
07/07/20 23:02:06
不定期テンプレ

786:デフォルトの名無しさん
07/07/20 23:14:02
ただの荒らし
あるいは風物詩
あるいは新参の受ける洗礼

787:デフォルトの名無しさん
07/07/21 00:56:47
>>783
ローテートをサポートしない CPU も多いんじゃね?
知らんけど。

788:デフォルトの名無しさん
07/07/21 01:07:00
>>784
少ないなw

789:デフォルトの名無しさん
07/07/21 02:04:14
&a->bって&(a->b)か(&a)->bかどっち?

790:デフォルトの名無しさん
07/07/21 02:09:29
「演算子 順位」とかでぐぐれ

791:デフォルトの名無しさん
07/07/21 02:19:04
&(a->b)ですね。ありがとう。

792:デフォルトの名無しさん
07/07/21 02:25:36
つか、やってみりゃ分かるだろ。

793:デフォルトの名無しさん
07/07/21 02:39:22
その態度は良くない。
・規格を読んで正しい挙動を把握する
・実際に処理系で実験してみる
・結果が規格と異なった場合パッチを書いてしかるべき所に送りつける(オプション)

794:デフォルトの名無しさん
07/07/21 03:25:22
規格読んで来て、理解して&(a->b)を常に&a->bとか書くように
なる人と仕事組んだら俺泣きそうw

795:デフォルトの名無しさん
07/07/21 04:28:59
&a->b は普通に書くだろw

796:デフォルトの名無しさん
07/07/21 04:41:50
>・規格を読んで正しい挙動を把握する
=「演算子 順位」とかでぐぐれ
>・実際に処理系で実験してみる
=つか、やってみりゃ分かるだろ。

797:デフォルトの名無しさん
07/07/21 04:45:12
正しい挙動を把握してから実験で確認するのと、
実験して結果を見て予想するのは、大きな違いがある。


798:デフォルトの名無しさん
07/07/21 05:26:51
その態度はよくない。
実験して結果を見て法則を導くスタイルが無いと。

799:デフォルトの名無しさん
07/07/21 05:30:11
はいはい、そうですね

800:デフォルトの名無しさん
07/07/21 05:48:50
実験した後に確かめた方がいい。

801:デフォルトの名無しさん
07/07/21 10:00:56
演算子の優先順位は、処理系依存ってことはないだろうから、実験でいいんじゃね?

802:デフォルトの名無しさん
07/07/21 10:02:37
規格読む→実験する→2chで煽りつつ確かめる

803:デフォルトの名無しさん
07/07/21 10:11:19
規格読む前に実験した方が実感しやすいな。

804:デフォルトの名無しさん
07/07/21 10:36:58
その通りだ。実験して、壁にぶち当たって、その壁をぶっ壊せ!
フラグメンテーションエラーで、メモリーもぶっ壊せ!
そして泣きながら規格読んで実感だ!

805:デフォルトの名無しさん
07/07/21 11:26:38
>>804
>そして泣きながら規格読んで実感だ!
お疲れ様です。

806:デフォルトの名無しさん
07/07/21 11:51:31
C++ だが、export は色んな意味で泣ける。

807:デフォルトの名無しさん
07/07/21 12:27:13
俺の胸でなけ

808:デフォルトの名無しさん
07/07/21 13:02:06
俺の下であがけ

809:デフォルトの名無しさん
07/07/21 14:42:57
実験だけじゃ優先順位なのか結合の方向なのか解らない、と。
まぁ、&a->bくらいなら、どっちでもいいけど。

810:デフォルトの名無しさん
07/07/21 16:25:12
&a->b が (&a)->b と見做されるんだとしたら
皆 a.b と書くと思うんだわ。

811:デフォルトの名無しさん
07/07/22 00:30:44
&a.bじゃないか?

812:デフォルトの名無しさん
07/07/22 00:31:41
終電まで仕事してて疲れてた。>>811はお願いだから忘れて

813:デフォルトの名無しさん
07/07/22 10:05:19
CD-R に保存しました

814:デフォルトの名無しさん
07/07/24 03:59:19
石版に刻みました

815:デフォルトの名無しさん
07/07/24 09:46:04
DNAに移植しました

816:デフォルトの名無しさん
07/07/24 10:10:45
アカシックレコードに刻まれました。

817:デフォルトの名無しさん
07/08/01 00:15:00
C++ の STL に感動しました
C言語で STL に似たことをしたいと思ったらどうすれば良いですか?

818:デフォルトの名無しさん
07/08/01 00:16:19
C++に乗り換える。

819:デフォルトの名無しさん
07/08/01 00:17:24
やっぱりそれが確実ですよね

820:デフォルトの名無しさん
07/08/01 00:20:58
マクロを使う。

821:デフォルトの名無しさん
07/08/01 02:11:51
そういえば、templateが使えない時代にはgeneric.hってのがあったな

822:デフォルトの名無しさん
07/08/01 21:08:58
>>817
こんなんあった。かなりSTLに近いんじゃないか?
マクロを使ってるからデバッグがむずかしそうだが


>URLリンク(sourceforge.jp)
>CSTLは、C言語で使えるC++のSTLライクなコンテナライブラリです。
>vector, deque, list, set, multiset, map, multimap, stringを提供します。

823:デフォルトの名無しさん
07/08/02 10:16:24
FILE *t=tmpfile();
で作成したtを
fclose(t);
してもいいですか?
なんか危なくて、こわいです。


824:デフォルトの名無しさん
07/08/02 10:24:04
なんで危ないんだよw
まあ、またその内容を使うことがあるなら閉じちゃだめだが。

825:デフォルトの名無しさん
07/08/02 10:44:31
ええ!
fclose(t)ってやってよかったの?

826:デフォルトの名無しさん
07/08/02 10:56:00
C言語辞典見てみたけど、やっていいみたい。

827:デフォルトの名無しさん
07/08/02 11:09:09
用がなくなったら閉じないとダメだろ。常考。

828:デフォルトの名無しさん
07/08/02 11:52:56
tmpfile()は、そのファイルがクローズされたか、またはプログラムが終了したときに
自動的に削除されるファイルを生成し、そのストリームへのポインタを返す。

何も問題はない。

829:デフォルトの名無しさん
07/08/03 06:35:21
自分ならOOライクにたとえ1行で済んだとしても生成と破棄を対にして両方の関数を作る

830:デフォルトの名無しさん
07/08/03 07:59:09
なら別にC使わないで他のOO使えばいいじゃん。頭かたいね。

831:デフォルトの名無しさん
07/08/03 08:38:00
生成と破棄を対にすることがOOライクだと思うくらいならそれでもいいんじゃね?

832:デフォルトの名無しさん
07/08/03 09:21:23
ぷっ

833:デフォルトの名無しさん
07/08/03 11:09:16
>>830
固いんじゃなく、弱いんだろう。

834:デフォルトの名無しさん
07/08/03 23:43:24
>>822
面白そうなものがあるんですね
GPLじゃないところもイイ!

ただ、著作表示だけはしないといけないようですね

835:デフォルトの名無しさん
07/08/04 00:29:40
>>834
BSDライセンスらしいから緩いでしょ

836:デフォルトの名無しさん
07/08/04 00:34:52
いや修正BSDって中のファイルに書いてるじゃん

837:デフォルトの名無しさん
07/08/05 18:02:02
////(main.h)
#ifndef MAIN_H
#define MAIN_H
int X
#endif
////

////(main.cpp)
#include "main.h"
#include "move.cpp"
main(){
move();
}
////

////(move.cpp)
#include "main.h"
move(){
(Xを操作する処理)
}
////

ゲームプログラミングを勉強中で、大筋で感じな状況になってます。
これをコンパイルすることも実行することもできるのですが
BCCでコンパイルすると、「パブリックモジュール_Xが、main.objとmove.objの
両方で定義されている」と警告されます。
これはどういうことで何が悪いのでしょうか?
グローバル関数を使いながら、ファイルを分割してみたいのですがどうしたらいいのでしょうか?





838:デフォルトの名無しさん
07/08/05 18:03:42
>>837
////(main.cpp)
#include "main.h"
#include "move.cpp"←いらなくね?

839:デフォルトの名無しさん
07/08/05 18:06:54
int X;
    ~

840:837
07/08/05 18:15:40
>>838
それを消したら、未定義の関数moveを呼び出したなどとエラーだ出ます。

>>839
掲示板に書き込む時に簡略化したら忘れてしまいました。

841:デフォルトの名無しさん
07/08/05 18:21:04
>>837
宣言と定義の区別をしっかりと。ヘッダには変数や関数の宣言だけ置くこと。

842:デフォルトの名無しさん
07/08/05 18:23:31
プロトタイプ宣言でググれ

843:デフォルトの名無しさん
07/08/05 20:04:20
////(main.h)
#ifndef MAIN_H
#define MAIN_H
extern int X;
#endif
////

////(main.cpp)
#include "main.h"
#include "move.h"
int main(){
move();
}
////

////(move.h)
#ifndef MOVE_H
#define MOVE_H
int move();
#endif
////

////(move.cpp)
#include "main.h"
int move(){
(Xを操作する処理)
}
////

844:デフォルトの名無しさん
07/08/05 20:05:03
まちがった

////(main.cpp)
#include "main.h"
#include "move.h"
int X;
int main(){
move();
}
////


845:わ ◆V92eIRyEPU
07/08/14 14:48:11


846:拿 ◆J/ZoJAt3T2
07/08/14 14:50:07
テスト

847:デフォルトの名無しさん
07/08/15 23:58:55
>>843-844
俺なら、
extern int X; はmove.h側に入れて、int X; は move.cpp に入れて、
main.hは消すかな。細かいことですんませんね。

>>837
安心しなさい。あなたの方が、うちの元請けより優秀です!
ちゃんと #ifndef使うあたりが。

848:名無しさん@お腹いっぱい
07/08/19 03:09:14
すいません最近c言語を習い始めたのですが、円の半径(double型)をあたえて、円周の長さと
と円の面積を表示するプログラムがどうしてもできません。
どうすればよいのでしょうか?

849:デフォルトの名無しさん
07/08/19 03:47:30
お前さんが書いたコードを晒せ

850:デフォルトの名無しさん
07/08/19 04:10:29
その前に初心者スレに行け。

851:デフォルトの名無しさん
07/08/19 10:50:59
>>848が出来ない可能性
・scanfで&忘れ、%dを指定している
・式中にint型とかを使っている
・まともに調べてない、読んでない
・円周の長さ、円の面積が分からない

852:デフォルトの名無しさん
07/08/19 10:57:20
#define PI 3

853:デフォルトの名無しさん
07/08/19 12:33:21
ゆとりな定義だな

854:デフォルトの名無しさん
07/08/19 12:39:38
#define ENSYUURITSU 3

855:デフォルトの名無しさん
07/08/19 18:23:29
>>848 どぞ。

double pi = 3.14159265358979323846
double r = 1.0;
double s = pi * r * r;
double d = 2 * pi * r;
printf("s=%f,d=%f\n",s,d);

856:デフォルトの名無しさん
07/08/19 20:58:27
どうでもいいが円周はlな方がしっくりくる

857:デフォルトの名無しさん
07/08/19 21:16:49
#include <math.h>
double pi = atan(1) * 4;

858:名無しさん@お腹いっぱい
07/08/20 02:27:48
>857
ありがとうございます。あと家でc言語使えるようにしようと思って
microsoft.net Framework version 2.0 再頒布可能パッケージ
microsoft.net Framework version 2.0 SDK 日本語版
をダウンロードしたのですが友達の話によると
microsoft.net Framework version 2.0 日本語版 language pack
が必要らしいのですがmicrosoftの公式サイトに行っても見つからないのですが
どうやったら手に入るのでしょうか?
すごい初歩的な質問ですいません。

859:デフォルトの名無しさん
07/08/20 05:52:55
>>858
初歩的以前にスレ違いなんだが自覚あるか?

860:デフォルトの名無しさん
07/08/20 09:16:00
math.hインクルードするならM_PI使ったほうが早い

861:デフォルトの名無しさん
07/08/20 09:20:12
>>860
M_PIは標準ではない。

862:デフォルトの名無しさん
07/08/20 09:45:41
ここは世界レベルでの標準に関わる内容のスレです。標準的ではない手法はお断りします。

863:デフォルトの名無しさん
07/08/20 10:10:12
M_PIが無い最近の環境って何がある?

864:デフォルトの名無しさん
07/08/20 10:18:59
つ MS Visual C++

865:デフォルトの名無しさん
07/08/20 10:28:00
gccでもansi適合モードにするとスルーされる。

866:デフォルトの名無しさん
07/08/20 13:43:09
VC++は定義されてないのがデフォで、_USE_MATH_DEFINESを定義すると使えるようだね

867:デフォルトの名無しさん
07/08/24 14:00:16
関数から構造体を受けることはできたんですが,構造体を渡して,受け取る関数を作りたいのですが
どのように記述すれば良いですか

struct Initset getinfo(struct Initset *syoki2)
↑のような記述はできないですか?

868:デフォルトの名無しさん
07/08/24 14:07:52
それでいいです

869:867
07/08/24 15:10:45
>>868
できました~。ありがとうございます

870:名無しさん@お腹いっぱい
07/08/24 16:41:08
入力した自然数nの正の約数をすべて表示するプログラムを今、作っているのですが、
int main(void)
{
int a = 1;
int n = 500;
int f = n / a;

while(a < n) {
a += 1;
}
printf("%d\n",f);
return 0;
}
上のものは自分がわからないながらも作ったものです。
でもできませんでした。
改善点お願いします。

871:デフォルトの名無しさん
07/08/24 16:52:01
while(a < n) { と a += 1; の間に
if (n % a == 0) {
printf("%d\n", a);
}
とか入れてみ

まあ約数なら 1/2 以上はありえないから省くとかするけどな。
入力とかはとりあえずscanfかなんかで。

872:デフォルトの名無しさん
07/08/24 16:57:44
>>870
まず処理の流れ自体がわかってないだろう
もう一回教科書を読み直せ

873:デフォルトの名無しさん
07/08/24 23:19:39
入力した自然数nの正の約数をすべて表示するプログラムを今、作っているのですが、
int main(void)
{
int a = 1;
int n = 500;
int f = n / a;

while(a < n) {
a += 1;
}
printf("%d\n",f);
return 0;
}
上のものは自分がわからないながらも作ったものです。
でもできませんでした。
改善点お願いします。


874:デフォルトの名無しさん
07/08/24 23:30:37
改善というか、まずプログラムを使わずに
正の約数を全て列挙する方法すら分かってないように思える。
プログラム以前の問題。

875:デフォルトの名無しさん
07/08/25 00:30:50
どういう順番での実行を予想してるんだ?

876:名無しさん@お腹いっぱい
07/08/25 00:41:32
870ですが約数をすべて列挙する方法ってnまでの数ですべて割る条件式つくって
それが成立するやつを表示するプログラムでよいのですか?

877:デフォルトの名無しさん
07/08/25 01:09:54
よくない

878:デフォルトの名無しさん
07/08/25 01:12:07
「nまで」がどこからnまでなのか、まら「まで」とは未満なのか以下なのか
「全て割る条件式」とは何のことなのか
本当にわかってるか?

879:名無しさん@お腹いっぱい
07/08/25 01:18:28
すいません。たとえば500だったら1,2,3,4,5,6,7,8、という風に
して割り切れる、割り切れないのif文を作ればよいのかと思ったのですがそれではだめですか?

880:デフォルトの名無しさん
07/08/25 01:22:00
>>879
そこまではいい
問題は「割り切れる」の意味がわかってるかどうかだ

881:デフォルトの名無しさん
07/08/25 01:22:31
自然数nの正の約数を列挙する

自然数nを割り切れる正の整数を列挙する

自然数nを割り切れる可能性のある正の整数すべてについて、
その数で本当に割り切れるかどうかを調べ、
割り切れるときはその数を画面に表示する

一応言っとくが「割り切れる」とは除算して余りが出ないことだからな

882:デフォルトの名無しさん
07/08/25 01:24:00
とりあえず「nをaで割り切れるならば」を意味するif文を書いてみろ

883:名無しさん@お腹いっぱい
07/08/25 01:26:01
ありがとうございます。実は今もう一個悩んでいるのがあってかけ算の九九の表をつくるというプログラムをやっているのですが
自分なりにつくったのは
/* kuku.c */

int main(void)
{
int a, b;

int n = 9;

for(a = 1; a <= n; a = a + 1 ){
for(b = 1; b<=n; b = b + 1 ){
printf("%d\n",a*b);
}
printf("\n");
}





return 0;
} なのですが表になりません。おとといから始めたばかりなのでちんぷんかんぷんです。
いろいろとすいませんがご指導をお願いします。

884:デフォルトの名無しさん
07/08/25 01:28:22

 一 個 ず つ や れ


885:デフォルトの名無しさん
07/08/25 01:32:20
>883
初心者スレ逝け

886:デフォルトの名無しさん
07/08/25 01:35:55
>>883
printf("%d\n",a*b); → printf("%3d",a*b);
がんばれ!

887:デフォルトの名無しさん
07/08/25 01:37:43
>>883
処理の流れ、つまり「まずこれが起きて、次にこれが起きて……」という順番をたどりながら考えろ。
漠然と書いて走らせて出来なかったーわかんないーじゃいつまでも理解できん。

そしてここは基本的に「ある程度Cがわかってる人」が「標準C」というものについて少しつっこんだ質問をする場所だから
まずは初心者スレへ行くことをお勧めする。

888:名無しさん@お腹いっぱい
07/08/25 01:45:23
>886
ありがとうございます。できました。

889:デフォルトの名無しさん
07/08/25 11:17:58
なんだよ>>871は無視かよ

890:デフォルトの名無しさん
07/08/25 12:49:26
だって約数はその数自身も含まれるから
ありえないなんて事はありえませんもん

891:デフォルトの名無しさん
07/08/25 13:24:42
まあ順番を問わなければもっと速いが

if(!n%a){
 if(n/a < a)break;
 printf("%d\n",a);
 if(n/a != a)printf("%d\n",n/a)
}

892:デフォルトの名無しさん
07/08/26 01:28:44
!

893:デフォルトの名無しさん
07/09/03 18:47:21
bool a,b,c,d,e,f;
とか
int a,b,c,d,e,f;
みたいに並べて書いた変数を一気に同じ値で初期化する書き方ってありますか?
あったら教えてください。

894:デフォルトの名無しさん
07/09/03 18:55:12
a = b = c = d = e = f = 0;

895:デフォルトの名無しさん
07/09/03 18:57:51
>>894
宣言と合わせて一行でかけませんか。

896:デフォルトの名無しさん
07/09/03 18:58:05
>>893
static int a,b,c,d,e,f;
これで全部0で初期化される。
struct foo {
int a,b,c,d,e,f;
} foo = {0};
これでも全部0で初期化されるな。

まぁ、横着するなってことだ。

897:デフォルトの名無しさん
07/09/03 18:59:10
int a,b,c,d,e,f;a = b = c = d = e = f = 0;


898:デフォルトの名無しさん
07/09/03 19:25:37
>>897
ワロタ

899:デフォルトの名無しさん
07/09/03 19:29:01
それほど面白くはない

900:デフォルトの名無しさん
07/09/03 19:59:10
>>898
そんなので笑えるなんて君の人生楽しそうでうらやましいわ

901:デフォルトの名無しさん
07/09/03 20:07:29
>>893
同じ値で初期化するような変数なら同じような扱いをするんだろう
配列で宣言しろ

902:デフォルトの名無しさん
07/09/06 16:40:24
過疎ってますね
ビットシフトでも入れてみますか?

903:デフォルトの名無しさん
07/09/06 16:52:28
聞くことがないならそれでよし
わざわざ増やさんでいいw

904:デフォルトの名無しさん
07/09/06 17:00:56
ビットシフト入れたかったのに・・・

905:デフォルトの名無しさん
07/09/06 17:24:08
じゃビットシフト絡みで

MMXの様に、4Byteの整数型を1Byte単位で飽和演算する方法を
昔どこかで見た気がするんだけど、どうやるんだっけ

0xFEFEFEFE に 各バイトに3を加算

0xFFFFFFFF

画像処理に使おうと思ったけど思い出せない

906:デフォルトの名無しさん
07/09/06 21:51:57
MMX対応のプロセッサを使う。

907:905
07/09/06 21:56:42
あった
URLリンク(www.emit.jp)

しかし原理がよくわかんね

908:デフォルトの名無しさん
07/09/06 21:58:04
if文を任意の位置でぬけるbreakとかcontinueみたいな
命令ってないですか?

909:デフォルトの名無しさん
07/09/06 22:00:49
>>908
こんなイメージ?
if (...) {
...;
if (...) ifBreak;
...;
}
これくらいしか手がない気が。
if (...) {
...;
if (...) goto endIf;
...;
}
endIf:

910:デフォルトの名無しさん
07/09/06 22:01:58
goto

911:デフォルトの名無しさん
07/09/06 22:15:29
>>909-910
サンクス

912:デフォルトの名無しさん
07/09/06 22:38:47
do {
if(...)
{
}
else if(...)
{
....
break;
}
} while(0)
とか

913:デフォルトの名無しさん
07/09/06 23:43:12
俺がよく使うのは

if(...){
 do{

  ...

  if(...) break;

  ...

 }while(0);
}

914:デフォルトの名無しさん
07/09/07 00:12:33
何その隠れgoto

915:デフォルトの名無しさん
07/09/07 00:51:35
んな隠れgoto使うくらいなら、素直にgotoで書いた方が未だ見やすい希ガス。
そもそも、ロジックを整理すべきじゃないかとは思うが。

916:デフォルトの名無しさん
07/09/07 00:54:57
if (...){

 ...

 if(!...){

  ...

 }
}

でいいんじゃないの?


917:デフォルトの名無しさん
07/09/07 01:11:34
int i;

scanf("%d",&i);

while( i<1 || i>9999 )
 {
 printf("もう一度入力してください");
 scanf("%d",&i);
 }


iに数字じゃなく、aaaaなどの文字列を入れると”もう一度入力~”がえんえんループ表示されてしまいます。
これを防ぐにはどうしたらいいのでしょうか?

918:デフォルトの名無しさん
07/09/07 01:14:43
>>917
URLリンク(ja.wikipedia.org)

919:917
07/09/07 01:23:41
>>918
ありがとうございます!

920:デフォルトの名無しさん
07/09/07 01:26:09
>>918
その方法もどうかと思うな。
scanf()は行単位の処理じゃないのに、バッファクリアだけ行単位になってしまう。

921:デフォルトの名無しさん
07/09/07 01:34:26
それではどうすればいいかってのは、このスレでガイシュツです。

922:デフォルトの名無しさん
07/09/07 10:37:17
typedef struct _st {
  char ** ppsz;
} st;

void freeif(st* pst) {
  for(int i = 0; i < 3; i++) {
    for(int j = 0; j < 2; j++) {
      if(*pst->ppsz != NULL) {
        free((void*)pst[i].ppsz[j]);
      }
    }
  }
  for(int i = 0; i < 3; i++) {
    if(pst->ppsz != NULL) {
      free((void*)pst[i].ppsz);
    }
  }
  if(pst != NULL) {
    free(pst);
  }
  return;
}

923:デフォルトの名無しさん
07/09/07 10:38:36

int main(void) {
  st* pst;
  // make struct object
  pst = (st*)malloc(3);
  if(pst == NULL) {
    printf("st is null\n");
  }
  else {
    for(int i = 0; i < 3; i++) {
    // make struct member
    pst[i].ppsz = (char**)malloc(2);
      for(int j = 0; j < 2; j++) {
        // make member area
        pst[i].ppsz[j] = (char*)malloc(10);
      }
    }
    // free memory
    freeif(pst);
  }
  return 0;
}


924:デフォルトの名無しさん
07/09/07 10:40:37
メモリの解放が上手くいきません。よろしくお願いします。

(正誤)
if(pst->ppsz != NULL) {  ← ×
if(pst[i].ppsz != NULL) { ← ○

925:デフォルトの名無しさん
07/09/07 11:03:01
>>923
typedef struct _st {
  char ** ppsz;
} st;
static const char STRINGS[3][2][11] = {
  { "idx1:data1", "idx1:data2", },
  { "idx2:data1", "idx2:data2", },
  { "idx3:data1", "idx3:data2", },
};

void freeif(st* pst) {
  for(int i = 0; i < 3; i++) {
    for(int j = 0; j < 2; j++) {
      if(pst[i].ppsz[j] != NULL) {
        printf("pst[%d].ppsz[%d]:FREE\n", i, j);
        free((void*)pst[i].ppsz[j]);
      }
    }
  }
  for(int i = 0; i < 3; i++) {
    if(pst[i].ppsz != NULL) {
      printf("pst[%d].ppsz:FREE\n", i);
      free((void*)pst[i].ppsz);
    }
  }
  if(pst != NULL) {
    printf("pst:FREE\n");
    free(pst);
  }
  return;
}

926:デフォルトの名無しさん
07/09/07 11:03:55

int main(void) {
  st* pst;
  // make struct object
  pst = (st*)malloc(3 * sizeof(st));
  if(pst == NULL) {
    printf("st is null\n");
  }
  else {
    for(int i = 0; i < 3; i++) {
      // make struct member
      pst[i].ppsz = (char**)malloc(2 * sizeof(char*));
      for(int j = 0; j < 2; j++) {
        // make member area
        pst[i].ppsz[j] = (char*)malloc(11 * sizeof(char));
        lstrcpy(pst[i].ppsz[j], STRINGS[i][j]);
      }
    }
    // debug
    printf("---------------------\n");
    for(int i = 0; i < 3; i++) {
      for(int j = 0; j < 2; j++) {
        printf("pst[%d].ppsz[%d] >> %s\n", i, j, pst[i].ppsz[j]);
      }
    }
    printf("---------------------\n");
    // free memory
    freeif(pst);
  }
  _getch();
  return 0;
}

927:デフォルトの名無しさん
07/09/07 11:31:28
>>922-924
固定サイズなら無理にmalloc()/free()を使う必要はないと思うぞ。
typedef struct _st {
char ppsz[2][10];
} st;
でいいやん。


928:デフォルトの名無しさん
07/09/07 11:36:05
メモリ動的確保/解放の練習とかじゃない?>>927

929:デフォルトの名無しさん
07/09/11 22:08:23
C89 の規格票ってどこかで見れない?

930:デフォルトの名無しさん
07/09/11 22:38:18
過去ログにURLが転がってたような。
印刷できないPDFでよければJISCのサイトで閲覧できる

931:デフォルトの名無しさん
07/09/11 23:14:17
JISCって過去の規格票まで見れたっけ?
現在有効のX3010:2003はC99相当だけど。

932:デフォルトの名無しさん
07/09/11 23:19:57
最新版以外はなかったことになるから。
ふつーはそれでも問題ないんだよ。非互換な改訂しなければ。
JIS漢字とかJIS漢字とかJIS漢字とか、あとJIS漢字とか

933:デフォルトの名無しさん
07/09/12 00:31:37
そうなんだよな。それにJIS漢字も追加で。

934:デフォルトの名無しさん
07/09/12 00:53:09
おいおい、JIS漢字を忘れちゃいないか?

935:デフォルトの名無しさん
07/09/12 01:01:56
規格票

936:デフォルトの名無しさん
07/09/12 01:15:46
無粋なヤツだな

937:デフォルトの名無しさん
07/09/12 02:38:12
無粋

938:デフォルトの名無しさん
07/09/12 03:48:23
今日学校でプロトタイプ宣言に関する問題を習ったんですが
問題:再帰関数を使って、Xのn乗を求めるプログラムを作成しなさい
プロトタイプ宣言:int Power(int x,int n);

実行画面
文字列入力==>2
文字列入力==>0
値:1

文字列入力==>2
文字列入力==>3
値:8

文字列入力==>6
文字列入力==>4
値:1296

この問題だけどうしても判らなくて困っています^^;
何方かわかる方がいましたら教えてください



939:デフォルトの名無しさん
07/09/12 04:00:01
>>938
int Power(int x,int n)
{
int i;
int sum = 1;
if(n == 0)
return 1;
else{
for(i = n; i > 0; i--)
sum *= x;
}
return sum;
}

940:デフォルトの名無しさん
07/09/12 04:04:51
再帰じゃないじゃん

941:939
07/09/12 04:06:40
あ、再帰だったんだ、出直してくる。

942:939
07/09/12 04:16:22
再帰版
int Power(int x,int n)
{
if(n == 0)
return 1;
else
return x*Power(x,n-1);
}

943:デフォルトの名無しさん
07/09/12 04:21:11
int Power(int x, int n)
{
if(x == 0 && n == 0) exit(1);
if(n < 0) return 0;
if(n == 0) return 1;
return Power(x, n - 1) * x;
}

944:デフォルトの名無しさん
07/09/12 06:51:52
static int power(int x, int n, int v)
{
if (n < 0) return 0;
if (n == 0) return v;
return power(x, n - 1, x * v);
}
int Power(int x, int n) {return power(x, n, 1);}
これで末尾再帰で最適化が利いてループになるはず。

945:デフォルトの名無しさん
07/09/13 09:13:16
特定の範囲の整数(例えば1~10000)だけを入力させたいのですが、
fgets()使用時に桁溢れを完全に抑止することは可能ですか?

char *buf[10];
unsigned int value;
while(1)
{
fgets(buf, 10, stdin);

~isdigit()とかで数値のみかを判定して、atoi()でvalueに格納してbreak~

}
fprintf(stdout, "%u\n", value);

こんな感じで書いてるんですが、わざと入力を10桁以上にしたときに入力バッファに残ってしまってうまくいきません。
何かイイ方法あるでしょうか?(fflush(stdin)は無しで)

946:945
07/09/13 09:14:22
>>945
× char *buf[10]
○ char buf[10]
orz

947:デフォルトの名無しさん
07/09/13 09:19:36
>>945
fgets の後で
fscanf(stdin,"%*[0-9]");

948:デフォルトの名無しさん
07/09/13 11:18:05
>>947
通常の入力をした場合(桁数が少ない場合)に入力待ちにならない?

949:デフォルトの名無しさん
07/09/13 11:22:42
fflush(stdin)と置換可能な関数を自作するのは厳しい
とはいえ、fflush(stdin)は未定義
面倒くさいけど、fgetsで読み込んだbufに'\n'が有るかチェックして、
'\n'が無いなら'\n'が出てくるまで読み捨てることになる

#include <stdio.h>
#include <string.h>

int main(void)
{
  char buf[10];
  char *p;
  int c;
  while (fgets(buf, sizeof buf, stdin) != NULL) {
    if ((p = strchr(buf, '\n')) != NULL) {
      *p = '\0';
    }
    else {
      while ((c = fgetc(stdin)) != '\n' && c != EOF) {}
    }
    puts(buf);
  }
  return 0;
}


950:デフォルトの名無しさん
07/09/13 12:33:40
もっといい方法あるのかもしれないけど、こんなんでどうかな

int get_unsigned(unsigned *v)
{
  char buf[16];
  char *p;
  int c;

  if (fgets(buf, sizeof buf, stdin) == NULL)
    return EOF;
  if (strchr(buf, '\n') == NULL)
    while ((c = fgetc(stdin)) != '\n' && c != EOF) {}
  *v = strtoul(buf, &p, 10);
  return *p;
}

int main(void)
{
  unsigned val;
  int end;

  while (printf(">>"), (end = get_unsigned(&val)) != EOF) {
    if (end == '\0' || isdigit(end)) printf("W:入力が切り捨てられました.\n");
    else if (end != '\n')      printf("W:不正文字がありました. '%c'\n", end);
    if (val < 1 || 10000 < val)   printf("W:入力範囲外です.\n");
    printf("<<%u\n", val);
  }
  return 0;
}

951:945
07/09/13 13:55:57
>>947-950
ありがとうございます。おかげさまで解決しました。

952:デフォルトの名無しさん
07/09/13 14:16:48
scanf("%*[^\n]%*c");なんてできなかったっけ?

953:デフォルトの名無しさん
07/09/13 14:20:57
>>952
それだと、次の文字が\nだと[^\n]にマッチしないので、その時点でひっかかり
読み捨てることが出来ない。
scanf("%*[^\n]"); scanf("%*c");
ならおk

954:デフォルトの名無しさん
07/09/15 02:24:20
うーん勉強になるなあ。ここに書き込みしている人達て通算何年くらい勉強してきたんですか。
俺には凄過ぎっすよ。

955:デフォルトの名無しさん
07/09/15 02:26:09
名プログラマになる為に猛勉強だぜ。

956:デフォルトの名無しさん
07/09/15 09:32:53
ここは知ったかばっかり

957:デフォルトの名無しさん
07/09/17 15:28:45
知ったかな~知ったかな~うにゃうにゃ
はれってほれってひれんら~

958:デフォルトの名無しさん
07/09/17 18:37:19
>>957 迂闊にも笑ってしまいますた

959:デフォルトの名無しさん
07/09/18 17:05:01
SHRT_MIN >= INT_MIN && SHRT_MAX <= INT_MAX 常に成り立つと思うのですが
sizeof(short) <= sizeof(int) は処理系に関係なく成り立ちますか?

960:デフォルトの名無しさん
07/09/18 17:07:56
はい。

961:デフォルトの名無しさん
07/09/18 18:26:29
ANSI C99準拠の標準ライブラリについて、詳しく説明しているサイトありませんか?
素直に本買ったほうがいいでしょうか?

962:デフォルトの名無しさん
07/09/18 18:35:59
っ[JIS X 3010]

963:961
07/09/18 19:21:05
>>962
ありがとう。でも高いねコレ…素直に本買います。

964:デフォルトの名無しさん
07/09/18 20:47:24
つ[URLリンク(www.jisc.go.jp])

965:デフォルトの名無しさん
07/09/19 15:50:54
設計(PAD)でファイルを開いて読み込んでファイルの情報を構造体に格納するのって
どうやるか教えていただけませんか?

966:デフォルトの名無しさん
07/09/19 16:06:49
たぶんCの話じゃないと思うぞ

967:デフォルトの名無しさん
07/09/19 17:28:22
今C言語の勉強をしていて、ファイルの情報を構造体に格納して
それをメモリに展開するってゆーのをやってまして

968:デフォルトの名無しさん
07/09/19 17:30:39
fread

969:デフォルトの名無しさん
07/09/19 17:32:23
そんなもんファイルにどういう形式でデータが記録されていて
格納する構造体はどんなものかによるとしか言えん

970:デフォルトの名無しさん
07/09/19 17:34:00
PADは関係あるのか?

971:デフォルトの名無しさん
07/09/19 17:34:18
JIS X 3010-1993 を読むと

3.4
バイト
実行環境の基本文字集合の任意の要素を保持するために十分な大きさを持つデータ記憶域の単位。
1 バイト中のビット数は,処理系定義とする。
5.2.4.2.1
CHAR_BIT
ビットフィールドでない最小オブジェクト(バイト)におけるビット数
6.3.3.4
sizeof演算子の結果は,そのオペランドの(バイト数での)大きさとする。
sizeof(char) == 1

となっているのですが,ここから char 型オブジェクトのデータ記憶域での大きさは
1 バイトで 1 バイトは CHAR_BIT ビットと判断できるでしょうか?


972:デフォルトの名無しさん
07/09/19 17:36:24
マジっすか。バイト=8bitだと信じてました。
int型が、その処理系で一番速く処理できるビット幅、というのは聞いたことありますが・・・

973:967
07/09/19 17:58:00
今PADの最中なんです。
問題としてはファイルにある社員IDと氏名を構造体に格納し、
メモリに展開するというものです

974:デフォルトの名無しさん
07/09/19 18:06:04
C言語の規格改定って今でも進められているんでしょうか?

975:デフォルトの名無しさん
07/09/19 18:47:35
>>971
そう思って構わないはず。

>>973
常に8ビットを表す単位が必要なら、オクテットを使う。

976:967
07/09/19 19:03:57
文字の長さが2-10で変化するってどゆ意味ですか?
そもそも文字の長さってなんですか?

977:デフォルトの名無しさん
07/09/19 19:09:43
次スレテンプレ

【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 132



このスレは標準Cのみの限定スレです。
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
URLリンク(www.kouno.jp)
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
URLリンク(www.amazon.co.jp)

他の過去ログはここに
URLリンク(nssearch.hp.infoseek.co.jp)
前スレ
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131
スレリンク(tech板)


GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。

【初心者歓迎】C/C++室 Ver.42【環境依存OK】
スレリンク(tech板)
C/C++の宿題を片付けます 95代目
スレリンク(tech板)

978:デフォルトの名無しさん
07/09/19 19:15:34
GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
                                 ↓
GUIなどの標準Cではできない事の質問、ソース丸投げ、宿題、書籍 は

何か気になるから変えてくれたら嬉しい

979:デフォルトの名無しさん
07/09/19 19:58:51
>>937
お前前も来たな
帰れ
いや
死ね

980:デフォルトの名無しさん
07/09/19 19:59:21
>>973だった

981:デフォルトの名無しさん
07/09/19 20:22:18
(char *)*char_list->c
という式が表す値は
(char *)型のポインタcが指しているデータ
(char *)型のデータ
のどっちなんでしょうか?

982:デフォルトの名無しさん
07/09/19 20:37:54
演算子の優先順位から、(char *)(*(char_list->c))

983:デフォルトの名無しさん
07/09/19 20:47:49
>>982
その式を見るとカッコ(キャスト)よりも*演算子のほうが優先されている
みたいなんですが、(1+2)*(3*3)のようなカッコとキャストとしてのカッコは
別物として扱われているんでしょうか?

984:デフォルトの名無しさん
07/09/19 20:52:45
そりゃ意味からして別物だろうが

985:デフォルトの名無しさん
07/09/19 20:56:27
ついでに言うと、関数呼出演算子の括弧も別物。

986:デフォルトの名無しさん
07/09/19 21:04:19
>>985
全部一緒くたにして考えてました。orz
最後にもう一つ、

char c = 'a';
char *pc = &c
printf("%d\n", (int)*pc);

予想では上のコードは4バイト分の整数を出力すると思ったのに、
実際にやってみたらa一つ分の97しか出力しませんでした。
これは何故なんでしょうか?

987:デフォルトの名無しさん
07/09/19 21:06:35
何を言ってるんだ、お前は

988:デフォルトの名無しさん
07/09/19 21:07:45
*(int*)pc とでもやりたかったのか?

989:デフォルトの名無しさん
07/09/19 21:09:33
>>986
何が言いたいか分からん。
97は2桁だろ。何が出て欲しいんだか。

990:デフォルトの名無しさん
07/09/19 21:11:57
>>986
charだろうがintだろうが10進数で出力したら97だろ

991:デフォルトの名無しさん
07/09/19 21:13:08
>>986
>4バイト分の整数
この部分を具体例をあげつつ詳細に説明してくれ

992:デフォルトの名無しさん
07/09/19 21:15:21
char c = 'a';
char *pc = &c;
printf("%d\n", sizeof((int)*pc));

4バイト(intの大きさ)分の整数が出力されているってのはあってるぞ

993:デフォルトの名無しさん
07/09/19 21:16:26
>>986
これでどうだ。
printf("%.8X\n", (unsigned int)(unsigned char)*pc);
ここにunsigned intへのキャスト演算子は不要だがサービスしておいた。

994:デフォルトの名無しさん
07/09/19 22:21:24
>>973
PADって構造化フローチャートみたいなやつ?


995:デフォルトの名無しさん
07/09/19 22:24:57
>>994
大学でやった記憶が

996:デフォルトの名無しさん
07/09/20 02:05:03
99というのはISOの年度だからANSI C99というのはおかしくないか

997:デフォルトの名無しさん
07/09/20 02:12:12
おかしいね。
ANSI C89
ISO C90
ISO C95(と言っていいのか)
ISO C99

998:デフォルトの名無しさん
07/09/20 08:33:04
個人的にはC89とかC99の前にANSIとかISOとか付いてる時点でキモい。
まぁキモいだけで、だからどうしようってほどじゃないけど。

999:デフォルトの名無しさん
07/09/20 09:18:44
埋め

1000:デフォルトの名無しさん
07/09/20 09:20:04


1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


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