2017-02-09 20 views
0

現在、私はコマンドラインからユーザ入力を受け取るプログラムを書かなければならないクラスの割り当てに取り組んでいます。ユーザがCでCtrl + dを入力したときにプログラムを終了する

プログラムは、Ctrl + d文字がそれ自身の行に書き込まれるまで、ユーザーからの入力を受け続ける必要があります。

たとえば

:。

% /テスト

  • これは、このプログラムが後に停止する新しい行
  • CTRL + D

あるいくつかのテキスト

  • です最後の行( ' - '文字はユーザーにまだテキストを入力していることを示すためのものです)。

    は、これまでのところ、私はこの持っている:

    char c; 
    
    printf("- "); 
    
    while (c != EOF) { 
        scanf(" %c", &c); 
        printf("- "); 
    } 
    

    をしかし、私はそれが終了しない実行時にCtrl + Dキーを入力すると、任意の助けもいただければ幸いです。

    また、これは私のMacで動作するようにしたいので、誰かがこれを行う別の方法がある場合(cmd + dは端末ウィンドウを分割するだけである) 。

    ありがとうございます!

  • +1

    '(のscanf( "%cの"、&C)== 1)あなたは' EOF'その方法を取得することはありません ' – Stargateur

    +0

    ながら! 'あなたが使っている関数のドキュメントを読んでください! – Olaf

    答えて

    0

    は、ここで簡単にあなたの問題を解決します。 scanfの代入の代わりに、適切なEOF結果を与えるscanfの結果を使用する必要があります。あなたが複数のキーを必要とする、よりトリッキーなケースではなく、EOFのようにすでに準備されたもののない

    また

    。 scanfループをシミュレートして、ctrlキーの後ろにdまたはcと続くdがあるかどうかを確認することができます。ユーザーはctrl + dまたはd + ctrlのどちらかを実行するので、このループでそれを捕まえることができ、上の例のようになります。私はそれがちょうど非常に厄介な解決策であることを知っているが、それは動作します。

    申し訳ありません私はあなたのMAC問題のために何も得ていません。私はそれをテストする必要がないためです。

    幸運

    0

    使用termios - > btw、これは既に数十回回答されていることを保証しますが、私は再びここに投稿します:https://en.wikibooks.org/wiki/Serial_Programming/termios

    これらの質問をする際には、まず質問をgoogle(ビン、ヤフーなど)に入れてください。複数のキーボタンは、それが困難キャッチするために作るためにscanfのを使用して

    #include<stdio.h> 
    
    main() 
    { 
    
        char c; 
    
        int flag=0; 
    
    printf("- "); 
    
    while (flag != EOF) { 
        flag = scanf(" %c", &c); 
        printf("- "); 
    
    } 
    return 0; 
    } 
    

    関連する問題