teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2021/08/16 03:24

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -23,4 +23,36 @@
23
23
 
24
24
  return 0;
25
25
  }
26
+ ```
27
+ **追記**
28
+ sprintf にこだわらなければ簡単です。
29
+
30
+ 1文字ずつ出力すると、
31
+ ```C
32
+ #include <stdio.h> // putchar
33
+
34
+ void draw(int x, int y)
35
+ {
36
+ for (int i = 0; i < x; i++) {
37
+ for (int j = 0; j < y; j++) putchar('*');
38
+ putchar('\n');
39
+ }
40
+ }
41
+
42
+ int main(void) { draw(3, 10); }
43
+ ```
44
+ 行単位で出力すると、
45
+ ```C
46
+ #include <stdio.h> // puts
47
+ #include <string.h> // memset
48
+
49
+ void draw(int x, int y)
50
+ {
51
+ char text[256]; // 可変長配列が使えるバージョンの C なら、char text[y+1];
52
+ memset(text, '*', y); // for (int i = 0; i < y; i++) text[i] = '*';
53
+ text[y] = '\0';
54
+ while (--x >= 0) puts(text); // printf("%s\n", text)
55
+ }
56
+
57
+ int main(void) { draw(3, 10); }
26
58
  ```

1

書式の改善

2021/08/16 03:24

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -13,13 +13,13 @@
13
13
  char *str2 = "\n";
14
14
 
15
15
  for (x = 0; x < 1; x++) {
16
- for ( y = 0; y < 10; y++) {
16
+ for (y = 0; y < 10; y++) {
17
17
  sprintf(text1 + y, "%c", str1); // ★ '*' を入れる場所を変更
18
18
  }
19
19
  sprintf(text2, "%s", str2);
20
- sprintf(text3, "%s%s", text1, text2); // ★ text1 は文字列だから "%s"
20
+ sprintf(text3, "%s%s", text1, text2); // ★ text1 は文字列だから "%s"
21
21
  printf(text3);
22
- } // ★ for の範囲を変更。x < 3 にすると 3x10 の '*' になる
22
+ } // ★ for の範囲を変更。x < 3 にすると 3x10 の '*' になる
23
23
 
24
24
  return 0;
25
25
  }