- 1 名前:デフォルトの名無しさん mailto:sage [03/11/09 15:37]
- いろんなスレが乱立していますが、統合的なスレッドがないので立てました。
質問もOK 関連スレ C#って死滅する理由がないよね! Part4 pc2.2ch.net/test/read.cgi/tech/1042464104/ C#最強伝説 pc2.2ch.net/test/read.cgi/tech/1061208152/ C#とJava、どっちをおぼえればいいの? pc2.2ch.net/test/read.cgi/tech/1006715468/ C#Builder Professional 質問箱 pc2.2ch.net/test/read.cgi/tech/1062433418/ 関連リンク dir.yahoo.co.jp/Computers_and_Internet/Software/Programming_Tools/Programming_Languages/C_Sharp/
- 301 名前:デフォルトの名無しさん mailto:sage [05/02/09 17:06:20 ]
- 改行コードもsacanfだな
- 302 名前:デフォルトの名無しさん [05/02/09 17:37:54 ]
- void main(void)
{ int i; char a[5]; // ←範囲は、0〜4までで 5個 char b[1024]; for(i = 0; i < 5; i++){ printf("何か1文字入力する\n"); scanf("%s",&b); // バッファーフォローの危険性があり、実務だと駄目! a[i] = b[0]; } printf("%c,%c,%c,%c,%c\n",a[0],a[1],a[2],a[3],a[4]); } こんな感じだけど、入力は別関数を作ってね!
- 303 名前:デフォルトの名無しさん mailto:age [05/02/09 17:48:30 ]
- ださ
- 304 名前:デフォルトの名無しさん mailto:sage [05/02/09 18:10:25 ]
- >>302
突っ込みどころ満載だな。 ・バッファオーバフローの心配するなら指定子で制限しろ。 ・配列のアドレスを渡すな。 ・バッファーフォローなんて俺語を作るな。 ・main()の戻り値を勝手にvoidにするな。
- 305 名前:デフォルトの名無しさん mailto:sage [05/02/09 18:43:32 ]
- >>300
最後のprintfところでa[1]~a[5]になってるとこをa[0]~a[4]になおして、 それから一回目の入力で入れたい数字を全部連続でいれてみ?2468って感じで 最後の出力だけはきれいにでるとおもうよw
- 306 名前:デフォルトの名無しさん [05/02/09 21:05:07 ]
- >>304
で、模範解答は? 文字列の読み込みって、簡単なようで難しいんだよね。 scanf を使って・・・・
- 307 名前:300 mailto:sage [05/02/09 21:22:25 ]
- 300です。
皆さんレスありがとうございます。 あれからも考えてみましたが、やっぱりわかりませんでした。 aの配列というのが不味いのかと思って、a,b,c,d,eと定義してみましたが、これもまた同じ結果になってしまいます。 もうあきらめた方がいいんでしょうか。 バグの原因がわからないと、また再発させそうで非常に気になるんですが…
- 308 名前:デフォルトの名無しさん mailto:sage [05/02/09 22:31:28 ]
- scanf使うのが悪い
fgetsしてsscanf使え
- 309 名前:デフォルトの名無しさん mailto:sage [05/02/09 22:35:34 ]
- >>300
まず1文字目を入力した後、Enterを打つだろ。 そのEnterもscanfの%cで入力されているのだろう。 と、俺は予想した。 #include <stdio.h> int main(void) { int i; char a[5]; for (i = 0; i < sizeof a; i++) scanf("%c%*[^\n]%*c", &a[i]); //%*[^\n]は'\n'が出るまで読み飛ばす指定 //%*cは1文字読み飛ばし('\n'まで読み飛ばしたので当然'\n'を読み飛ばす事になる) printf("%c, %c, %c, %c, %c\n", a[0], a[1], a[2], a[3], a[4]); return 0; }
- 310 名前:デフォルトの名無しさん mailto:sage [05/02/09 22:41:35 ]
- >>300
301さんが解答ですよ。 scanf("%c",&a[i]); で一文字読み込んだとき、まだ標準入力のバッファには改行文字が残っているのです。 それが自動的に偶数回のscanf(...)の入力となっています。 scanf("%c",&a[i]); fflush(stdin); として標準入力のバッファをクリアしてあげれば、一文字ずつ入力できます。
|

|