簡體   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