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


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

C統合・質問スレッド



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);

として標準入力のバッファをクリアしてあげれば、一文字ずつ入力できます。







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

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

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