私は数十年前にいくつかのCプログラミングをしました。私は言語を再学習しようとしています。私はこれを書きました。思いがけないことがある。「short int」を「int」に変更すると、うまくいくようです。誰でも私のコードを見て、何か問題があるかどうか、またはこれがコンパイラの問題かどうかを確認できますか? Linuxでgccを使用しています。
#include <stdio.h>
int main(void) {
short int age = 0;
short int num_1_yr_olds = 0;
short int num_2_and_3_yr_olds = 0;
short int num_above_3_yr_olds = 0;
while(1) {
printf ("Enter age: ");
scanf ("%d", &age);
if (age < 1) {
break;
}
switch (age) {
case 1:
++num_1_yr_olds;
break;
case 2:
case 3:
++num_2_and_3_yr_olds;
break;
default:
++num_above_3_yr_olds;
break;
}
}
printf ("Number of 1 year olds = %d\n", num_1_yr_olds);
printf ("Number of 2 and 3 year olds = %d\n", num_2_and_3_yr_olds);
printf ("Number above 3 year olds = %d\n", num_above_3_yr_olds);
}
入力
Enter age: 1
Enter age: 1
Enter age: 1
Enter age: -1
出力
Number of 1 year olds = -1
Number of 2 and 3 year olds = 0
Number above 3 year olds = 0
num_1_yr_olds 値が台無しになっています。私は 3 を期待していましたが、-1 を取得します。num_1_yr_olds の値は、入力に関係なく -1 になります。