からあなたは標準入力が何であるかについて誤解しているように見えます。コメントのintあなたの例では
:
出力この
$ prog
one
two
three
は、あなたが標準入力を通じてそれに情報を提供するためにそれをストリームまたはパイプを送信する必要がありますする必要があり、コマンドラインからプログラムを呼び出す
#include <stdio.h>
int main(void) {
int c; int i = 1;
printf("one\ntwo\nthree\n");
//while((c=fgetc(stdin)) != NULL) {
// comparing it with null is not correct here
// fgetc returns EOF when it encounters the end of the stream/file
// which is why an int is returned instead of a char
while((c=fgetc(stdin)) != EOF) {
if (c=='\n') {
printf("%d\n", i); i++;
}
}
return 0;
}
$ cat myfile | prog
one
two
three
4 # or however many lines are in myfile
stdinはデフォルトでは空白です。
1 ./eof_testing
one
two
three
jfklksdf #my typing here
1
fjklsdflksjdf #mytyping here
2
fjklsdflksdfjf # my typing here
3
sttyのシステムコールの一例を追加----- ----:あなたはそれに入力する場合は、ハイテク、これは私がコードの上HTEをコンパイルから見たものである
を入力するまで、何も送信されません
#define STDIN_FD 0
#define STDOUT_FD 1
#define CHUNK_SIZE 8
#define QUIT_CHAR (char)4 /* C-D */
int main(){
write(STDOUT_FD,"hi\n",3);
char buff[CHUNK_SIZE];
int r, i;
system("stty -echo raw");
while(r = read(STDIN_FD, &buff, CHUNK_SIZE)){
for(i = 0; i < r; i++){
if(buff[i] == QUIT_CHAR)
goto exit;
}
write(STDOUT_FD, &buff, r);
}
exit:
system("stty echo cooked");
return 0;
}
今、しかし、そのようなキーとして取り組む課題の全く新しいセットが、そこにある「\ rを」文字ので、代わりにそれだけで行の先頭に戻り、改行を送信します。これは、文字がプログラムに直接送られるようになったため、端末は 'cooked'モードで起こっていた '\ n'文字で行が終わらないためです。
http://starboard.firecrow.com/interface_dev/mle.git/editor/editor.c
あなたのANSIエスケープコード( '\のx033'プラス' [1S')は、端末上での表示を制御するために使用されます。 – Benoit
私のアプリケーションは端末で動作します。問題は、 "033 [1S"]でスクロールしたときです...スクロールされた行の内容が失われています(スクロールバックしています)。内容を失うことはありません。 – ubuntiano
あなたの質問は明確ではありません。あなたが望むものと何が起こっているのかを簡単な例を挙げてみてください(端末を表すために数行だけを使用してください)。また、さまざまな場所であなたのプログラムで何が起こっているのか、そしてその行の内容を失うことによって何が起こっているのかを話してください。 – nategoose