一、取地址符的错用
include <stdio.h>
int main()
{
int i;
scanf("%d",&i);
printf("%d",i);
}
如果将输出语句改为printf("%d",&i);编译并不会报错,但得不到想要的结果
二、scanf录入
1.scanf("%d%d%d",&a,&b,&c);
2.scanf("%d,%d,%d",&a,&b,&c);
注意第二种用键盘输入时元素间用空格键而不是逗号隔开
scanf("%d\n",&a);//此处多加了一个\n
函数scanf()格式控制字符串中含有’\n’等转义字符,会导致数据输入不能按照正常方式终止。此情况编译不会报错,但运行时会出错,大多是粗心导致,注意则好.
三、函数
(一)随机函数
#include<stdio.h>
#include<stdlib.h>
int main()
{ int i=0;
for(;i<10;i++)
printf("%d",rand()%100);}
该函数虽是随机函数,但多次运行后会发现每次输出的元素都一样,但可加入随机种子,比如以时间作为种子,因为时间不停地在变化,所以随机数也会随时间的变化而变化。
只需循环前添加srand((int)time(0)) 或者 srand((unsigned)time(NULL))即可
(二)函数的返回值
#include<stdio.h>
int fun(int x, int y); // 函数声明
void main()
{
int a=1, b=2, c;
c = fun(a, b); // 函数的调用,调用自定义函数fun,其中a,b为实际参数,传递给被调用函数的输入值
printf("a,b中的较大值为%d\n",c);
}
// 自定义函数fun
int fun(int x, int y) // 函数首部
{ // {}中的语言为函数体
return x>y ? x : y; // 返回x和y中较大的一个数,这就是函数的返回值
}
注意:设置的函数为int型,则其返回值也一定是int型;
void函数无返回值。
四、数组
(一)
二维数组初始化时,可以省略行数,不可以省略列数,即定义二维数组时可以对第一维的长度不指定,但第二维的长度不能省去。
设有数组int am,如果要访问ai的值,编译器的寻址方式为:
&ai=&a0+isizeof(int)n+j*sizeof(int); //注意n为第二维的维数
因此,可以省略第一维的维数,不能省略其他维的维数。
(二)
int nums[2][2] = {{1,2},
{1,2}};
[ ]里面的个数必须是一个固定值,可以是常量(比如6、8)、常量表达式(比如3+4、5*7)。绝对不能使用变量或者变量表达式来表示元素个数,大多数情况下不要省略元素个数(当数组作为函数的形参和数组初始化时除外)
五、如何防止单独打开EXE文件时的闪退情况
#include <stdlib.h> //需要添加一个头文件
......
system("pause"); //整个程序结尾处冻结屏幕,用户按任意键结束。
也可以在结尾处添加 getchar();
但并不适用于所有程序。
六、敲代码时中英文的转换问题
emmm,,,其实这不算什么问题,但就是有很多人编译报错之后找不到这个错误,其实编译后报错下方会有提示,提示也很具体,真的很具体,根据提示找错误,自己就可以解决这个问题。再者敲代码时细心一些,多注意中英文的转换,可有效避免此类问题的发生。