電卓アプリケーションがあります。10 + 15
のような算術式を入力し、それに続いて=
という符号を付け、Enterキーを押します。プログラムは式を評価し、結果を出力する必要があります。改行記号を削除する
しかし、答えは新しい行にある、私は同じ1
よう10 + 15 = 25
にそれをするにもかかわらず、私もungetch
使用しようとしたが、それは動作しませんでした。
したがって、結果を得るために改行文字を削除するにはどうすればよいですか?
電卓アプリケーションがあります。10 + 15
のような算術式を入力し、それに続いて=
という符号を付け、Enterキーを押します。プログラムは式を評価し、結果を出力する必要があります。改行記号を削除する
しかし、答えは新しい行にある、私は同じ1
よう10 + 15 = 25
にそれをするにもかかわらず、私もungetch
使用しようとしたが、それは動作しませんでした。
したがって、結果を得るために改行文字を削除するにはどうすればよいですか?
端末でサポートされている場合は、端末エスケープコードを使用してカーソルを移動できます。
#include <stdio.h>
int main () {
char input[200] = "";
int ch = 0;
int count = 0;
printf ("\033[2J");//clear screen and move cursor to upper left corner
printf ("\033[8;H");//move cursor to line 8
printf("Enter equation\n");//\n advances to line 9
while ((ch = getchar ()) != '\n' && ch != EOF) {
input[count] = ch;//store input for processing
count++;//count characters
}
printf ("\033[9;%dH", count + 1);//move cursor to row 9 col count + 1
printf ("answer here\n");
return 0;
}
コンソールから入力行を読み取っている場合、ユーザーはEnter
を押すまで入力したテキストを自由に編集できます。それらがEnter
を押すと、カーソルは直ちに行の先頭に移動し、おそらくプロセス中に画面バッファをスクロールします。
カーソルを前の行に戻すには、「curses」ライブラリを使用する必要があります。このライブラリを使用すると、カーソル移動コマンドを送信してカーソルを前の行まで戻し、最後にカーソルを移動することができます入力。タブ文字を使用したり、複数の入力行に入力したりすると、これは複雑になる可能性があります。
「ncurses」、またはWindowsではPDCursesを参照してください。
端末を使用している場合、通常は改行を待ってから何かをするため、端末を使用するのは簡単ではありません。あなたは、あなたがバッファリングされていない入力を使用する必要があなたは完全にcontroleソケットまたはいくつかの他のストリーム上でこれをやっている場合は...
setvbuf not able to make stdin unbuffered
をここで見てください。こちらをご覧
Buffered and Unbuffered inputs in C
注意を持って、これは書くことがあなたの電卓が少し難しくなります。あるいは、端末に入力と回答の行全体を印刷することもできます。
私はそうは思わない。私はgetchar()を使用して、いくつかの文字列の文字を処理できません。 – luckystrrrike
@chux:私は、OPがEnterを押した後に端末に表示された改行を削除したいという印象を持っています。これは、表示されたリンクごとに読み込まれたものから切り捨てることで達成することはできません。 – alk
これは入力データから改行を削除するのではなく、入力されたテキストインタフェースに対するその影響を元に戻すためです。 –