プロが教える店舗&オフィスのセキュリティ対策術

要素数335の文字配列の各要素に,要素番号の下一桁の数字を代入する.
ただし,要素番号が3の倍数,もしくは,いずれかの桁に3を含む場合には3を代入する.
また,作成した文字配列の各要素を,改行キーを押すごとに1文字ずつ画面表示する.

という問題についてです.
要素番号をnとして以下のようにプログラムを書いてみたのですが,実行してみると
0: 0
というものが無限に表示されてしまいました.
しかし,どこを直せばよいかがわからないので,教えていただけたら幸いです.
また,改行キーを押すごとに一文字ずつ画面表示されるようにするにはどうすればよいかもわからないので,教えていただきたいです.

よろしくお願いします.

以下に私が書いたプログラムを貼らせていただきます.
viエディタを利用しています.


#include <stdio.h>
int main(void)
{
int n;

for(n = 0; n <=335; n++){

if(n % 3 == 0)
printf(“%d: 3\n”, n);

else if(n % 10 == 3)
printf(“%d: 3\n”, n);

else if(n = n / 10, n % 10 == 3)
printf(“%d: 3\n”, n);

else if(n = n / 100, n % 10 == 3)
printf(“%d: 3\n”, n);

else
printf(“%d: %d\n”, n, n % 10);

}
return 0;
}

A 回答 (4件)

> エンターを押すと次の式が出るようになる部分は,


> 2つ目のforの中の getchar(); のところでいいのでしょうか

はい、その通りです。
昔のゲームのStartrekとかのC言語版とかでお馴染みのテクニックですね・・・あんまりスマートにも思えませんが。

スタートレック (マイコンゲーム):
https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%BF …

マイコンソフト PC-8001 「スタートレック」:
    • good
    • 0
この回答へのお礼

助かりました

なるほど...!
丁寧に回答していただいてありがとうございます.
本当に助かりました...!

お礼日時:2020/07/27 17:37

こんなトコかなぁ。



/* ここから */

#include <stdio.h>

int main(void){
 char str[335];
 int i;

 for (i = 0; i < 335; i++) {
  if ((i % 3 == 0) || (i % 10 == 3) || (i / 10 == 3) || (i / 100 == 3)) {
   str[i] = '3';
  } else {
   str[i] = (i % 10) + '0';
  }
 }

 for(i = 0; i < 335; i++) {
  getchar();
  printf("%c ", str[i]);
 }
 printf("\n");

 return 0;
}

/* ここまで */

ただ、最近の、utf-8で文字列フツーに扱えるコンパイラだと、このコードだと上手くいかないんですよね。
あくまで、「かなりやっつけ」な解です。
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございます!
配列をどのように用いればいいのかも悩んでいたのですっきりしました.
一つ質問なのですが,エンターを押すと次の式が出るようになる部分は,
2つ目のforの中の getchar(); のところでいいのでしょうか...
回答いただけたら嬉しいです.

お礼日時:2020/07/27 17:21

配列じゃないから0点

    • good
    • 0
この回答へのお礼

そこは私もどうしようかと悩んでおりました...

お礼日時:2020/07/27 17:21

else if(n = n / 10, n % 10 == 3)


printf(“%d: 3\n”, n);

else if(n = n / 100, n % 10 == 3)
printf(“%d: 3\n”, n);

ここでループの変数nを上書きしてしまってるからfor loopが無限ループになるんじゃないですか。
    • good
    • 0
この回答へのお礼

ありがとう

ありがとうございます!
なるほど,そこが原因だったんですね...
解決策を探ってみようと思います!

お礼日時:2020/07/27 17:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!