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


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

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



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

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

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

762 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:50:32 ]
スレ違いに値しますが、どなたかtabキー送り幅の設定方法を教えて下さい
8マスから4マスに変えたいです

763 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:51:57 ]
>>762
環境による。また、アプリケーションの設定にもよる。

764 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:52:18 ]
スレ違いすぎるwww
エディタによる、いやそもそもエディタの話なのかも知らんが

765 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:52:22 ]
それは表示する側の問題だろ。Cの範疇じゃ無理。
使ってるOSと端末くらい書け。

766 名前:デフォルトの名無しさん [2008/01/14(月) 00:21:01 ]
教えてください


int main(void)
{

char *c1;

{
char *c2;

c1 = StoA(1000);
c2 = StoA(2000);

printf("c1 : %d\n", c1);
printf("c2 : %d\n", c2);

}

return 0;

}

このプログラムを実行すると、 なぜかc1の値がc2の値と同じになってしまします。

なぜなのか教えてください。

767 名前:デフォルトの名無しさん [2008/01/14(月) 00:22:24 ]
***追記***

ちなみにStoA関数は数値を文字列に変換する関数です。

768 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:22:35 ]
StoAって何だよ

769 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:23:33 ]
StoAの中身書いてないわろた

770 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:24:04 ]
どうみてもStoAが悪いだろw



771 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:35:00 ]
どうみてもStoAが悪い。
あと
>printf("c1 : %d\n", c1);
>printf("c2 : %d\n", c2);
%sちゃうのか?

で、同じ数値になるってところからサイコメトリーすると、
グローバル変数かローカル変数辺りの配列のポインタを返してると見た。
コール時にバッファ渡すか、StoAでmallocしてmainでfreeするかしたまい。
StoAを作るのが目的でないならsprintfかitoaでも使え。(個人的にはsprintf)

最後に、C言語で数値を文字列に変換する関数は「ItoA」か「ItoS」な。
StoAだと何してんだか訳分からん。

772 名前:デフォルトの名無しさん [2008/01/14(月) 00:42:07 ]
すんません%sでした"汗

StoAはshort型からアスキーコードに変換する関数です。

int main(void)
{
char *c;
c = StoA(123);
printf("%s\n", c);

return 0;
}

だと正常に動きます。


773 名前:デフォルトの名無しさん [2008/01/14(月) 00:44:08 ]
mainの中にあたらしいブロックを作ってその中で*c1をつかうのがなんかしらダメなんじゃないかなと思うんですが。

作るのが目的ではなくてなぜこうなるのか説明するのが目的なのでよろしくおねがいします。

774 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:45:06 ]
いいからStoAの内容書けよ

775 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:46:24 ]
>>772
んなこた良いからさっさとStoAのソースを貼れwww

776 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:48:09 ]
StoAのソースコードは守秘義務の関係上公の場に貼ることは出来ません。
無茶な要求をしないでください。もう少し常識をわきまえて。

777 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:48:59 ]
じゃあ分かりません帰ってください

778 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:49:16 ]
説明するのが目的なのか、説明してもらうのが目的なのかはっきりして欲しいな

779 名前:デフォルトの名無しさん [2008/01/14(月) 00:51:35 ]
>>776
その通りです。

ありがとうございます。

>>778

説明するのが目的なので分かりやすく説明してもらえると光栄です。

780 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:55:23 ]
とりあえず、StoAのソースを貼る気がないのなら終了で。



781 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 00:56:15 ]
>>779
c1 = StoA(1000);
c2 = StoA(2000);
printf("c1 : %s\n", c1);
printf("c2 : %s\n", c2);

↑で同じ値が出るんだろ?多分両方2000か?
c1 = StoA(1000);
printf("c1 : %s\n", c1);
c2 = StoA(2000);
printf("c2 : %s\n", c2);
これで同じになるか試してみ。
違う値になるようなら、多分StoAがstatic変数かグローバル変数のバッファ使ってる。
printf("%p, %p\n", c1, c2);
で同じ値が出てくるはず。

そうじゃなきゃ、自分でデバッグしてくれ。
ソース無しじゃお手上げ。


782 名前:デフォルトの名無しさん [2008/01/14(月) 01:14:31 ]
正直いいますと今手元にソースが無いのでかけませんが、覚えてる範囲で流れを書きます。

処理@
引数の桁数を調べる
(引数が12345ならiDigに10000を入れておく)

処理A
pStrにcStrのアドレスを入れて
数値を文字コードに変換して*pStrに格納。

処理B結果をかえす。

