c - 尝试使用指针使函数返回两个值,但出现错误:期望标识符
问题描述
它应该是根据用户选择的范围返回两个随机数的函数,我读到我可以使用指针从函数返回两个值,但我在expected an identifier
之前得到错误int* ran1
,int* ran2
当我运行代码时我得到错误和 expected ')' before 'int'
都是全局变量。即使我为指针使用不同的名称,我仍然会遇到相同的错误。ran1
ran2
int level(lev, ran1, ran2, int* ran1, int* ran2){
srand(time(0));
if(lev == 'l'){
ran1=(rand()%10+1);
ran2=(rand()%10+1);
}
if(lev == 'm'){
ran1=(rand()%50+11);
ran2=(rand()%50+11);
}
if(lev == 'h'){
ran1=(rand()%100+51);
ran2=(rand()%100+51);
}
}
解决方案
“我在 int* ran1 和 int* ran2 之前收到错误预期标识符”
C 编译器错误消息短语“期望一个标识符”出现在许多语法错误中,在各种编译器中(甚至对于其他语言)。在这种情况下,编译器正在喋喋不休地关注带有非类型变量的类型变量。这
int level(lev, ran1, ran2, int* ran1, int* ran2){
^^^ untyped ^^^ ^^^^ typed ^^^^^^^^^
虽然今天很少使用这种过时的语法,但当一些 C 编译器接受时,它是为了提供与旧版本 C 语言的向后兼容性。通过用括号括起来使编译器静音:
int level((lev), int* ran1, int* ran2){
(注意ran1
和ran2
,删除。即使在位置 2 和 3 中以某种方式合法,也会导致位置 4 和 5 中相同变量的多个定义)
顺便说一句,并非所有参数都是完成您的代码示例所必需的。下面显示的代码删除了那些不需要的代码。
注意,当传递一个int
要更新的指针时,它的值需要更新,在这种情况下是*ran1
or *ran2
,不是ran1
or ran2
。
(*
在此上下文中使用的符号取消引用指针,在此示例中,取消引用的指针是要更新的值。)
此外,正如评论中所指出的,srand()只需要在程序会话期间调用一次,并且应该被播种,以便如果程序的运行时间很短,并且可以快速连续调用,将有一个每次调用的唯一种子值。
下面说明了代码中的这些更正:
int level(int lev, int *ran1, int *ran2){//removed unused parameters
//srand(clock());//moved to main, so just called once
if(lev == 'l'){
*ran1=(rand()%10+1);//Updating value *ran1 not pointer ran1 (apply to all)
*ran2=(rand()%10+1);
}
if(lev == 'm'){
*ran1=(rand()%50+11);
*ran2=(rand()%50+11);
}
if(lev == 'h'){
*ran1=(rand()%100+51);
*ran2=(rand()%100+51);
}
return 0;//prototype requires a return statement
//alternatively, the prototype can be made void
//as 'level(...)' returns its work via its parameters.
}
int main(void)
{
//calling this only once per execution,
srand(GetTickCount());//number of milliseconds elapsed since system started,
int lev = 1, ran1, ran2;
level(lev, &ran1, &ran2);
return 0;//int main(void) requires a return statement
}
推荐阅读
- sql - SQL Server 中 datetime 属性中每个特定小时的增量组数
- javascript - 访问另一个对象内的对象返回无法读取未定义的属性
- c - 为什么我不能用 pow 函数重现浮点问题?
- python - Python 三元组数字
- javascript - 如何提取谷歌图表的行条目宽度
- json - 如何自定义json到xml的转换?
- c# - 如何在 C# 中遍历包含其他对象类型的对象
- asp.net-core - 有没有办法确保可以将 HTTP 请求正文加载到内存中以进行可能的多个读取请求?
- javascript - 反应错误 - 无法读取未定义的属性“setState”
- makefile - Makefile:并行运行特定目标