0

Swift から出力を出力したい C プログラムがあり、スキャン時に Swift を介して入力を与えることができます。そのようなことは可能ですか?私は単純な関数でこれを試してみましたが、うまくいきましたが、他の関数を呼び出す多くの異なる関数でどうすればうまくいきますか?

質問が少し曖昧であることは知っていますが、誰かが私を正しい方向に向けることができますか?

コードの例:

int main(int argc, char **argv) {
    int i;
    int hitme;
    char ch;
    prelim();

    if (argc > 1) { // look for -f option
        if (strcmp(argv[1], "-f")== 0) {
            coordfixed = 1;
            argc--;
            argv++;
        }
    }


    if (argc > 1) {
        fromcommandline = 1;
        line[0] = '\0';
        while (--argc > 0) {
            strcat(line, *(++argv));
            strcat(line, " ");
        }
    }
    else fromcommandline = 0;


    while (TRUE) { /* Play a game */
        setup();
        if (alldone) {
            score(0);
            alldone = 0;
        }
        else makemoves();
        skip(2);
        stars();
        skip(1);

        if (tourn && alldone) {
            printf("Do you want your score recorded?");
            if (ja()) {
                chew2();
                freeze(FALSE);
            }
        }
        printf("Do you want to play again?");
        if (!ja()) break;
    }
    skip(1);
    prout("May the Great Bird of the Galaxy roost upon your home planet.");
    return 0;
}
4

4 に答える 4

1

私は非常によく似た問題に取り組んでいます。コードレビューで議論する解決策があります: C hack: printf を置き換えて、出力を収集し、ライン バッファーを使用して完全な文字列を返す たぶん、それ (またはその一部) をテキスト ゲームにも使用できます...

于 2015-12-14T08:36:54.290 に答える
1

はい。

これについては、Using Swift with Cocoa and Objective-C で詳しく説明されています。Objective-C は C のスーパーセットであるため、Objective-C のすべての手順は C でも同様に機能します。

短いバージョンでは、プロジェクトに C コードを追加し、そのヘッダーを Objective-C ブリッジ ヘッダーにインポートするだけで、C 関数が Swift で利用できるようになります (さまざまな自動翻訳を使用)。

とはいえ、本当に出力 (つまり、これらのprintf呼び出しの結果) を読みたい場合は、少し別の問題です。できれば避けたいです。それ以外の場合は、C プログラムを独自の実行可能ファイルとしてビルドし、NSTaskSwift 内でそれを呼び出して出力をキャプチャするなどの操作を行う必要があるか、fdopen. それを完全に正しく行うのは苦痛です。

于 2015-12-12T15:09:51.560 に答える