ちなみにcStrはstatic変数です。

わかりにくくてすいません"汗






783 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 01:16:48 ]
StoAがわかったら説明してやんよ

784 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 01:18:02 ]
そら二回目の呼び出しで cStr の内容を上書きしてるから
同じのが表示されるの当たり前でんがな。

バッファをローカルで持って、引数で渡すといいよ。

785 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 01:36:21 ]
ある時間,たとえば10時20分50秒になったらAの動作を行うというプログラムはどう作れば良いですか

ひとつの方法としてtimeを使って,現在の時間を取得し続け時間になれば動作する方法
これだとずっと時間を取得し続けるので,良くないような気がするので・・・

ちなみに環境はFedora,gccです.

786 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 01:39:22 ]
cron に投げれば

787 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 01:43:59 ]
sleep(指定時間-現在の時刻)
すりゃいいだろ。
ま、ふつーにcron使えと。

788 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 01:47:34 ]
本人の振りしてあおるのもうやめろよwwwみんな耐性ついてるんだしwwwww

789 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 01:48:44 ]
>>786
ありがとうございます.ちょっと調べましたがcronは使えそうです.
あとは,外部から動作する時間の変更が行われるので,それが出来るか調べて見ます.

自分のプログラムだけで実現できると一番良いですが・・・

790 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 01:51:44 ]
sleepの方法も考えましたが,時間の変更を行うことがあるので実現しにくいと思いやめました
やはりcronを使わないとしたらこの2つですかね



791 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 02:02:11 ]
コンソールアプリケーションの画面を何も表示されていない真っ黒の画面に
戻したいんですが方法を教えてください。

792 名前:785 mailto:sage [2008/01/14(月) 02:04:17 ]
cron調べましたが使えそうです
ありがとうございました

793 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 02:04:31 ]
OSに依存する

794 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 02:36:42 ]
>>791
winだったら、system("CLS");

795 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 02:38:30 ]
>>791
win以外ではエスケープシーケンスとか

796 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 04:25:03 ]
clearコマンドが使える場合もあるけど、鼬害。

797 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 10:50:14 ]
sysytem("cls")だとちらつきがひどいんですが
ちらつかないようにって可能なんでしょうか。
もし可能であるならばどうやればいいのでしょうか。

798 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 10:53:06 ]
ちらつきって

コンソールでゲームでもつくってんのか?


799 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 10:55:58 ]
エスケープシーケンスなりCursesなりコンソールAPIなり好きなの使っとけ
細かい制御が必要なら環境かけっつうの

800 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 10:56:23 ]
毎回書き換えが必要な所のみ書き換えるか
全画面を一度に書き換えるか。

どちらにしろ標準関数だけじゃ辛いので、
こういった関数を使うしかない。
msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpfileio/html/Toppage_Console.asp



801 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 11:26:59 ]
ちょっとしたゲームをつくっています。
環境はWinです。

同じ文字列が右から左に移動していき左端にきた文字は消えていくというのをしてるのですが
おもったようにちらつきを消すことができまちぇん。。

802 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 11:40:12 ]
>>801
消さずに上書き。
変化の無い部分は書き換えない。


803 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 11:48:49 ]
う、うわがき・・・
上書きってどう書けばいいのかわかりません。。。。
ちょっとした例示してもらえませんか?

804 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 11:49:56 ]
消したい文字列と同じ座標にスペースか何かで上書きするとか

805 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 11:58:06 ]
// >>801
#include <stdio.h>
#include <string.h>

void func(int width, const char * str)
{
int len = strlen(str);
for (int ic = 0; ic <= len; ++ic) {
printf("\r%*.*s", width, ic, str);
fflush(stdout);
sleep(1);
}
for (int ic = 0; ic < width; ++ic) {
printf("\r%*s%*s", width - 1 - ic,
ic < width - len ? str : str + ic + 1 - width + len,
ic + 1, "");
fflush(stdout);
sleep(1);
}
}

int main()
{
func(20, "abcde");
return 0;
}

806 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 12:41:05 ]
int main(int argc, char **argv){
FILE *fp;
int i, j, a, b;
short int image[HEIFGT][WIDTH];
上のプログラムを一行ずつ何をしてるんですか?

a = atoi(*argv[1]);
b = atoi(*argv[2]);

807 名前:806 mailto:sage [2008/01/14(月) 12:42:21 ]
あと下の
a = atoi(*argv[1]);
b = atoi(*argv[2]);
も教えてください

808 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 12:49:27 ]
Windowsでもcurses使えるんだっけか?

