2012-04-17 4 views
1

私は既にこのsimilar questionを見てきましたが、もう1つの方法があるのでしょうかと私はまだ疑問に思っています。1)ターミナルはportabiltyでエコーしています。 1つのJavaプログラムがクラッシュし、私の教師のコンピュータで焼く2)私のプログラムで私は'\n'の文字を検索し、それが最初の文字の使用でなければgetcharを次にputcharまで'\n'リダイレクトしたときにうまく動作するcharがstdinリダイレクトせずにプログラムを使用すると、Enterキーが常にエコーされます。これは端末エコーと関係があるのですか、'\n'以外の別の文字をチェックする必要がありますか?私も'/r'を含めて試してみて、グーグルでたくさんのことをやったけど、エコーに対する答えは、ポパビリティではできないのだろうか?getcharと ' n' charをstdinからエコーする

#include <stdio.h> 
#include <string.h> 

int first_line(char); 
int main(){ 

char c; 

while((c = getchar())!=EOF){ 
    first_line(c); 
} 

return 0; 
} 

int first_line(char c){ 
if (c != '\n'||c != '\r'){ 
    putchar(c); 

    do{ 
     c = getchar(); 
     putchar(c);} 
    while(c !='\n'); 
} 

return 0; 
} 

おかげラクラン

+0

あなたは '行う-while'をもしそうなら、'しばらくに変換((C = getchar関数())!= '\ n')でエコーを得るのですか ' – keety

+0

回すのマルチプラットフォームポータブルな方法がありますオフエコー。 UNIXなどのプラットフォームでは、おそらくtermcapを使用する必要がありますが、Windowsでは動作しません。 –

+0

'termios'を使って一度に1文字の入力とエコーを制御することは、' posix'互換性を主張するシステム間で移植可能です。 termiosの使い方は、質問の始めにhttp://stackoverflow.com/questions/1798511/how-to-avoid-press-enter-with-any-htmlで質問された '類似質問 'ページの2番目の答えに示されています。 getcharまた、 'getchar()'は 'char'ではなく' int'を返します。 @BrianSwift; –

答えて

1

開始について以下で試してください。

1)端子はラインバッファリングされている場合の条件は場合に、if (c != '\n' && c != '\r')

2)とwhileループでなければなりませんncursesライブラリのgetchを使用する方がよいでしょう。ほとんどのプラットフォームでは、ライブラリパッケージがそこにあるはずです。

while((c =getchar())!='\n') { 
     putchar(c); 
    } 
+0

新しい行があるとすぐに1を使用すると、テキストの行末にプログラムが終了します。3行末に改行がスキップされ、行間に正しい行がない行が表示されます – UNECS

+0

@UNECSは答えを – keety

+0

編集しました。私はgetchを探していましたが、それを見つけることしかできませんでした...ライブラリはcursesを試します – UNECS

関連する問題