[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 10:52 / Filesize : 232 KB / Number-of Response : 957
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 18



1 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 06:39:50 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 17
pc11.2ch.net/test/read.cgi/tech/1185286631/

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 94代目
pc11.2ch.net/test/read.cgi/tech/1185452895/

477 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:22:49 ]
1000から9999までの4桁の数字で、各桁を足した数で自分を割りきれる数がいくつあるか調べるプログラムを作りました。
今回は1325という正しい答えを知っていたのでエラーに気づきましたが、答えがわからない場合はどんな風にデバッグしていますか?

478 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:26:44 ]
全部出力して、検算する。

479 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:30:12 ]
各桁の合計を求める部分、割り切れるかどうかを判定する部分、個数を数える部分を
それぞれ個別にテストしてみる。

480 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:34:28 ]
別のアルゴリズムで解いてみる。

481 名前:デフォルトの名無しさん [2007/09/02(日) 15:36:56 ]
>>477
そのようなプログラムをCで書かなきゃいけないか?w

excelで十分だろ

482 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 15:40:25 ]
答えを知ってるってことは課題かなんかだろう
それで>>477みたいな疑問を持ったんだからやる価値があったってことだろう

483 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 16:52:58 ]
cat.cより抜粋

/* Buffer for line numbers.
An 11 digit counter may overflow within an hour on a P2/466,
an 18 digit counter needs about 1000y */
#define LINE_COUNTER_BUF_LEN 20
static char line_buf[LINE_COUNTER_BUF_LEN] =
{
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '0',
'\t', '\0'
};

/* Position in `line_buf' where printing starts. This will not change
unless the number of lines is larger than 999999. */
static char *line_num_print = line_buf + LINE_COUNTER_BUF_LEN - 8;

/* Position of the first digit in `line_buf'. */
static char *line_num_start = line_buf + LINE_COUNTER_BUF_LEN - 3;

/* Position of the last digit in `line_buf'. */
static char *line_num_end = line_buf + LINE_COUNTER_BUF_LEN - 3;

484 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 16:55:36 ]
>>483の続き

/* Compute the next line number. */

static void
next_line_num (void)
{
char *endp = line_num_end;
do
{
if ((*endp)++ < '9')
return;
*endp-- = '0';
}
while (endp >= line_num_start);
if (line_num_start > line_buf)
*--line_num_start = '1';
else
*line_buf = '>';
if (line_num_start < line_num_print)
line_num_print--;
}

Cの基本的なことを勉強して、cat.cのソースを読んでいますが
この行を計算する関数の処理が何が言いたいのかわかりません。
line_bufを参照しながらカウントしているように見えますが、いまひとつわかりません。
どなたかご教授お願いします。

485 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 17:16:14 ]
www.google.co.jp/search?q=%E3%81%94%E6%95%99%E6%8E%88
>何が言いたいのかわかりません
何を聞きたいのかわかりません



486 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 17:37:21 ]
行番号を表す文字列をポインタ使って変更してるんじゃない?
"399" → "400"みたいに。

487 名前:468 mailto:sage [2007/09/02(日) 18:25:16 ]
>>475
OSを作成するためにCを勉強しているわけではないだろ
そう意味で関係ない

488 名前:デフォルトの名無しさん [2007/09/02(日) 18:37:35 ]
じゃぁ、なん為にやってるの?

文字列を逆順に表示したりするプログラムを書くためですか?hw


489 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:41:38 ]
普通はアプリケーションを作成するためにC言語を勉強するんじゃない?

490 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:42:26 ]
この先必要となる基礎としての勉強じゃないんですか?>>488

491 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:43:35 ]
英語を習うときに、目的を持つかどうかの違い棚。

492 名前:デフォルトの名無しさん [2007/09/02(日) 19:06:28 ]
失礼します。
変数Aに一秒ごとに1を追加していくようにしたいのですが、どうしたらいいのでしょうか。

493 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:07:30 ]
どうしてそんなことをする必要があるのかってところから考えたほうがいいよ。

494 名前:デフォルトの名無しさん [2007/09/02(日) 19:09:41 ]
>>493
いや、タイマーに使いたいのですが。

495 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:14:44 ]
>>492

main()
{
  int A = 0;
  while (1) {
    sleep(1);
    A++;
  }
}



496 名前:デフォルトの名無しさん [2007/09/02(日) 19:16:24 ]
>>492
つ time.h
使った事無いけど…orz