809 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 12:54:39 ]
>>808
移植はされてると思う。

810 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 12:56:27 ]
>>807
プログラムの起動時に渡されたコマンドラインの引数を、数値に変換してるんだけど、それだとバグっていて動かないね。



811 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 14:19:43 ]
806の日本語がバグっとる

812 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 16:12:11 ]
変換前:This
変換後:hisTay
変換前:is
変換後:siay
以下のコードで上のように出力して欲しいのですが上手くいきません
何故でしょうか?

int main() {
int i;
char s[256] = "This is a pen", *word;
word = strtok(s, " ");
printLatinWord(word);
word = strtok(NULL, " ");
// wordに"ay"が入る。何で?
printLatinWord(word);
return 0;
}

void printLatinWord(char *word) {
char *alp;
/*
通俗ラテン語風に変換して出力
※先頭の文字を末尾に移し、その後ろにayを付加する。
*/
printf("変換前 : %s\n", word);
strncpy(alp, word, 1);
alp[1] = '\0';
strcat(word, alp);
strcat(word, "ay");
printf("変換後 : %s\n", &word[1]);\
}

813 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 16:29:28 ]
>>812
char *alp;
ポインタにぶちこむな
char alp[1000];
的な感じにしないと

814 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 16:32:59 ]
>>812
strtokは、与えた文字列(この場合s)の中を書き換えながら、そこを指すポインタを直接返す。
たとえば、"This is a pen" を与えると、strtokは最初
"This\0is a pen"
 ↑
ここを返す。文字列は\0で終わる決まりなので、"This"が得られる。2回目は
"This\0is\0a pen"
         ↑
ここを返す。"is"が得られる。3回目は
"This\0is\0a\0pen"
              ↑
            ここを返す。"a"が得られる。
こういう動作なので、帰ってきた文字列に直接strcatで追加すると、
後ろの文字列(=次に返される文字列)が書き換わってしまう。
つまり、そのprintLatinWordを実行すると、sの中は
"ThisTay\0a pen"
のように書き換わり、次にstrtokが返すはずだった "is" は "ay" になってしまう。

815 名前:812 mailto:sage [2008/01/14(月) 16:42:27 ]
>>813
なんとなく*alpになってしまいました
まだ違いが良く分かってないので頑張って勉強します

>>814
wordを書き換えるとsも変わってしまうんですね。なるほど
丁寧にどうもです
*wordをword[256]に、word = strtok(s, " ");をstrcpy(word, strtok(s, " "))に直して上手くいきました

816 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 16:55:04 ]
大学の課題で一部分からない点があるので、よろしければヒントをお願いします。

#include<stdio.h>
#define MAX 10

int inputnum(int num[]){
int i;
for(i=0;i<MAX;i++){
scanf("%d",num[i]);
}
return num[];
}

int main (void){・・・・・・と続くのですが、
上記のサブ?ルーチンに表記の間違いがある場合、修正せよという問題です。
ですが配列の返し方など全て自習ということでここで止まってます…。
構文にエラーがあるというところまで分かっているのですが、
どうすえればいいか分かりません。ご教授願います。 orz

817 名前:816 mailto:sage [2008/01/14(月) 16:56:30 ]
For文が見にくくなってしまいすいません…。
よろしくお願いします。

818 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 16:59:05 ]
void inputnum(int num[]) {
int i;
for(i=0; i<MAX; i++) scanf("%d", num + i);
}


819 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:00:36 ]
>>816
return 0;とでもしておけ
返さなくても渡された中身は書き換わってる
なんでかはポインタについて勉強せんと・・

820 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:06:48 ]
scanf("%d", &num[i]);
もでした



821 名前:816 mailto:sage [2008/01/14(月) 17:17:55 ]
>>818,>>820
丁寧にありがとうございます。

>>819
ということは>>818の通りvoid宣言でいいのですね…。
後でじっくり調べてみます。ありがとうございます。

822 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 17:21:48 ]
int inputnum(int num[], size_t num_size)
{
    int i;
    for(i=0; i<num_size; i++)
        if(scanf("%d", &num[i]) != 1)
            return 0;
    return 1;
}


823 名前:816 mailto:sage [2008/01/14(月) 17:58:20 ]
>>822
すみません、「size_t num_size」とは何でしょうか?
また戻り値がどこの変数へ戻るのか分かりません…。


また1つ分からない事があるのでどなたかご教授お願いします orz
サイズを指定せずに配列を作る事は可能でしょうか?
int num[];
//これでは要素が無いためサイズが0であるのでできないということまで
分かりましたがそれ以上で詰まっています。
よろしくお願いします。

