アプリ版:「スタンプのみでお礼する」機能のリリースについて

端末で入力を受けて、改行せずに次の表示を行いたいのですが、

char str[32];
printf("ほげほげ");
fgets(str, sizeof(str), stdin);
str[strlen(str) - 1] = '\0';
printf("ホゲホゲ");

とすれば
「ほげほげ (入力した内容) ホゲホゲ」
と表示できると考えましたが、これでは改行されて
「ほげほげ (入力した内容)
ホゲホゲ」
になってしまいます。原因がわかりません…

使用している環境は Linux Ubuntu 10.10 で gcc でコンパイルしています。

改行しない方法を説明しているサイトのサンプルをコピペして実行してみても、改行されてしまいました…

A 回答 (1件)

>原因がわかりません…


>fgets(str, sizeof(str), stdin);

の時点で、改行文字まで込みでエコーバックされているようですから無理じゃないですかね?
# つまりターミナル上ではfgets()から戻ってきた時点で改行処理が終わっている。

>使用している環境は Linux Ubuntu 10.10 で gcc でコンパイルしています。

http://oshiete.goo.ne.jp/qa/608841.html
ioctl()の利用でなんとかなるかもしれません。
フラグの設定方法次第かも知れませんけど。
# 改行だけエコーバックさせない…ってところでしょうか。
# ECHONLが関係しますかねぇ…。

>改行しない方法を説明しているサイトのサンプルをコピペして

それは「fgets()で取得した文字列から改行コードを取り除く」ではありませんか?
まぁ、fgets()で渡したバッファよりも長い文字列を入力した場合に誤動作すると思われますが。
# 改行コードかどうか判定してから削除しないと…ね。
    • good
    • 0
この回答へのお礼

回答ありがとうございました^^

とても複雑そうですね…
とりあえず考えてみます。

お礼日時:2012/10/09 00:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!