497 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:21:45 ]
CでMMOのBOT作れるんでしょうか?

498 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:22:16 ]
いいえ

499 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 19:29:53 ]
タイマーの値が必要なときに、現在時刻を取得すればいいんじゃない?
時刻の取得の仕方は環境依存

500 名前:デフォルトの名無しさん [2007/09/02(日) 19:35:31 ]
>>495-496
ありがとうございます
試してきます

501 名前:487 mailto:sage [2007/09/02(日) 20:03:34 ]
>>488
> 文字列を逆順に表示したりするプログラムを書くためですか?hw
なかなかよいポイントをついているね

プログラミングの本質はデータの加工と入出力
世の中のすべてのプログラムは「文字列を逆順に表示したりするプログラム」

データーベースのアプリだって通信モジュールだって高度な科学技術計算のプログラムだって
みーんな本質的には「文字列を逆順に表示したりするプログラム」だ
OSもね


502 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 05:33:18 ]
もっと軽い言語がたくさんありますよ今は

503 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:21:34 ]
例えば何?

504 名前:デフォルトの名無しさん [2007/09/03(月) 23:10:59 ]
おい、五輪実況(男)で看板とか名無しとかLRとか決めるからおちょくりに来いよ
ヒント:なんかVIPの同盟国とかほざいてるから

live24.2ch.net/test/read.cgi/ootoko/1188634806/


505 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 16:12:59 ]
>>503
スクリプト系の言語のことをいってんじゃないの?



506 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 16:17:54 ]
スクリプト系はゲロ重だろ

507 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 18:12:15 ]
int main(void)
{
do {
switch (getnum("番号を入力してください\n")) {
case 1:
question(1);
break;
}
} while (0);
return 0;
}

int getnum(const char *msg)
{
int n;

for (printf(msg); scanf("%d", &n) != 1;) {
while (getchar() != '\n');
}

return n;
}
ここで使われているgetnumがいまいち理解できません。
何をしてるいるのか教えてください。

508 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 18:18:44 ]
printf(msg) は msg を表示
scanf("%d", &n) は数字を入力
!= 1 は scanf で数字が正しく入力されたか確認
while (getchar() != '\n'); は改行が来るまで入力を読み飛ばす
return n; は入力された数字を返す

これでおk?

509 名前:507 mailto:sage [2007/09/04(火) 18:40:35 ]
>>508さん
よくわかりました。
ありがとうございます。

510 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 16:50:33 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4898.txt
質問させてください。
+と-と|を使って升目を出力するプログラムです。
第一に40行目のところのコメントをはずすと最初のループはなぜ止まるのですか?
第二に40行目の部分のコメントをはずしたときに
47行目を切り取り、49行目の後に記述すると結果が変わるのはなぜですか?
いろいろ試すうちに2つ目の問題もでてきて分からなくなりました。
よろしくおねがいします。

511 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 16:54:42 ]
意味がわからない変数名はやめろ

512 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 17:09:32 ]
continueやめてbreakにすれば?

513 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 17:45:26 ]
>>510
> 第二に40行目の部分のコメントをはずしたときに
> 47行目を切り取り、49行目の後に記述すると結果が変わるのはなぜですか?
コンパイラのバグだと思われる。

514 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:09:57 ]
>>510
>>512も言っているけどswitch内のcontinueやめてbreakにするとこうなる

+---+
|   |
+---+
|   |
+---+


515 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:14:27 ]
>>510
確認してないけどたぶんあれね

continueにしちゃっているから44行目からwhile()の式評価にとんじゃっているんだと思う
実際には47〜49行目は実行されていない
本来は47行目に行かなきゃ行けないのでbreakにする



516 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:20:35 ]
32行目を下のように変更するだけで動作が変わるから、バグでしょ
while (d < e){

while (d < e){printf("");

517 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:26:23 ]
gcc は期待したとおりの動作になったが
bcc だと >>516 の変更前後で出力内容が変化した

変更前
+---+

変更後
+---+
|   |
+---+
|   |
+---+

518 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:28:46 ]
あっwhile (d < e)があったの気づかんかった
とりあえず>>515は忘れて

>>514は目的の動作が分からんので保留かな

519 名前:510 mailto:sage [2007/09/05(水) 18:42:26 ]
皆さん見ていただきありがとうございました。
continueで戻ることばかり考えていてbreakを忘れていました、
while文の中にあるのでcontinueを使わずとも繰り返しになるのですね、
whileとbreakとcontinueの使い方を再確認します。
変数名も以後気をつけます。

