promotion image of download ymail app
Promoted

c語言 使用flag交替列印

有2個functions Hello() World()

呼叫Hello()就印出 Hello 呼叫World() 就印出World

Hello 和 World 必須交替列印 ie 呼叫完World 下一次必須呼叫 Hello (必須用"flag"做註記 印完了那個就 flag是1, 另一個就是0) ---------------->想不到要怎麼用flag交替

我沒有接觸過flag 不知道該怎麼下手

我只做出兩個functions

有誰可以給我 idea ???

void Hello()

{

printf("Hello");

}

void World()

{

printf("World");

}

int main()

{

Hello();

World();

}

已更新項目:

謝謝 prison 那麼快的做出來了

我剛剛有試跑過有點小問題

5 void (*f[])()={::Hello, ::World};

6 bool ind;

7 for(ind=false;;ind=!ind)(*f[ind])();

8 return 0;

2 個已更新項目:

訊息跑出來

5: erroe: syntax error before ':' token

6: erroe: 'bool' undeclared (first use in this function)

6: erroe: (each undeclared identifier is reported only once for each function it appears in)

3 個已更新項目:

6: erroe: syntax error before "ind"

7: erroe: 'ind' undeclared

7: error: 'flase' undeclared

4 個已更新項目:

請問我是不是少宣告甚麼??

5 個已更新項目:

#include

#include"custom_lib.h>

int main()

{

int flag=0;

int i;

int a;

do

{ printf("想印哪一種 (0) Hello (1) World (2) exit ");

scanf("%d",&a);

6 個已更新項目:

switch(a)

{

case 1:

if(flag==1)

{

flag=Hello();

}

break;

case 2

if(flag==0)

{

flag=World();

}

break;

}

}while(a!=2)

7 個已更新項目:

請問 kritz

我想這樣改程式讓使用者可以一開始選擇要印hello or world

可是怎麼印不出來 ??

是我switch裡面有錯誤??

4 個解答

評分
  • Tai
    Lv 5
    6 年前
    最佳解答

    版大,記得你的原題應該是 library.

    雖然先不用 library 包裝,但這題會誤導大家 flag 寫在 main 中,

    而非把 flag 寫在 library 中。

    flag 表示順序,

    hello() 內只有 flag = 0 才會印出 , 也才會改變 flag=1,等待 world。

    world() 內只有 flag = 1 才會印出,也才會改變 flag =0,等待下個 hello。

    //http://tw.knowledge.yahoo.com/question/question?qi...

    #include <stdlib.h>

    #include <stdio.h>

    static int flag = 0;

    int Hello()

    {

    // print "Hello" only if flag = 0;

    if (!flag) {

    printf("Hello");

    flag = !flag;

    return 1;

    } else {

    return 0;

    }

    }

    int World()

    {

    // print "World" only if flag = 1;

    if (flag) {

    printf("World");

    flag = !flag;

    return 1;

    } else {

    return 0;

    }

    }

    /////////////////////////////////////////////

    int main()

    {

    int h, w;

    // test

    printf("call Hello() "); h = Hello(); printf("=%d\n", h);

    printf("call World() "); w = World(); printf("=%d\n", w);

    printf("call World() "); w = World(); printf("=%d\n", w);

    printf("call Hello() "); h = Hello(); printf("=%d\n", h);

    printf("call Hello() "); h = Hello(); printf("=%d\n", h);

    printf("call World() "); w = World(); printf("=%d\n", w);

    system("pause");

    return 0;

    }

    2013-11-20 01:43:26 補充:

    之後你的 library 就是 flag, world(), hello(). 這樣就可以了。

    2013-11-20 01:49:54 補充:

    版大的原題是,library 內有 hello(), world(). hello() 印 "hello", world() 印 "world". 若成功印出 ,返回 1, 若沒有印出, 返回 0.

    設有 flag (應該設在 library 內). 使得 hello() 只在 world() 之後能印出,而 world() 也只能在 hello() 之後印出 (重複呼叫, 後面的沒有辦法印出)

    2013-11-20 01:51:14 補充:

    flag 從頭到尾都不是公開的變數,library 外無法改變。

    所以也不存在用 flag 改變列印的方式。

    2013-11-20 01:59:16 補充:

    總之版大雖然辛苦建了 library,千萬不要忘記題意。

    The library should use a flag (implemented using a static global variable)

    你在外面寫 flag,助教只是立馬刪了。

    2013-11-20 02:47:41 補充:

    p大我英文是很差, 但題目猜得不差. 版大的題目是從 library 那題來的. 本來就是要在 library 內設個 flag 決定 hello world 順序.

    版大卻拿了外部 flag 改變 hello, world 的程式. 怎麼看都與原題違背. 台灣助教很辛苦, 沒勞保工作量又多, 只要不合題意就砍人了.

    2013-11-20 02:50:54 補充:

    不然 princess 請幫忙英翻中

    http://tw.knowledge.yahoo.com/question/question?qi...

    2013-11-21 00:03:17 補充:

    p 大寫得完整。不過 flag 為什麼要三態呢? ...

    • Commenter avatar登入以對解答發表意見
  • 6 年前

    是這樣子嗎?我看不像耶!TaiTai大人怎知道醬多啊?

    2013-11-20 04:50:25 補充:

    是耶!TaiTai大大很聰明耶!她說得是真的耶! 可是程式可不能那樣寫吧?

    2013-11-20 04:52:35 補充:

    #include stdio.h

    #include "hello.h"

    typedef

    enum {

    HELLO,

    WORLD,

    ELSE

    } F;

    static F flag=HELLO;

    2013-11-20 04:52:52 補充:

    int Hello(){return flag == HELLO && printf("Hello.") && ELSE != (flag=WORLD);}

    int World(){return flag == WORLD && printf("World.") && ELSE != (flag=HELLO);}

    2013-11-20 04:54:09 補充:

    // 以上是 hello.c

    // 以下是 hello.h

    2013-11-20 04:54:58 補充:

    #ifndef __HELLO_H__

    #define __HELLO_H__

    extern int Hello();

    extern int World();

    #endif // __HELLO_H__

    2013-11-20 04:57:21 補充:

    // 以下是main.c

    #include stdio.h

    #include "hello.h"

    int main(){

    printf("\ncalled Hello = %d\n", Hello());

    printf("\ncalled World = %d\n", World ());

    return 0;

    }

    • Commenter avatar登入以對解答發表意見
  • 6 年前

    隨便的範例~

    int Hello()

    {

    printf("Hello");

    return 0;

    }

    int World()

    {

    printf("World");

    return 1;

    }

    int main()

    {

    int flag=0;

    for(int i = 1; i <= 10 ; i++){

    if(flag == 0){

    flag = Hello();

    }else{

    flag = World();

    }

    }

    }

    2013-11-19 14:46:53 補充:

    貼太快...if(flag == 1){ flag = Hello(); }else{ flag = World(); }

    • Commenter avatar登入以對解答發表意見
  • 6 年前

    flag 放那裡比較重要..

    記憶體, 硬碟 , 雲 ...

    • Commenter avatar登入以對解答發表意見
還有問題?馬上發問,尋求解答。