C言語関係掲示板

過去ログ

No691 scanfで改行しないように

[戻る] [ホームページ]
No.8070

scanfで改行しないように
投稿者---うーこん(2003/07/08 09:36:19)


過去ログにもあった質問なのですが、
scanfで数値を入力したあと、改行しないでprintfで文字列を出力
したいと試行錯誤しています。
  printf("身長は?・・>");
  scanf("%f",&cm);
printf("cm");
こんな感じで身長入力して、結果が 身長は?・・>174cm
って表示されるようにしたいのですがうまくいきません。
過去ログにあるようにエスケープシーケンスについて調べてやってみたのですがうまくいきません。
どなたかアドバイスをお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:scanfで改行しないように 8072 M/K 2003/07/08 10:03:44
<子記事> Re:scanfで改行しないように 8076 nop 2003/07/08 10:39:35


No.8072

Re:scanfで改行しないように
投稿者---M/K(2003/07/08 10:03:44)


#include <stdio.h>

int main()
{

int c;
c=0;
printf("身長は?・・>");
scanf("%d",c);

printf("身長は%dcmです");
}
こんな感じでどうでしょう?

>過去ログにもあった質問なのですが、
>scanfで数値を入力したあと、改行しないでprintfで文字列を出力
>したいと試行錯誤しています。
>  printf("身長は?・・>");
>  scanf("%f",&cm);
> printf("cm");
>こんな感じで身長入力して、結果が 身長は?・・>174cm
>って表示されるようにしたいのですがうまくいきません。
>過去ログにあるようにエスケープシーケンスについて調べてやってみたのですがうまくいきません。
>どなたかアドバイスをお願いします。



この投稿にコメントする

削除パスワード

No.8073

Re:scanfで改行しないように
投稿者---うーこん(2003/07/08 10:11:47)


ありがとうございます。
そうですよね。それももちろん考えたんですけど、
新しい勉強がしたくて。



この投稿にコメントする

削除パスワード

No.8074

Re:scanfで改行しないように
投稿者---あかま(2003/07/08 10:22:27)


エスケープシーケンスは処理系に依存することが多い(と思う)ので
環境を教えて下さい。

とりあえず方法としては
1.改行を1つ消して"cm"を表示する。
2.画面を全部クリアして"身長は…"から全て表示しなおす
の2通りがあると思います。


この投稿にコメントする

削除パスワード

No.8075

Re:scanfで改行しないように
投稿者---うーこん(2003/07/08 10:32:51)


環境っていうのはOSとかでしょうか?
OSはXPでBorlandのフリーのコンパイラ Borland C++ Compiler
を使っています。
2通りの方法、どちらも教えていただけないでしょうか?
お願いします。


この投稿にコメントする

削除パスワード

No.8076

Re:scanfで改行しないように
投稿者---nop(2003/07/08 10:39:35)


>過去ログにあるようにエスケープシーケンスについて調べてやってみたのですがうまくいきません。

エスケープシーケンスならこんな感じかな。
ただし、MS-DOS 上での動作しか保証はしない。
ただ、Win ME ではこれで動きました。

char    buf[64] = {'\0'};
int    a;

printf( "身長は? > \x1B[s" );
scanf( "%d", &a );
sprintf( buf, "%d", a );
printf( "\x1B[u\x1B[%dC cm\n", strlen(buf) );


ただ、個人的には Windows なら下記の方をお薦めします。

int    a;

printf( "身長は? > " );
scanf( "%d", &a );
systems( "cls" );
printf( "身長は? > %d cm\n", a );



この投稿にコメントする

削除パスワード

No.8078

Re:scanfで改行しないように
投稿者---うーこん(2003/07/08 11:09:23)


strlen
systems( "cls" );
がそれぞれ定義されていないと言われてしまうのですが、
どのような処理をする文なのでしょうか?


この投稿にコメントする

削除パスワード

No.8081

Re:scanfで改行しないように
投稿者---nop(2003/07/08 12:06:21)


>strlen
>systems( "cls" );

すみません、「systems()」は「system()」の間違いでした。

「strilen()」は「<string.h>」を
「system()」は「<stdlib.h>」を
それぞれインクルードすればOKなはずです。


この投稿にコメントする

削除パスワード

No.8085

Re:scanfで改行しないように
投稿者---うーこん(2003/07/08 13:10:26)


system()のやり方でできました!
ありがとうございました!勉強になりました。


この投稿にコメントする

削除パスワード

No.8086

Re:scanfで改行しないように
投稿者---うーこん(2003/07/08 13:12:09)


system("cls");
は画面を全部クリアするやり方ですよね?
この他に上の行を1行クリアして次を表示する方法なんかは
あるのでしょうか?


この投稿にコメントする

削除パスワード

No.8088

Re:scanfで改行しないように
投稿者---こん!(2003/07/08 13:41:06)


>この他に上の行を1行クリアして次を表示する方法なんかは
>あるのでしょうか?

エスケープシーケンス検索結果こんなのが見つかりました。

