输入一个10以后,按回车没有反应,系统也没有报错,照着书抄的,书上是把我的x换成num,但我换了num也是这样,哪位能告诉一下我为啥,该怎么改,谢谢 。
scanf_s 里的换行符 '\n' 去掉,
有换行符,输入需要等到其他非空字符才会结束。
scanf_s中的\n删掉!
否则你要连续输入两次回车键才能完成输入
把第54行的换行符去掉试试
ok,谢谢
1.传址
int AddNumAddress(int *p)
{
return ++(*p);
}
int main()
{
int num = 1;
int arr1=AddNumAddress(&num);
int arr2 = AddNumAddress(&num);
printf("%d %d\n", arr1, arr2);
system("pause");
return 0;
}
2.全局变量
int num = 1;
int AddNum()
{
return ++num;
}
int main()
{
int arr1=AddNum();
int arr2 = AddNum();
printf("%d %d\n", arr1, arr2);
system("pause");
return 0;
}
3.static修饰变量
int AddNum()
{
static int num = 1;
return ++num;
}
int main()
{
int arr1=AddNum();
int arr2 = AddNum();
printf("%d %d\n", arr1, arr2);
system("pause");
return 0;
}
两种错误写法:
错误写法一:
int AddNum(int num)
{
return ++num;
}
int main()
{
static int num = 1;
int arr1=AddNum(num);
int arr2 = AddNum(num);
printf("%d %d\n", arr1, arr2);
system("pause");
return 0;
}
错误原因:
函数调用,形参会实例化,形参是实参的一份临时拷贝,函数中的num和主函数中的num此时不是一个变量,所以对函数操作的形参num,每调用一次,主函数的num并不会递增。
错误写法二:
int num = 1;
int AddNum(int num)
{
return ++num;
}
int main()
{
int arr1=AddNum(num);
int arr2 = AddNum(num);
printf("%d %d\n", arr1, arr2);
system("pause");
return 0;
}
错误原因,
创建并初始化num为全局变量,在主函数中作为实参传给函数,此时函数调用会发生形参实例化,形参对实参拷贝,此时函数里面的num和全局变量num并没有直接关系,函数中对num++,并不会影响全局num的值,所以导致每调用一次1,num并不会递增。
以上两个问题是我遇到的问题,不知道大家有和我一样的嘛,写出来供大家参考,欢迎提问。