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

回答編集履歴

2

表示のずれについて回答を追加

2021/01/23 08:10

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -44,4 +44,20 @@
44
44
  {
45
45
  for (int y; printf("year> "), scanf("%d", &y) == 1; cal(y)) ;
46
46
  }
47
+ ```
48
+ **追記**
49
+ 質問が最初と変わっていますね。
50
+ 新たな質問の場合、元の質問を残したうえで、追記しましょう。
51
+
52
+ printf("%-24s" の 24 はバイト数です。
53
+ 文字コードが Shift-JIS の場合は、漢字は 2バイトで表示幅も2桁ですが、
54
+ 文字コードが UTF-8 の場合は、漢字は 3バイトなのでずれます。
55
+ 次のようにすればよいでしょう。
56
+
57
+ ```diff
58
+ - sprintf(s[0], " %4d年%2d月", y, m);
59
+ + sprintf(s[0], " %4d年%2d月 ", y, m);
60
+
61
+ - printf("%-24s",calender[row*COL+col][i]);
62
+ + printf("%s ",calender[row*COL+col][i]);
47
63
  ```

1

リファクタリング

2021/01/23 08:10

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -33,9 +33,9 @@
33
33
 
34
34
  void cal(int y)
35
35
  {
36
- for (int m = 1, i = 0; i < ROW; i++, m += COL) {
36
+ for (int m = 1; m < 12; m += COL) {
37
37
  int a[COL][6][7] = { 0 };
38
- for (int j = 0; j < COL; j++) set(a[j], y, m + j);
38
+ for (int i = 0; i < COL; i++) set(a[i], y, m + i);
39
39
  print(a, y, m);
40
40
  }
41
41
  }