824 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:04:39 ]
>>823
size_tは型。たぶんunsigned intと同じである環境が多いのかな?
要は自然数用型とか思っとけばとりあえずOK。(サイズにマイナスはないからね)
戻り値がどこに入るかは呼び出し側次第。

int func( void )という関数があったとして
main内で「int a = func( );」 としてればfunc内の戻り値がa内に入る。

825 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:06:53 ]
>>823
サイズを指定しない配列は無理

malloc系を使えば好きな大きさで確保したり、大きさ変えたりはできるけど

826 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:08:05 ]
char s[] = "もけあ";
とかはできるけどそれは宣言のときだけね

827 名前:816 mailto:sage [2008/01/14(月) 18:32:46 ]
>>824
詳しくありがとうございます。
int inputnum(int num[], size_t num_size)
メインルーチンの方で上の2つの変数の値を指定すればいいということですね。

>>825-826
明確にありがとうございます。
入力する回数を予め決めるか、
要素次第ということですね。大変参考になりました。

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

828 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:59:16 ]
int func(int num){

return !(num%2);

}

上記の関数でnumが奇数の場合と偶数の場合の戻り値はそれぞれどうなりますか?
有識者の方宜しくお願いします。

829 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 18:59:55 ]
タメセカス

830 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 19:06:49 ]
算数じゃん。



831 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 19:07:11 ]
>>828
何がわからんのだ?%演算子か?!演算子か?
関数や戻り値がわかってるのならどっちかだろうな。
num = 2;
num % 2 == 0;
!0 == 1

num = 1;
num % 2 == 1;
!1 == 0;
こんなもんでわかるだろ。
ってか>>829で良かったかな。

832 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 19:08:07 ]
自己顕示欲・・・

833 名前:816 mailto:sage [2008/01/14(月) 21:14:46 ]
すみません。また1つ疑問ができてしまいましたのでご教授お願いします… orz

配列inputのサイズ変数MAXをサブルーチンで決定したいのですが、

int MAX;
void sub(int MAX){
  scanf("%d",&MAX);
}

int main(void){
  input[MAX];



}

とした時に、「sub(MAX);」をどこで定義すればいいのでしょうか?
それともルーチンではできないでしょうか?
よろしくお願いします orz

834 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:18:07 ]
(^ん^)?

835 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:18:29 ]
とりあえずC言語における「定義」の意味を調べなおした方が

836 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:19:26 ]
日本語でおk

MAXの値はどこでも変えられるけど?
MAX = 4;とか好きにすれば?
それとも配列のサイズ変えたいの?

837 名前:816 mailto:sage [2008/01/14(月) 21:19:52 ]
>>833訂正です、すみません。

void sub(int MAX){
  scanf("%d",&MAX);
}

int main(void){
  int MAX, input[MAX];



}

838 名前:816 mailto:sage [2008/01/14(月) 21:22:24 ]
>>835
すみません、定義ではなく呼び出しでした。ご指摘ありがとうございます。

>>836
サイズを入力で指定したいのですが、そのプログラムはサブルーチンで記すことが条件です。

839 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:25:06 ]
>>833
若干エスパー。
丸写しはどーかと思うけど、こういうことか?
void sub(int *MAX){
  scanf("%d",&MAX);
}

int main(void){
  int MAX;
  int *input;
sub(&MAX);
  /* int input_NG[MAX] <- これはムリ。配列の宣言では定数しか使えない */
  input = malloc(MAX * sizeof(int));



  free(input);
}


840 名前:816 mailto:sage [2008/01/14(月) 21:37:44 ]
>>839
ご回答ありがとうございます。
分かりづらくなってしまい申し訳ございません。

int MAX = 10;
int main(void){
  int main[MAX];




このように、最初から数値を指定するのではなく、
MAXの値をscanf等の入力で毎回変更することはできませんか?
またできる場合、それをサブルーチンでまとめられますか?


イメージはこんな感じになります。
scanf("%d",&MAX);
int input[MAX];

何度もすみませんがよろしくお願いします。



841 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:53:30 ]
>>840
一応そのイメージで839を書いたんだけど・・・。
要はmallocを使いたくない(or知らないので分からない)ってこと?

どうしても配列ってことであれば、おそらく分からないだろうけど
C89ならムリ。C99なら出来る。
つまりコンパイラによる。
例えば俺が知ってるうちではVCでは出来ない。gccは最近のであれば出来る。