コンパイラのバグということで
他のコンパイラを試してみようと思っていたのですが
>>517さん試していただきありがとうございました。

520 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 21:23:40 ]
>>519
switch があるから、breakはそっちを抜けるだけで
whileにまで影響しないんだよ
switchとwhileが同じbreakなのは
たまに不便だがな

521 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 22:16:45 ]
まぁそういう時は多少見辛くてもif-else使うかな。俺は。
ループフラグとかgotoとかキラーイ

522 名前:デフォルトの名無しさん [2007/09/06(木) 02:48:24 ]
struct node *hoge(struct node* a)
{
struct node *b;
    b = a;
    a = NULL;
 free( b );
 return a;
}

free関数の形式を調べてみるとvoid free(void *ptr);と書いてありました
ttp://www.bohyoh.com/CandCPP/C/Library/free.html

つまり、上記の関数を実行すると、引き数で渡されたポインタaがNULLを代入される前に指していた領域を開できるということでしょうか?

自分で調べてみて「たぶんあっているな。」とは思ってもどうしても確信できなくて不安になってしまいます。みなさんはそんなことありませんでしたか?(このレス二つ目の疑問です)

523 名前:デフォルトの名無しさん [2007/09/06(木) 04:23:10 ]
適当な結果を標準出力に出力しつつ時々
y/n を聞いてくるコマンド ques が
あったとします。y/n を検知して
代わりに y を入力してくれる
プログラムを書きたいのですが、
何をキーワードに検索してよいのか
すらわかりません。パイプで検索したのですが
何か違う感じでした。
よろしくお願いします。


524 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 07:33:36 ]
>>522
・できる。
・根本的にポインタを理解できていればそんなことはないと思う。

>>523
他に標準入力する項目がなく、quesが確実に標準入力を利用しているというのなら、
yes | ques
でOK。

525 名前:デフォルトの名無しさん [2007/09/06(木) 10:22:16 ]
>>524
すいません。C言語でやりたいのです。
それと質問に応じて no と答える場面もあります。
よろしくお願いします。




526 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:01:35 ]
>>525
それなら、パイプで間違ってないと思う。
コマンドの標準出力/標準エラー出力を監視しながら特定のパターンを認識したら、
コマンドの標準入力に対して、yまたはnを投げる。

>何か違う感じでした。
何を期待しているか知らないが、コンソールアプリでは
WindowsのGUIアプリのように、入力待ちになったとかのイベントが
飛んできて、そこに処理を記述するわけではない。
実装はどうしても泥臭くなると思うが。

527 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:03:40 ]
ファイル操作について質問なのですが、
もし現在の日付をfprintf("%d %d %d %d %d %d\n",local->tm_year・・・以下略
こういう風にファイルに保存したとしますよね。
このファイルを読み込むとき、
fscanf("%d%d%d%d%d%d",&year,・・・以下略という風に読み込んだとき、
何故yearという変数にはしっかりとyearで保存した数字が格納されるのですか?
説明下手ですみません。

528 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:07:05 ]
fprintf("%d %d %d %d %d %d\n",local->tm_year・・・
で書き込むと当然、
2007 09 06 ・・・
となるから、fscanf("%d%d%d%d%d%d",&year,・・・で読み込むときは
空白か改行まで読まれるので
2007
09
06
・・・
と順に読み込まれる

529 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:08:05 ]
なぜって言われても、それが fscanf という関数の機能なんだし。
どういう結果になると思ってた?

530 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 11:10:00 ]
なるほど・・・左上から順に変数に格納されるんですね。それなら呼び出す
順番に気をつけないとメチャクチャになりますね。分かって良かった。
ありがとうございました。

531 名前: mailto:sage [2007/09/06(木) 16:45:10 ]
すいません。gccの拡張命令について知りたいのですが
どこかに命令一覧が載ってるサイトってありますか?

532 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 16:52:09 ]
配列を引数として関数にいれて、関数でその配列の中身を表示しておいて
mainでその関数を100回くらいまわしたら
値がかわってくるんだけど何が原因だと思われますか?

配列は20要素で
引数は4つ使ってます。

533 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 16:56:09 ]
>>532
そりゃプログラムのバグでしょ
具体的にコード見せてくれないとそれ以上はわからん

