繁体   English   中英

通过函数c传递指针

[英]passing a pointer through a function c

我试图退出一个函数中的while循环,但我认为我没有正确编写指针,c对我来说是新的,在线阅读示例令人困惑。

对于我写错了的内容,我将不胜感激。

int logOn(int *log);

int main(void)
{
    int log;
    log = 1;
    while(log = 1)
    {
        int logOn(log);
    }

    while(log = 2)
    {
        int mainMenu();
    }

    printf("\ngood bye");
}

int logOn(*par)
{
    char p;

    printf("would you like to log on (y/n): ");
    scanf("%s", &p);

    if(p="y")
    {
        par = 2;
    }
    else if(p="n");
    {
        par = 3;
    }
    else
    {
        printf("\nError entering command\n")
    }
    return 0;
}

我已经更新了代码,并修复了许多人帮助我识别的错误。

现在由于某种原因,如果我没有按下“ y”或“ n”键,它将经历两次登录循环

这就是我当前的代码

包括

int logOn(int *log);
int mainMenu(int *log);

int main(void)
{
    int log;
    log = 1;
    while(log == 1)
    {
        (void) logOn(&log);
    }

    while(log == 2)
    {
        mainMenu(&log);
    }

    printf("\ngood bye");
}

int logOn(int *par)
{
    char p;

    printf("would you like to log on (y/n): ");
    scanf("%c", &p);

    if(p == 'y')
    {
        *par = 2;
    }
    else if(p == 'n')
    {
        *par = 3;
    }
    else
    {
        printf("\nError entering command\n");
    }
    return 1;
}

int mainMenu(int *par)
{
    printf("\nMain Menu\n");
    *par = 3;
    return 0;
}

这就是当我不打'y'或'n'时输出的东西

 would you like to log on (y/n): e

 Error entering command
 would you like to log on (y/n): 
 Error entering command
 would you like to log on (y/n): 

while(log == 1)== not =

在一段时间内写入log = 1它只是将1分配给log 然后while从变量log获取1 ,该变量被隐式转换为true ,这使得while无限循环。

logOn函数的参数必须定义为:

int logOn(int *par){//function body}

而且while条件的语法必须如下:

while(log == 1)

请注意双==符号。 这是必要的,因为单个=符号将导致无限循环。

此外,当您将变量的地址按原样传递给函数时,函数主体内在其前面需要*运算符,以便引用该地址处的值。

例如

int logOn(int *par)
{
    printf("%p", par); //address par 
    printf("%d",*par); //value stored at address par
}

希望这可以帮助。

while(log = 1)
while(log = 2)

错误。 在c中, =运算符用于赋值,而不是比较。 您正在此处设置日志等于1和2。 您需要==运算符进行比较:

while(log == 1)

下一个:

scanf("%s", &p);

错误。 %s用于以零('\\ 0')结尾的char数组。 这就是c表示字符串的方式。 对于单个字符,您想要

scanf("%c", &p);

下一个:

if(p="y")

您再次滥用赋值运算符。 另外,您正在将一个p ,一个char与一个"y" ,一个char * -char数组进行比较。 双引号用于字符串,单引号/撇号用于单个字符。 你在找

if(p == 'y')

下一个:

else if(p="n");

与上述相同的错误,加上分号- ; 不属于那里。 可以这样说,这将在下面的else语句上导致编译错误。 你要:

else if(p == 'n')

下一个:

par = 2;
par = 3;

您正在将整数分配给指针。 你可能是说

*par = 2;
*par = 3;

下一个:

int logOn(log);

应该

(void) logOn(&log);

下一个:

int mainMenu();

我不知道mainMenu是什么,但是int关键字在那里毫无意义。

程序中的一些要点。

首先, while(log = 1) ,因为您正在检查log是否等于1,所以语法应为while(log == 1) {}

其次,在调用logOn函数时,传递日志变量的地址( int logOn(&log) ;)

第三, int logOn(*par)函数的签名应为int logOn(int *par)

第四, "y""n"表示字符串文字,如果您只想使用单个字符,请使用“ y”或“ n”,即带单引号。

第五,要更改指针的值,请使用解引用运算符* 您在代码中的行应为

*par = 2;  (//Content of par equal to 2)

*par = 3;

编程愉快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM