NOEMBLEM/エンブレムが設定されていません。

メールの詳細(トピック表示)

文字の置き換え

投稿者:masaruさん  2004/02/06 11:39  MLNo.417   [メール表示]

こんにちは。masaru と言います。

文字の置き換えについて質問させてください。
入力された文字をある値の数だけ後方にずらして出力するプログラムなのです
が,どうしてもエラーが出てしまいます。scanf("%s") を用いれば上手く行くの
ですが,getchar() だとできなくなってしまうのです。なにかプログラム上で記
述できていないところがあるのでしょうか。

main()
{
char buff[100],alphabet[] = "abcdefghijklmnopqrstuvwxyz";
int n,i=0,j,c;

scanf("%d",&n);

while((c=getchar())!='\0'){
j=0;
while(c != alphabet[j])j++;
c=alphabet[(j+n)%26];
i++;
putchar(c);
}

masaru


このエントリーをはてなブックマークに追加


  • MLNo.418   FUJIHARA Keiichiさん  (0) 2004/02/06 11:53  [メール表示する]
    藤原と申します。

    This message is reply to masaru - san
    (Subject was : [beginers:0417] 文字の置き換え)

    Message-ID: <2641112.1076035185838@…>
    in Fri, 6 Feb 2004 11:39:45 +0900 (JST) ...

    > 文字の置き換えについて質問させてください。
    > 入力された文字をある値の数だけ後方にずらして出力するプログラムなのです
    > が,どうしてもエラーが出てしまいます。

    「エラーが出ます」という質問をするときには、

    ・どのタイミングで(コンパイル時・リンク時・実行時)
    ・何をしたら
    ・どういうエラーが出る
    ・特に、そのときのエラーメッセージは自分で解釈せずにそのまま明示する

    というのが鉄則です。

    とりえあす、getchar() の終端の判定は、 '\0' ではなくて、 EOF ですね。

    --
    _/ -- Last 4551 hours until ATHENS 2004 Olympic Games -------------
    _/ FUJIHARA Keiichi
    _/ E-Mail : nagi@…
    _/ URL : http://www.asahi-net.ot.jp/~ig5k-fjhr/
    ------------------------------------------+----- Luna Phase 14.55 --
    PGP FingerPrint = 7CC3 4F95 8CC7 87D3 7178 C348 CD65 7F08 D68F 69F6



  • MLNo.419   masaruさん  (0) 2004/02/06 12:09  [メール表示する]
    > 藤原と申します。
    >
    > This message is reply to masaru - san
    > (Subject was : [beginers:0417] 文字の置き換え)
    >
    > Message-ID: <2641112.1076035185838@…>
    > in Fri, 6 Feb 2004 11:39:45 +0900 (JST) ...
    >
    > > 文字の置き換えについて質問させてください。
    > > 入力された文字をある値の数だけ後方にずらして出力するプログラムなのです
    > > が,どうしてもエラーが出てしまいます。
    >
    > 「エラーが出ます」という質問をするときには、
    >
    > ・どのタイミングで(コンパイル時・リンク時・実行時)
    > ・何をしたら
    > ・どういうエラーが出る
    > ・特に、そのときのエラーメッセージは自分で解釈せずにそのまま明示する
    >
    > というのが鉄則です。
    >
    > とりえあす、getchar() の終端の判定は、 '\0' ではなくて、 EOF ですね。
    >
    藤原様。ご指導ありがとうございます。

    エラーは実行時に出てしまいます。表示は Segmentation fault と表示されま
    す。まず値を入力してから文字を入力し、置き換えを行いたいのです。


  • MLNo.420   FUJIHARA Keiichiさん  (0) 2004/02/06 13:10  [メール表示する]
    藤原です。

    This message is reply to masaru - san
    (Subject was : [beginers:0419] Re: 文字の置き換え)

    Message-ID: <7196513.1076036983316@…>
    in Fri, 6 Feb 2004 12:09:43 +0900 (JST) ...

    >
    > エラーは実行時に出てしまいます。表示は Segmentation fault と表示されま
    > す。まず値を入力してから文字を入力し、置き換えを行いたいのです。
    >

    getchar() の挙動ですが、getchar は、制御コードも入力として受け付け
    ます。このため、文字を入力した後の「リターンキー」の入力を受け付け
    ているはずです。

    この、リターンコード(当然、アルファベットではない)を持って、
    alphabet の中を探しますが、一致するものがないので、

    > while(c != alphabet[j])j++;

    で、配列の要素を超えてアクセスに行きます。
    このために、Segmentation faul が出ているのでしょう、おそらく。
    あと、scanf だと、制御コードを無視した文字列を返すので、大丈夫だと
    いうところでしょう。
    いずにしても、この形で文字を探索するのであれば、入力文字が想定外の
    時の動作も考えておく必要があります。


    --
    _/ -- Last 4550 hours until ATHENS 2004 Olympic Games -------------
    _/ FUJIHARA Keiichi
    _/ E-Mail : nagi@…
    _/ URL : http://www.asahi-net.ot.jp/~ig5k-fjhr/
    ------------------------------------------+----- Luna Phase 14.59 --
    PGP FingerPrint = 7CC3 4F95 8CC7 87D3 7178 C348 CD65 7F08 D68F 69F6



  • MLNo.421   masaruさん  (0) 2004/02/06 13:47  [メール表示する]
    > 藤原です。
    >
    > This message is reply to masaru - san
    > (Subject was : [beginers:0419] Re: 文字の置き換え)
    >
    > Message-ID: <7196513.1076036983316@…>
    > in Fri, 6 Feb 2004 12:09:43 +0900 (JST) ...
    >
    > >
    > > エラーは実行時に出てしまいます。表示は Segmentation fault と表示されま
    > > す。まず値を入力してから文字を入力し、置き換えを行いたいのです。
    > >
    >
    > getchar() の挙動ですが、getchar は、制御コードも入力として受け付け
    > ます。このため、文字を入力した後の「リターンキー」の入力を受け付け
    > ているはずです。
    >
    > この、リターンコード(当然、アルファベットではない)を持って、
    > alphabet の中を探しますが、一致するものがないので、
    >
    > > while(c != alphabet[j])j++;
    >
    > で、配列の要素を超えてアクセスに行きます。
    > このために、Segmentation faul が出ているのでしょう、おそらく。
    > あと、scanf だと、制御コードを無視した文字列を返すので、大丈夫だと
    > いうところでしょう。
    > いずにしても、この形で文字を探索するのであれば、入力文字が想定外の
    > 時の動作も考えておく必要があります。
    >
    >
    > --

    藤原様。ありがとうございます。

    教えていただいたことを念頭にいれて再度プログラムを組み立ててみます。

    masaru


メールへの返信はMLのメンバーしかできません。

更新順メールリスト