这篇文章用于记录我初学c以来遇到的一些问题,及我后续的解决方法,并会持续更新(会带有我个人的思考过程,可能较为冗长
下面是一个可能不太常见的问题,请看下面一串代码
int main()//打印1000到2000年的闰年数量
{
int year = 0;
int sum = 0;
for (year = 1000; year <= 2000; year++)
{
if (year % 4 == 0 && year % 100 != 0)//闰年年份能被4整除,但不能被100整除
{
sum = sum + 1;
}
else if (year % 400 == 0)//闰年另一个定义是“能被400整除”
{
sum = sum + 1;
}
printf("%d", sum);
return 0;
}
}
一眼看过去目的是为了打印1000-2000年的闰年数量,看起来代码也似乎没打错,但输出的结果
为什么会是0呢,一开始我以为是return 0的问题,因为学到现在只知道return有着返回值的作用,于是把0改为了sum以返回sum的值,但经过更改后输出的值仍然是0,很明显,并非是return的问题,仔细一看我想了一下会不会是for后大括号的遗漏,看了一眼,并没有,最后我们发现return 0放在的for的大括号中。所以此处代码的错误在于在结束时请勿把return错放在其他的大括号中。
第二个和第三个的问题就放在一起讲了,第二个就是使用scanf函数时,如scanf("%d",a) ,在此处经常会容易将取地址符号&给遗忘,导致出现“返回值被忽略”的报错。第三个问题就是符号的问题,初学c语言者会受数学思维的影响,在需要用到相等条件时只用一个=号,然后发生“左值被忽略”的报错,所以在后续学习c语言的过程里,要改正这个想法。=号为赋值符号,==号为判断相等的符号。
下面有一些代码,我们的目的是“编写一个程序,从用户输入中读取10个整数并存储在一个数组中。然后,计算并输出这些整数的平均值。”
int main()//【一维数组】输入10个整数,求平均值
{
int arr1[] = { 0 };
int i = 0;
int mid = 0;
for (i = 0; i <= 9; i++)
{
scanf("%d",&arr1[i]);
mid += arr1[i];
}
int sz = sizeof(arr1) / sizeof(arr1[0]);
printf("平均值是%d", mid / sz);
return 0;
}
这个是一个关于初始化数组的问题,如果我们运行,并输入十个数字时,会发生一下报错(debug)。
对比答案的代码我发现在int arr1[]时没有规定数组的长度,所以当求mid的值时没有一个确定的数组长度,因此在后续需要数组时,需要定义一个数组的长度。