関数内で、int a[3][3] = {}; と int a[3][3] = {0}; で配列を宣言したときの違いはご存じでしょうか。
どちらも配列aのすべての要素は0で初期化されますが、処理が異なります。
前者はすべての要素を0で初期化しますが、後者は最初の要素を0で初期化したあと残りの要素を0で初期化します。
この違いは、int a[3][3] = {6, 7}; と宣言してみるとよくわかると思います。
関数内で、int a[3][3] = {}; と int a[3][3] = {0}; で配列を宣言したときの違いはご存じでしょうか。
どちらも配列aのすべての要素は0で初期化されますが、処理が異なります。
前者はすべての要素を0で初期化しますが、後者は最初の要素を0で初期化したあと残りの要素を0で初期化します。
この違いは、int a[3][3] = {6, 7}; と宣言してみるとよくわかると思います。
WindowsとUbuntuを何も考えずにデュアルブートにすると、Ubuntuを起動した後にWindowsを起動したときに、Windowsの時刻のみ正しく表示されなくなります。
この状態で、WSLgのUbuntuでaptコマンドを使って更新を確認すると次のようなエラーが表示されることがあると思います。
$ sudo apt update
ヒット:1 https://packages.microsoft.com/ubuntu/20.04/prod focal InRelease
ヒット:2 http://archive.ubuntu.com/ubuntu focal InRelease
取得:3 http://security.ubuntu.com/ubuntu focal-security InRelease [128 kB]
ヒット:4 https://repo.radeon.com/amdgpu/5.6/ubuntu focal InRelease
ヒット:5 https://repo.radeon.com/rocm/apt/5.6 focal InRelease
取得:6 http://archive.ubuntu.com/ubuntu focal-updates InRelease [128 kB]
取得:7 http://archive.ubuntu.com/ubuntu focal-backports InRelease [128 kB]
パッケージリストを読み込んでいます... 完了
E: Release file for http://security.ubuntu.com/ubuntu/dists/focal-security/InRelease is not valid yet (invalid for another 5時間 3分 37秒). Updates for this repository will not be applied.
E: Release file for http://archive.ubuntu.com/ubuntu/dists/focal-updates/InRelease is not valid yet (invalid for another 7時間 48分 28秒). Updates for this repository will not be applied.
E: Release file for http://archive.ubuntu.com/ubuntu/dists/focal-backports/InRelease is not valid yet (invalid for another 5時間 10分 41秒). Updates for this repository will not be applied.
これを解決するには、Windowsの時刻を修正する必要があります。
でも、Ubuntuを起動するたびにWindowsの時刻を修正するのは嫌ですよね。そんな時は、Ubuntuで一度だけ(でいいので)次のコマンドを実行します。
$ sudo timedatectl set-local-rtc true
これで、WindowsとUbuntuのデュアルブートが快適になります。
いまだに20.04 LTSを使ってる私。早く24.04 LTSにしませんと。
※RTCをローカルタイムゾーンにすると、タイムゾーン変更や夏時間調整で問題が起きちゃいます。その時は、次のコマンドを実行してみてください。
$ sudo timedatectl set-local-rtc false
C言語では、ループ内の処理等が1つの文で済む場合には {} を省略することができますし、特にforループの場合、文がない場合(for文だけで完結する場合)には ; だけにできます。
do whileでも同じなのですが…
do
points += 1 + ++days / 7;
while (points < target);
違和感がありますね。
{} はifやforでよく使いますが、必ず使わなければいけないものではありません。文が1つ以下の場合には省略できます。{} はブロックといい、複数の文を一つにまとめるときに使います。詳細はここでは省略しますね。