|
>>1909 hooma どういう HTML を出力したいかが書いてないので、誰にも 正解は答えられないと思いますよ。CSV から読み込むだけなら、 「,」で split して、「10」が出てきたら新しいを配列を用意し、 次の「10」が出てくるまでその配列に push。そしたら1つの配列には 「ヘッダ,分類名,分類詳細名1,リンク先1,分類詳細名2,リンク先2...」 という値が入るでしょうから、後は適当に処理すればよいでしょう。 |
|
fgetsとsscanfの使いかたがまったくわかりません。 誰か教えて下さい。 下のような問題をといています。 誰でもいいのでできれば解いてもらえませんか?? 問題 1.ユーザーに1つの数の入力を求め、入力された数字を8進数表示、16進数表示するプログラムを作りなさい。 条件:main関数1つで作成する。 gets(),scanf()は利用しないこと。 扱う数字のさいだいは、int型で良い。 printf()は用いてもよい。 |
|
>>1911 HELP 宿題なのでしょうから、自分でやりましょう。 「ここまで自分でやりましたが、〜がわかりません」なら ともかく、「全くわかりません」では問題外です。 # 2ch に行けば、お姉さんやギコ猫が答えてくれますけどね。 |
|
確かに宿題みたいなものなんですが、ほんとに全然さっぱりなんです。 fgetsとsscanfがどういうものなのかだけでも教えてもらえませんか? 参考書など読んだのですが、どのように使えばいいのかわからないんです。 問題のプログラムは一応できたんですが、あっているのかもわからないし、 自分で作ったプログラムなのに理解できないんです^^; 誰かお願いしますm(_ _)m |
|
>>1913 HELP では、自分の書いたプログラムを見せて、「こことここがわからん」 「ここは、こういう意味だろうか?」と質問してみてはどうでしょうか。 課題のプログラムについて、知るべきポイントや勉強すべきポイントは たくさんあります。だから世の中にはたくさん C の参考書が出回って いる。それら全てを回答者に解説させようとせず、自分がどこまで 理解しているかを明らかにした上で、ポイントをしぼって質問する のが「うまい質問の仕方」というものです。 |
|
次の問題のプログラムを作ってみましたが、コンパイルできません。 どこが間違っているのか教えて下さい。 入力された数字を2進数表示するプログラムを作成しなさい。 条件:main関数、2進数の文字列を返す関数の2つの関数で作成する。 扱う数の最大は、int型でよい。 #include <stdio.h> int sinnkeisann(int k); main () { char buff[32+1]; int k ,kotae; printf("整数値を入力して下さい>>>"); fgets(buff,sizeof(buff),stdin); sscanf(buff,"%d",&k); kotae = sinnkeisann( k ); printf("2進数表記>>>%d",kotae); } int sinnkeisann(int k) { int a,i,answer; char retu[32+1]; a=k; retu[32] = '\0'; for(i = 0; i < 32; i++){ if(i != 0 && a == 0){ break; } if(a %2 == 0){ retu[(32-1) - i] = '0'; } else{ retu[(32-1) - i] = '1'; } a = a / 2 ; } answer = retu[0]+(32-1)-i+1 ; return answer ; } |
|
>>1915 HELP FreeBSD 4.2-RELEASE ではコンパイルできましたよ。コンパイル できない場合は、どういうエラーメッセージが出たかを書きましょう。 ところで、条件では「文字列を返す関数」となっているので、 char *sinnkeisann(int k) とすべきですね。 ただし、インデントだけはきっちりつけましょう。そのソースを 見る他人のためでもあり、3日後にソースを見直すかもしれない 自分のためでもあります。 |
|
元質問 >>1861 すな >>1870 で hsjさんに教えてもらった件ですがやはりそのようですね。 http://homepage1.nifty.com/yito/namazu/gbook/20010423.0840.html といった記事を見つけました。よって、 >>1864 でのレンタルホスト管理者からのメールで >クライアントがURL欄に「http://www.intel.com/http://www.intel.com/」 > と誤って記入すると、そのようなログが記録されます。 はやはり間違いですね。 参考までに…(参考にもならないかな?) # しかし最近不正な(と思われる)アクセス増えたなぁ… |
|
>>1915HELP 文法的には間違ってないし、アルゴリズムも基本的には正しいです。(だけどね(^_^)ニヤリ’ あとはintの符号有り、符号無しの違いに注意したほうがいいです。 |
|
プログラムを以下の様に直してみました。しかしコンパイルができません。 #include <stdio.h> char *sinnkeisann(int k); main () { char buff[32+1]; int k ,kotae; printf("整数値を入力して下さい>>>"); fgets(buff,sizeof(buff),stdin); sscanf(buff,"%d",&k); kotae = *sinnkeisann( k ); printf("2進数表記>>>%d",kotae); } char *sinnkeisann(int k) { int a,i,answer; char retu[32+1]; a=k; retu[32] = '\0'; for(i = 0; i < 32; i++){ if(i != 0 && a == 0){ break; } if(a %2 == 0){ retu[(32-1) - i] = '0'; } else{ retu[(32-1) - i] = '1'; } a = a / 2 ; } answer = &retu[0]+1 ; return answer ; } エラーメッセージ 2sinn.c: In function `sinnkeisann': 2sinn.c:46: warning: assignment makes integer from pointer without a cast 2sinn.c:48: warning: return makes pointer from integer without a cast |
|
>>1919HELP answerがint型なのにchar型を渡してるって事ですね。 答えの返し方は、関数を void function(int n,char* s) というように、返してほしい配列のポインタを引数にすればいいですよ。 |
|
>>1919 HELP コンパイルは成功していますよ。Warning がどれだけ起ころうが、 Error が出ない限り実行ファイルが生成されているはずです。 ところで、戻り値の返し方について >>1916 68user > char *sinnkeisann(int k) とすべき、と言いましたが、 >>1920 紅の猫 > void function(int n,char* s) の方がよいですね。 |
|
毎回適当にいじって、毎回忘れてしまう GD-1.33 & gd-1.8.4 & libpng-1.0.10 の インストールメモメモ。 libpng: % cp scripts/makefile.std Makefile % diff scripts/makefile.std Makefile < prefix=/usr/local --- > prefix=/home/68user/install/libpng % make && make install gd: % diff Makefile.org Makefile 15c15,16 < CFLAGS=-O -DHAVE_LIBPNG -DHAVE_LIBJPEG --- > CFLAGS=-O -DHAVE_LIBPNG 48c49 < INCLUDEDIRS=-I. -I/usr/include/freetype2 -I/usr/include/X11 -I/usr/X11R6/include/X11 -I/usr/local/include --- > INCLUDEDIRS=-I. -I/usr/include/freetype2 -I/usr/include/X11 -I/usr/X11R6/include/X11 -I/usr/local/include -I/home/68user/install/libpng/include 58c59 < LIBDIRS=-L. -L/usr/local/lib -L/usr/lib/X11 -L/usr/X11R6/lib --- > LIBDIRS=-L. -L/usr/local/lib -L/usr/lib/X11 -L/usr/X11R6/lib -L/home/68user/install/libpng/lib 61c62 < INSTALL_LIB=/usr/local/lib --- > INSTALL_LIB=/home/68user/install/libgd/lib 64c65 < INSTALL_INCLUDE=/usr/local/include --- > INSTALL_INCLUDE=/home/68user/install/libgd/include 67c68 < INSTALL_BIN=/usr/local/bin --- > INSTALL_BIN=/home/68user/install/libgd/bin % make && make install GD: % diff Makefile.PL.org Makefile.PL 6,7c6,7 < my @INC = qw(-I/usr/local/include -I/usr/local/include/gd); < my @LIBPATH = qw(-L/usr/lib/X11 -L/usr/X11R6/lib -L/usr/X11/lib -L/usr/local/lib ); --- > my @INC = qw(-I/usr/local/include -I/usr/local/include/gd -I/home/68user/install/libgd/include -I/home/68user/install/libpng/include); > my @LIBPATH = qw(-L/usr/lib/X11 -L/usr/X11R6/lib -L/usr/X11/lib -L/usr/local/lib -L/home/68user/install/libgd/lib -L/home/68user/install/libpng/lib); % perl Makefile.PL LIB=~/p5-module/ INSTALLMAN1DIR=~/p5-module/man1/ INSTALLMAN3DIR=~/p5-module/man3/ % make && make install 動作チェック: % perl -e 'use lib "/home/68user/p5-module"; use GD' |
|
新たにプログラムを作り直してみました。 コンパイルできますが、実行結果が全て0になってしまいます。 どこを直せばいいのか教えて下さい。 #include<stdio.h> void swap(int *bin) { char buff[32+1],answer[32+1]; int count; buff[32] = '\0'; for(count = 0; count < 32; count++) { if(count != 0 && *bin == 0) { break; } if (*bin % 2 == 0 ) { buff[(32-1)-count] = '0'; } else { buff[(32-1)-count] = '1'; } *bin = *bin / 2 ; } buff[32+1] = *bin; } int main() { int hoge,hairetu[32+1]; char buf[32+1]; printf("数を入力してください>>>"); fgets(buf,sizeof(buf),stdin); sscanf(buf,"%d",&hoge); swap(&hoge); printf("2進数>>>%d\n",hoge); } |
|
こういう形のやりとりはあまり効率的とは思えませんが、 納得できるまで付き合いますか。 >>1923 HELP swap に hoge のアドレスを渡し、swap の中で *bin を2で 割っていって、0になったらループを抜けているので、 最終的には必ず *bin == 0、つまり hoge も 0 になります。 buff の中に結果を入れているのに、最終的にどこにも 反映していないので、呼び出し側では結果を受けとれません。 で、2進数の結果を int で返してもらっても、大抵の場合 うれしくないので、void int2bin(int n,char* s) という 形にしましょう。 呼び出し側では char answer[256], buf[256]; int input_num; printf("数を入力してください>>>"); fgets(buf, sizeof(buf), stdin); sscanf(buf, "%d", &input_num); int2bin(input_num, answer); printf("2進数>>>%s\n", answer); として、変換側では void int2bin(int num, char *answer) と受け、num の値を 2進数に変換して answer に格納、 とするのがよいでしょう。 |
|
この問題はなんとか解決できました。 最後までつきあっていただいて本当にありがとうございました。 またよろしくおねがいします。 |
|
しゅいましぇん Perl で質問です〜 らくだの本を読んでいて、 *dick = *richard; という代入を行なうと $richard も @richard も %richard も &richard も エイリアシングされてしまうけど、 *dick = \$richard; だと $richard だけがエイリアシングされてしまう、というのがどうもよくわかりません。 あと、 *PI = \3.14159265358979; と書くと $PI は「定数スカラー」になっていじれなくなる、というのも、 これ、左辺はリテラルのリファレンスなんでしょうか?? |