842 名前:816 mailto:sage [2008/01/14(月) 21:53:33 ]
>>839
/* int input_NG[MAX] <- これはムリ。配列の宣言では定数しか使えない */
すみませんようやく意味が分かりました。
本当に詳しくありがとうございました。

843 名前:816 mailto:sage [2008/01/14(月) 22:01:13 ]
>>841
#include <stdlib.h>とセットでちらっとだけ見た事があるので
調べて分かれば使えると思いますが、分からないということでお願いします。

別のプログラムで指定した値をファイルに出力し、当プログラムで読み込むというような方法はあるのでしょうか?

844 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 22:08:52 ]
>>843
とりあえずfopen辺りでファイルの入出力ができるよ(他にもあるけど)
それも分からないの?

845 名前:816 mailto:sage [2008/01/14(月) 22:17:29 ]
>>844
そこは以前にある程度習っているので復習すればできると思います。
ありがとうございます。

846 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 22:18:52 ]
>>843
>調べて分かれば使えると思いますが、分からないということでお願いします。
お願いされてもwww
とりあえず十分に大きい固定サイズの配列を用意するか、
mallocを調べるのが良いと思うよ。

847 名前:816 mailto:sage [2008/01/14(月) 22:34:59 ]
>>846
>お願いw
すみません余計でした^^;

>固定サイズ
とても参考になりました。
0〜固定サイズまでで値を指定することならできそうです。
ありがとうございました。

時間があればmallocを扱えるようにしたいと思います。

848 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 16:44:03 ]
質問。
ハッシュ法について勉強してるんだけど、格納されたデータ(学籍番号と氏名)を読み取る際に、学籍番号の数(生徒数)を読み取る部分的なプログラムが分かりません。
どういう構文使えばいいでしょうか?
読み込みはこんな感じです↓
/* データファイルの読み込み */
if ((fp=fopen("DATA","r"))==NULL){
printf("File \'DATA\' is not found !\n");
}


while ( fscanf(fp, "%d %s", &data_zipcode, data_address) > 0 ) {
printf("%d : %s\n", data_zipcode, data_address);
/* データの格納 */
if ( StoreData(data_zipcode, data_address) == 0 ) {
printf("Hash Table is full !\n");

}
}
fclose(fp);

849 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 17:05:19 ]
>>848
ファイル内のデータの総数を知りたいなら、一回空読みすればよかろ。
つーか、それってハッシュ法と関連するのか?

850 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 17:50:05 ]
>>849
ハッシュするための下準備。んで、出来ました。ありがとうございました。



851 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 20:06:23 ]
if ((fp=fopen("DATA","r"))==NULL){
printf("File \'DATA\' is not found !\n");
}

いっつも思うんだけどさ、これって何したいの?

ファイルオープン失敗したまま処理続けるなよ

852 名前:N [2008/01/15(火) 20:07:27 ]
ナップザック問題を解説付きで教えてください。

853 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 20:17:11 ]
>>851
その箇所だけならなんとも言えんだろーがw

854 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 21:25:42 ]
#include <stdio.h>
#include <stdlib.h>

#define MAX_LINE 128

int main(void);

int main(void)
{
char buf[MAX_LINE];
int n;

printf("降水確率を入力してください。\n");
gets(buf);
n = atoi(buf);
ptintf("降水確率は %d %% です。\n", n);
if (n >= 50){
printf("傘を忘れずにね。\n");
}
else {
printf("傘はいりません。\n");
}
printf("いってらっしゃい。\n");

return(0);
}

/*これ↑のどこが悪いのか教えてください*/

855 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 21:31:57 ]
gets(),ptintf,return(0);

856 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 21:47:31 ]
ていうかなんでmain関数にもプロトタイプ宣言してんの?

857 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 22:01:51 ]
>>852
ググった方が早いと思うよ。
検索ワードはナップザック・ナップサック・動的計画法とかで
アプレット使った図解解説ページがあったと思う。
C言語の質問というよりアルゴリズム全般、数学の方が分野としては近いと思う。

858 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 22:39:47 ]
mainクソワロタwwwwwwwwwwwwwwww

859 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 01:21:59 ]
>>854
>/*これ↑のどこが悪いのか教えてください*/
降水確率が40%でも傘を持たせない根性。

860 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 07:03:52 ]
グレゴリウス暦の定義を利用して入力された日は何曜日か計算するにはどうしたらいいでしょうか?




861 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 07:28:06 ]
>>860
つ[time.h]

862 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 07:31:21 ]
>>860
ツェラーの公式






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

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

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