まんまDOS仕様の物は見つかりませんでしたがMS-DOSを模倣して作ったという事
でそんなに違いはないでしょう。



この投稿にコメントする

削除パスワード

No.8089

Re:scanfで改行しないように
投稿者---うーこん(2003/07/08 13:46:08)


あー!このページ見ました!
ESC [pnA
とかやってみたんですけど使い方が分からなくて。。。
printf("ESC[10C");
printf("ESC[1A");
ってやったら10文字右に行って、1行上に行くのかと思ったのですが
[10Cとかがそのまま表示されちゃって。
使い方教えてください


この投稿にコメントする

削除パスワード

No.8090

Re:scanfで改行しないように
投稿者---こん!(2003/07/08 13:55:45)


>あー!このページ見ました!
・・・
>使い方教えてください

見たのでしたらページの下の方まで眺めてみてください。
ちゃんと使い方の例まで載っています。


この投稿にコメントする

削除パスワード

No.8091

Re:scanfで改行しないように
投稿者---うーこん(2003/07/08 14:03:41)


見ました。
printf("\33[2J");
のように表記すると、DOS画面では
改行マーク「2Jと出力されてしまいます。
OSによるものなのでしょうか


この投稿にコメントする

削除パスワード

No.8092

Re:scanfで改行しないように
投稿者---nop(2003/07/08 14:10:12)


Windows XP や 2000 ではエスケープシーケンスは使えなかったと思いますが?


この投稿にコメントする

削除パスワード

No.8093

Re:scanfで改行しないように
投稿者---こん!(2003/07/08 14:12:11)


>改行マーク「2Jと出力されてしまいます。
>OSによるものなのでしょうか

今読み直して気がついたけどXPでBorlandね。
出来ないよ。

過去ログ読めば見つかるけどconfig.ntファイルの変更とコンパイラをLSI-C86等
の16ビット対応にしないと・・・


この投稿にコメントする

削除パスワード

No.8094

Re:scanfで改行しないように
投稿者---こん!(2003/07/08 14:18:36)


>過去ログ読めば見つかるけどconfig.ntファイルの変更とコンパイラをLSI-C86等
>の16ビット対応にしないと・・・

うちは2000で出来てるんだけどXPにcommand.comあるのかな?
わし知らない・・・

試しにファイル名を指定して実行で[command]打ち込んでコンソールが立ち上
がるか確認してみたら?

16ビットアプリだとcmd.comではなくcommnad.comが起動される。


この投稿にコメントする

削除パスワード

No.8097

Re:scanfで改行しないように
投稿者---うーこん(2003/07/08 14:54:34)


config.ntファイルの変更はできました。
コンパイラをLSI-C86等の16ビット対応にするっていうのが難しく
感じます。申し訳ないのですがもう少し詳しく教えていただけないでしょうか?
お願いします。


この投稿にコメントする

削除パスワード

No.8099

Re:scanfで改行しないように
投稿者---こん!(2003/07/08 15:01:40)


>コンパイラをLSI-C86等の16ビット対応にするっていうのが難しく

取り敢えずこういった参考ページが無数にありますから読んでみましょうか。

ここだけでも出来そう・・・


この投稿にコメントする

削除パスワード

No.8098

Re:scanfで改行しないように
投稿者---うーこん(2003/07/08 14:57:49)


ファイル名を指定して実行で[command]を打ち込んでみました。
そしたら、Command Promptが起動されて、KKCFUNCが組み込まれました。
等のメッセージが表示されました。
これだと16ビットには対応してないということなのでしょうか?


この投稿にコメントする

削除パスワード

No.8101

Re:scanfで改行しないように
投稿者---こん!(2003/07/08 15:08:26)


>等のメッセージが表示されました。
>これだと16ビットには対応してないということなのでしょうか?

あっ、大丈夫や。こんなんせんでも切り替わるわ。m(__)m


この投稿にコメントする

削除パスワード

No.8102

Re:scanfで改行しないように
投稿者---うーこん(2003/07/08 15:20:58)


>あっ、大丈夫や。こんなんせんでも切り替わるわ。m(__)m
毎度毎度本当にありがとうございます。
あっ。大丈夫や。ってことはLSI-C86等にする必要はないってことですか?
config.ntの中身書き換えて、挑戦してみたんですけどまだうまくいかないんです。。。


この投稿にコメントする

削除パスワード

No.8103

Re:scanfで改行しないように
投稿者---こん!(2003/07/08 15:29:50)


>あっ。大丈夫や。ってことはLSI-C86等にする必要はないってことですか?

そういう意味ではないです。一応これまでもそこそこの情報が上がっていると思
いますが一通りご自分で確認されましたか?

過去ログ等・・・
XPではそのままでは駄目ですと言っているのですから、またそれに関する情報
も多数あげているのですからそれらを確認して頂けませんか?

すべての回答をここで要求せず与えられた情報を有効利用して下さい。

これまでの情報で十分解決に至りますよ。


この投稿にコメントする

削除パスワード