通过函数c传递指针

时间:2015-06-13 01:28:02

标签: c function pointers

我正在尝试在函数中退出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): 

4 个答案:

答案 0 :(得分:3)

while(log == 1)它是==而非=

当您处于暂停状态时,您只需将log = 1分配给1。然后log从变量while中获取1,该变量隐式转换为log,这使得true无限循环。

答案 1 :(得分:3)

logOn函数的参数必须定义如下:

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

while条件的语法必须如下:

while(log == 1)

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

此外,当您将变量的地址传递给函数时,在函数体内需要一个*运算符,以便在该地址处对值进行推理。

e.g

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

希望这有帮助。

答案 2 :(得分:1)

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

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

while(log == 1)

下一步:

scanf("%s", &p);

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

scanf("%c", &p);

下一步:

if(p="y")

您再次滥用分配运算符。此外,您正在比较pchar"y"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关键字在那里毫无意义。

答案 3 :(得分:1)

您计划中的一些要点。

首先,while(log = 1),因为您正在检查日志是否等于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;

快乐的节目。