534 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:09:10 ]
void makemake(---){ (これをmainと思ってください)
double ma[120][20];
double h1[20],h2[20],n[120];
int num;

fileinput(h1,h2,num);
for(i=0;i<120;i++){
n[i]=fmake(ma[i],h1,h2,num);
}
}

そしてfmake関数に渡します
double fmake(double a[20],double b1[20],double b2[20],int n){
int i;

for(i=0;i<20;i++){
printf("b1:%lf b2:%lf",b1[i],b2[i]);
}

}

まー一部なんでわかりにくいかもしれませんが。
fmake関数のprintfで20ループくらいまでは
きちんと表示されるんですけど途中でnanとかおかしな数字が表示されるんです。



535 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:10:21 ]
not a number



536 名前:532 mailto:sage [2007/09/06(木) 17:13:30 ]
534ですけどお願いします。

537 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:25:07 ]
そのファイルがおかしいんじゃないの

538 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:26:57 ]
>>536
思わず笑ってしまった。
>>535の not a number は>>534の nan を指してる。

NaN (Not a number)、日本語だと非数。

浮動小数点演算で、0除算など計算結果が正しく求められない計算を
したときに、値が正常でないことを示す特別な値が格納される。その値のこと。

繰り返しはまったく同じものを表示しているわけではないみたいだけど、
fileinputで読んできた値がすでにおかしいんじゃないの?

539 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:45:24 ]
>>534
fileinput をでっちあげて動かしてみたが、まったく問題ない。
省略した部分がおかしいと思われ。

540 名前:532 mailto:sage [2007/09/06(木) 17:46:27 ]
ファイル入力が間違ってるんじゃないかって指摘するってことは
プログラムはあってるってことですか
ありがとうございます。

どうしようもなくなったら直接fmakeにb1,b2のファイルいれますわ。

541 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:49:45 ]
>>540
プログラムもなにも、挙げられた断片だけでは何もしないコードに見え
る。fmake()は何も返してないし。


542 名前:532 mailto:sage [2007/09/06(木) 17:53:22 ]
正規分布のプログラムなんすよ。
double a[20],  データ120X20
double b1[20],  20次元の平均
double b2[20],  20次元の分散
int n      平均・分散の組。
式は書くの大変だから省いてるだけです。

543 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 18:02:25 ]
予想ではたぶんその式が悪い

544 名前:532 mailto:sage [2007/09/06(木) 18:04:15 ]
double fmake(double a[20],double b1[20],double b2[20],int n){
int i;

for(i=0;i<20;i++){
printf("b1:%lf b2:%lf",b1[i],b2[i]);
}

以上

545 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 18:06:14 ]
わからなければ計算したり配列弄るごとに中身出力してみ



546 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 18:30:27 ]
どこが悪いかわかんないのに、なんでそこが悪いと思うのか理解できない。

547 名前:デフォルトの名無しさん [2007/09/06(木) 19:15:12 ]
このソースがコンパイルできないんですけど
どこに問題があるんですかね?
コンパイラはgcc3.3.6です。
ttp://www8.uploader.jp/user/vipprog/images/vipprog_uljp00020.txt

548 名前:532 mailto:sage [2007/09/06(木) 19:33:26 ]
>>532て書いてるんですけど。
式はあってるんだよ確認ずみだから。
入力のプログラムがあやふやだからここで聞いただけ。

549 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:35:12 ]
はいはい。コンパイラのバグかなんかじゃねえの。

550 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:39:09 ]
そろそろ荒らし化しそうな予感

551 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:48:25 ]
こんなアホ相手にするお前ら優しいな

552 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:48:45 ]
よく言われる

553 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:51:32 ]
>>547
配列の宣言の仕方とsizeの扱い直せばいけると思う

554 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 19:53:07 ]
>>553追加でコンパイルするだけならsizeはそのままでもいいかも
連投スマン

555 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 20:18:46 ]
どんどん本性が出てきたな



556 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:39:02 ]
>>510 が、もう見てないだろうから、書いてみる
#include<stdio.h>

int main(void){
int x, y, width=3, height=4;

for(y=0;;y++){
for(x=0;x<width;x++) printf("+---");
printf("+\n");
if(y>=height) break;
for(x=0;x<width;x++) printf("| "" "" "); // コピペ用
printf("|\n");
}
return 0;
}

557 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:38:24 ]
殆どのネットゲームのBOTは C言語で開発されてるんでしょうか?
サイトありましたらおしえてください m)_ _m)

558 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:43:18 ]
無い

559 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 23:16:50 ]
www.google.co.jp/

560 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 10:46:15 ]
>>559
ありがとうございました

561 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 12:55:50 ]
ネトゲのBots全てがCで作成されているかは知らんが
Cで作成できないことはない。
まぁ開発にあたっては、Cの知識だけでなく、それ以上の多くの知識が求められます。

562 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 14:31:57 ]
UWSCあたりならすぐに書けそうだな。

563 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 16:02:02 ]
関数は自分で積極的に作ったほうがいいですか?
それとも既存のものの効率的な組み合わせにこだわったほうがいいですか?

564 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 16:59:44 ]
既存のものの効率的な組み合わせをする関数を自分で積極的に作ったほうがいい

565 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:00:20 ]
>>564
ありがとうございます。なるほど!積極的に作ります



566 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:21:22 ]
グローバル変数として宣言する場合と、staticを付けて関数内で宣言する場合は
どういう違いがあるんでしょう?いくつかの説明文見たところ自分では同じように
思えるんですが、グローバル変数にstaticを付けるプログラムの例を見かけたので気になりました。

567 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:27:15 ]
static を付けないグローバル変数 → 他のファイルからでも参照できる
static を付けたグローバル変数 → 他のファイルからは参照できないが、同じソースファイル内ならどの関数からでも参照できる
static を付けた関数内の変数 → 他の関数からは参照できない

間違って書き換えたりしないように、見える範囲をなるべく最小限にする方が良い。

568 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 19:40:10 ]
>>567
ありがとうございます、アクセスできる範囲に違いがあるんですね。
つい値を保持できる期間ばかりに目が言ってたみたいです

569 名前:デフォルトの名無しさん [2007/09/07(金) 23:03:28 ]
入力された文字列が正しい文字列かを判断するプログラムなんですけど

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

int getflg(char wd);
main()
{
int n;
char word;
printf("文字入力:");
scanf("%s",&word);
n=getflg(word);
printf("flg=%d",n);
}
int getflg(char wd)
{
int flg=0;
if ( strcmp(wd,"あいうえお")==0 ){
flg=1;
}

return flg;
}

これだとエラーがでるのですがどうすればよいのでしょうか;;

570 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:06:22 ]
>char word;
>printf("文字入力:");
>scanf("%s",&word);

え?w

571 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:08:53 ]
>>569
「文字」ではなく「文字列」だから

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

int getflg(char *wd);
main()
{
int n;
char word[20];
printf("文字入力:");
scanf("%s",word);
n=getflg(word);
printf("flg=%d",n);
}

int getflg(char *wd)
{
int flg=0;
if ( strcmp(wd,"あいうえお")==0 ){
flg=1;
}
return flg;
}

だね

572 名前:569 [2007/09/07(金) 23:13:04 ]
>>570
すいません

>>571
文字だと&が必要で
文字列だと&は必要ないということですかね?

あと*wdにするのはなんでですかね?汗

573 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:18:20 ]
>>572
>文字列だと&は必要ないということですかね?
必要ない

>scanf("%s",word);
>if ( strcmp(wd,"あいうえお")==0 )
文字列同士の比較をしたいわけでしょ

char wd だと1文字だけしか渡せない、文字列として渡したいならポインタとして渡すしかない
char *wd は文字列のポインタを渡している

574 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:30:21 ]
#include <stdio.h>
#include <string.h>

int getflg(char *wd);
main()
{
int n;
char word[20];
printf("文字入力:");
scanf("%s",word);
n=getflg(word);
printf("flg=%d",n);
}

int getflg(char *wd)
{
return !strcmp(wd,"あいうえお") ? 1 : 0;
}

575 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:34:11 ]
>>534
> double ma[120][20];
これでスタックフレームを何byte消費しているか理解しているか?

static double ma[120][20];
static double h1[20]
static double h2[20]
static double n[120];
にしてみろ

これで結果がお前の予想通りになったなら
コンパイラはお前の予想通りには動かないということを知っておけ




576 名前:569 [2007/09/07(金) 23:35:04 ]
>>573
char wdだと1文字だけなんですか?

577 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 23:41:55 ]
>>575
> これでスタックフレームを何byte消費しているか理解しているか? 

たった、18,9Kじゃん。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<232KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef