質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

701閲覧

回転する用に記号を描写して四角形を作りたい

nekoro22

総合スコア11

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/07/03 15:57

前提・実現したいこと

c言語を勉強し始めたばかりの初心者です。
記号を内向きに渦を巻くように出力して大きな四角形を描写したいのですが、自力で作ったコードではどうしてもうまくいきません。
考えれば考えるほど複雑になってしまいます。どのように修正すればいいでしょうか?

該当のソースコード

c

1int i = 5; 2int j = 2; 3int b = 15; 4int c = 12; 5int d = 5; 6int e = 2; 7int hen = 4; 8 9 10int main(void) 11{ 12 system("cls"); 13 14 while(i != 8 && j != 11){ 15 16 if(j < c+1 && hen %4== 0){ 17 Sleep(100); 18 while(j <= c){ 19 locate(i,j); 20 printf("■"); 21 j++; 22 } 23 24 hen++; 25 c--; 26 27 }else if(i < b+1 && hen %4== 1){ 28 Sleep(100); 29 while(i <= b){ 30 locate(i,j); 31 printf("■"); 32 i++; 33 } 34 35 hen++; 36 b--; 37 38 }else if(j > e-1 && hen %4== 2){ 39 Sleep(100); 40 while(j >= e){ 41 locate(i,j); 42 printf("■"); 43 j--; 44 } 45 46 hen++; 47 e++; 48 49 }else if(i > d-1 && d > b && hen %4== 3){ 50 Sleep(100); 51 while(i >= d){ 52 locate(i,j); 53 printf("■"); 54 i--; 55 } 56 57 hen++; 58 d++; 59 } 60 } 61 return 0; 62}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Windows のコンソールアプリですよね。
これ、参考になりますか?

C

1#include <stdio.h> // printf 2#include <windows.h> // SetConsoleCursorPosition, GetStdHandle, Sleep 3 4void locate(int x, int y) 5{ 6 COORD coord = { x, y }; 7 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); 8} 9 10int main(void) 11{ 12 system("cls"); 13 int top = 2, bottom = 13, left = 5, right = 26; 14 int x = left, y = top; 15 for (; y < bottom; y++) { 16 locate(x, y); printf("■"); Sleep(100); 17 } 18 for (; x < right; x += 2) { 19 locate(x, y); printf("■"); Sleep(100); 20 } 21 for (; y > top; y--) { 22 locate(x, y); printf("■"); Sleep(100); 23 } 24 for (; x > left; x -= 2) { 25 locate(x, y); printf("■"); Sleep(100); 26 } 27 locate(0, bottom + 1); 28}

"■" は全角文字なので、x は 2ずつ増えたり減ったりします。

追記

渦巻状に四角形の中を埋めていくのかな?

C

1#include <stdio.h> // printf 2#include <windows.h> // SetConsoleCursorPosition, GetStdHandle, Sleep 3 4void locate(int x, int y) 5{ 6 COORD coord = { x, y }; 7 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); 8} 9 10void plot(int x, int y) 11{ 12 locate(x, y); printf("■"); Sleep(100); 13} 14 15int main(void) 16{ 17 system("cls"); 18 int top = 2, bottom = 13, left = 5, right = 26; 19 for (; top < bottom; top++, bottom--, left += 2, right -= 2) { 20 int x = left, y = top; 21 for (; y < bottom; y++) plot(x, y); 22 for (; x < right; x += 2) plot(x, y); 23 for (; y > top; y--) plot(x, y); 24 for (; x > left; x -= 2) plot(x, y); 25 } 26 locate(0, 15); 27}

投稿2019/07/03 17:15

編集2019/07/03 17:36
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekoro22

2019/07/04 08:56

助かりました! 渦巻き状に埋めていくのがまさにイメージどおりでした!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問