文字を取り込むときに、scanfなどでは、Enterきーを押さないと、文字の取り込みができないのですが、もし文字を打ち込んだ瞬間に(Enterキーを押さなくても)取り込める方法がありましたら、おしえてください。よろしくお願いします。

-たとえば-
#include<stdio.h>
    :
    :
scanf("%s",&a);
/*ここでEnterキーを押さないと文字を取り込めない*/

このQ&Aに関連する最新のQ&A

A 回答 (2件)

getcheがつかえると思いますよ。



構文

#include <conio.h>
int getche(void);

解説

キーボードからエコー付きで文字を読み込みます。
getche は,キーボードから 1 文字読み込み,テキストウィンドウにエコーバックします。

戻り値

getche は,キーボードから読み込んだ文字を返します。
    • good
    • 0

環境の指定が無いので答えにくいのですが…。



まず最初に、文字列入力に付いては“ここまで”という指定が必要な為enterによる区切りは必要だと思います。
文字入力(scanf()の"%c"やgetchar())の場合は可能性があります。

UNIX系の場合:
sttyでコンソールをrawモードにしておけばgetchar()でenterなし1文字入力できます。
ある種のUNIX(ネイティブ系ではOK、linuxでは未確認)ではsetbuf(stdin, NULL)を実行する事でgetchar()でenetrなし1文字入力可能です。

MS-DOS及びDOS窓16ビットの場合:
KeyBIOSを使った方が手っ取り早いので通常KeyBIOSを使います。
拡張ライブラリ関数getch()が利用可能なコンパイラならgetch()でもオッケーです。

DOS窓32ビットの場合:
getch()を使います。

Macの場合(MPWシェル):
最近のバージョンは使ったことが無いのですが、昔はsetbuf(stdin, NULL)の後にgetchar()すれば出来ました。

昔のDOS環境にはバッファリング無しの入力として標準エラー入力というものがあったのですがWindows上のDOS環境でサポートされているんでしょう? > 識者の方
    • good
    • 0

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qパソコンが起動しないので回復コンソールだけ使いたい場合のOS購入

いま現在も調べてる途中なんですが、急いでるのですいませんが質問させて下さい。

WindowsXP Pro SP3
ショップパソコン(パソコン工房)
HDDは120GBひとつをC30GBとD90GBにパーティション、CにOS

【エラー内容】:とにかく黒い画面に白い英語が書かれたままPCが動かない。

【エラー内容詳細】:Verifying DMI Pool Date........とError Loading Operating Systemと出ます。

【やった事】:セーブモードで立ち上がらない、再起動してもダメ、周辺機器を全部抜いてもダメ、
BIOSの順番も異常なし(元々HDD-0)、BIOSの初期化をしてもダメ。

【やったこと2】:BIOSでハードディスクが認識されてるか調べてみましたが、認識はされていました。
でもKNOPPIXで起動してみたところエラーが出て、HDDの中身を見ることができませんでした。HDDもダメ・・・?

【心当たり】:SDHCカードリーダー(USB)に空のMicroSDアダプターを刺したまま
(MicroSD自体は抜いてありました)PCを再起動した。ら、こうなりました。

【心当たり2】:以前からiPodをUSBに繋いだまま起動すると同じような画面(おぼろげですが)
になって起動しなくなってました。
BIOSで順番をいじっても変わらないので、iPodを外してから起動するようにしてました。
今回もそうだと思ったんですが、ずっと動かなくなってしまいました・・・。

とりあえずあとできる手立ては回復コンソールによる作業だけかと思ってるんですが、
どうやらプレインストールPCらしくリカバリCDがないんです。

●回復コンソールを使いたいだけの場合、ネットで安く見つけたWindows XP pro sp2 アップデート版などでも使えるんでしょうか。

●proからhomeは無理というのは分かったんですが、
XP sp3 からXP sp2っていうのはダウングレードになるんですか?

●そもそもXP proからXP proのアップグレード版っておかしいですよね・・・
OSのインストール自体が目的ではなくあくまで回復コンソールが使いたいだけなんですが、
アップグレードでは無い方の高価なOSを購入しなければできないんでしょうか?


(1)すでにプレインストール版のWindowsXP Pro sp3が入っている
起動できなくなったパソコンで回復コンソールを使いたい場合、
どのOSを購入すればよいのか。

(2)パソコンのエラー等含め何か分かることがあったら
個人的なことでもいいんで教えてくださいませ

いま現在も調べてる途中なんですが、急いでるのですいませんが質問させて下さい。

WindowsXP Pro SP3
ショップパソコン(パソコン工房)
HDDは120GBひとつをC30GBとD90GBにパーティション、CにOS

【エラー内容】:とにかく黒い画面に白い英語が書かれたままPCが動かない。

【エラー内容詳細】:Verifying DMI Pool Date........とError Loading Operating Systemと出ます。

【やった事】:セーブモードで立ち上がらない、再起動してもダメ、周辺機器を全部抜いてもダメ、
BIOSの順番も異常なし(元...続きを読む

Aベストアンサー

インストールCDが無くても、回復コンソールは使えます。とりあえず参考URLのサイトがありました。

OSを再インストールする前にデータの回収するには、KNOPPIXというCDから起動できるLinuxがあります。これで、外部のHDDなどにデータをコピーしてください。

参考URL:http://lets-go.hp.infoseek.co.jp/kaihuku.html

Q#include

#include <stdio.h>の <> の意味と
#include "xxxxx.h"の "" の意味を教えてください。

Aベストアンサー

厳密な定義を、「JIS X3010:2003 - 6.10.2 ソースファイル取り込み」から引用します。

---- 引用ここから ----
制約 #include指令は, 処理系で処理可能なヘッダ又はソースファイルを識別しなければならない。
意味規則 次の形式の前処理指令
    # include <h文字列> 改行
は, 処理系定義の場所を順に探索して, <区切り記号と>区切り記号の間で指定した文字列で一意に決まるヘッダを見つけ, そのヘッダの内容全体でこの指令を置き換える。どのようにして探索の場所を指定するか, またどのようにしてヘッダを識別するかは, 処理系定義とする。
 次の形式
    # include "q文字列" 改行
は, 二つの"区切り文字の間で指定した文字列で一意に決まるソースファイルの内容全体で, この指令を置き換える。指定したソースファイルの探索順序は処理系定義とする。この探索をサポートしていない場合, 又は探索が失敗した場合, 同じ文字列(もしあれば>文字を含めて)を含む次の知れに読み替えたのと同じ規則で再処理する。
    # include <h文字列> 改行
---- 引用ここまで ----

要するに、<xxx>の場合は処理系定義のヘッダ(ファイルとは限らない)を取り込み、"xxx"の場合はソースファイルを取り込むということです。いずれも探索場所やその順序は処理系定義です。

よくある誤解は、
・ヘッダは必ずファイルである。
・"xxx"ではカレントディレクトリや取り込もうとしたファイルと同じディレクトリから探索を始める。
といったものです。このように実装されている処理系が多いことは確かですが、標準規格ではそのような規定はありません。
使用している処理系がどのような実装になっているかは、マニュアルに記載があるかと思います。

厳密な定義を、「JIS X3010:2003 - 6.10.2 ソースファイル取り込み」から引用します。

---- 引用ここから ----
制約 #include指令は, 処理系で処理可能なヘッダ又はソースファイルを識別しなければならない。
意味規則 次の形式の前処理指令
    # include <h文字列> 改行
は, 処理系定義の場所を順に探索して, <区切り記号と>区切り記号の間で指定した文字列で一意に決まるヘッダを見つけ, そのヘッダの内容全体でこの指令を置き換える。どのようにして探索の場所を指定するか, またどのようにして...続きを読む

Q【OS X】VIM 終了後のコンソール復元

【OS X】
Mountain Lion v10.8.4

Ruby の勉強をしているのですが、
Homebrew や rbenv のことで少々トラブり、
/usr/ の中を弄った後に困った事が起こりました。

何か余計なファイルを触ってしまったのか、
VIM を終了した後に VIM 起動前の
コンソールを復元できなくなってしまいました。

.vimrc に
「restorescreen というオプションを設定すると復元できる」
という解説をされているページを見ましたが、
これは Windows 専用のものということで出来ませんでした。
UNIX では termcap に何かすればいいらしいんですが、
Mac ではどうすればいいのでしょうか。

UNIX の基本的な知識もないのに
色々と大胆なことをしてしまったようです。
困りました。

解決法が分かる方、
知恵を貸していただけませんか。

よろしくお願いします。

Aベストアンサー

MacOSXでも同じです。
https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man5/terminfo.5.html

○まず、現在の端末の設定を確認しましょう。環境変数TERMを調べます。
echo $TERM
これは、ターミナルの環境設定> プロファイル >詳細 にある「ターミナルの宣言方法」と同じになっているはずです。

他に、termcapの設定を上書きする環境変数TERMCAPが定義されていないか、念の為確認します。

○上記$TERMに該当するterminfoが存在するかどうか、確認してください。
上記マニュアルにあるように、/usr/share/terminfo/ の下に、頭文字1文字、あるいはその文字コードの16進数2文字のディレクトリがあり、その下に、$TERMと同じ名前のファイルがあるかどうか、です。
例えば、$TERMが xterm なら、78/xterm が存在するか確認します。78は「x」のASCIIコードの16進表記です。

terminfoが無い場合
・バックアップから復元する
・他の互換のあるもので代用する。
となります。

また、環境設定で設定したものと、echo $TERMで確認したものが違う場合は、 .bashrc等の初期設定中にTERMを変更しているかもしれません。

MacOSXでも同じです。
https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man5/terminfo.5.html

○まず、現在の端末の設定を確認しましょう。環境変数TERMを調べます。
echo $TERM
これは、ターミナルの環境設定> プロファイル >詳細 にある「ターミナルの宣言方法」と同じになっているはずです。

他に、termcapの設定を上書きする環境変数TERMCAPが定義されていないか、念の為確認します。

○上記$TERMに該当するterminfoが存在するかどうか、確認してください。
上記マニュア...続きを読む

Q   #include

   #include<stdio.h>
#include<math.h>

int main(void)
{
int i,n,limit;
printf("data? ");
scanf("%d",&n);
i(n>=2){
limit=int)sqrt(n);
for(i=limit;i1;i--){
if(n%i==0)
break;
}
if(i==1)
printf("素数\n);
else
printf("素数でない\n");
}
return 0;
}

というプログラムがあるのですが、それを改良して int型(符号付32ビット整数)および、unsigned int型(符号なし32ビット整数)のそれぞれの最大の素数を求めよという問題があり、ただし、エラトステネスのふるいは使わずに、上のプログラムを改良してみよという問題がどっかにあったんですが、全然わからないので、教えてください。

   #include<stdio.h>
#include<math.h>

int main(void)
{
int i,n,limit;
printf("data? ");
scanf("%d",&n);
i(n>=2){
limit=int)sqrt(n);
for(i=limit;i1;i--){
if(n%i==0)
break;
}
if(i==1)
printf("素数\n);
else
printf("素数でない\n");
...続きを読む

Aベストアンサー

最初に。
このプログラム、ところどころ打ち間違いがあります。直しておきましょう。
i(n>=2){
limit=(int)sqrt(n);
for(i=limit;i>=1;i--){

まず、プログラムを、機能ごとに分けて考えます。

printf("data? ");
scanf("%d",&n);
が素数判定する数値nを決めるところ

if(n>=2){
から return 0 ; の前の
}
までがn が素数かの判定しているところ
です。

では、改造に入ります。
intの範囲での最大の素数、ということなので、 intの最大値 から順番に素数判定を行い、最初に見つかった素数が、求める値、となります。

元はnをキーボードから入力しています。
これをキーボード入力ではなく、プログラム中で「intの最大値 から順番に」するには、どうしたらいいと思いますか?

元の判定部は
if(i==1)
printf("素数\n);
else
printf("素数でない\n");
です。これは n に対して「素数/素数でない」と表示されます。
改造するときに
・「素数でない」という表示は必要でしょうか?
・「素数」という表示ではnはわかりません。 nも表示するにはどうしたらいいと思いますか?
・素数が見つかったら、ループを抜けないと、int型の全ての素数を表示するプログラムになってしまいます。ループを抜けるにはどうしたらよいでしょうか?

以上の考えかたで、改造できると思いますが、いかがでしょうか。

unsigned int版へは次の2点を変更します。
・計算に使う変数はunsigned intにする必要がある。
・nはunsigned intの最大値から順番に

最初に。
このプログラム、ところどころ打ち間違いがあります。直しておきましょう。
i(n>=2){
limit=(int)sqrt(n);
for(i=limit;i>=1;i--){

まず、プログラムを、機能ごとに分けて考えます。

printf("data? ");
scanf("%d",&n);
が素数判定する数値nを決めるところ

if(n>=2){
から return 0 ; の前の
}
までがn が素数かの判定しているところ
です。

では、改造に入ります。
intの範囲での最大の素数、ということなので、 intの最大値 から順番に素数判定を行い、最初に見つかった素数が...続きを読む

Qメーカー製のPCにOSインストール

本体が今、手元にないのですが。

メーカー製(リカバリディスク付)のOSが読み込めなくなりました。

メーカーのリカバリディスクに回復コンソールがついていないので
製品版のOSのCDから回復コンソールは使用できるでしょうか??
製品版のCDから上書きアップデートできるでしょうか?

よろしくお願いします。

Aベストアンサー

> 製品版のOSのCDから回復コンソールは使用できるでしょうか??
動作が保証できないので止めておいた方が無難

> 製品版のCDから上書きアップデートできるでしょうか?
動作が保証できないので止めておいた方が無難

インストール用起動ディスクから回復コンソールを起動

Windows XP のインストール用起動ディスクを入手する方法
http://support.microsoft.com/kb/880422/JA/

CDブートの回復コンソールディスクを作る
http://www7.plala.or.jp/hop-step-jump/kaihuku.html

Q#include

#include <stdio.h>

struct st
{
char a[3];
short b;
char c[7];
long d;
char e[5];
};

int main(void)
{
printf("%d\n",sizeof(struct st));
return 0;
}

コンパイルオプションでアライメントを変化させながら(1,2,4,…)
sizeof(struct st)の変化を見たいのですが、コンパイルする時に
どのようにすれば良いのでしょうか?当方、gccを使用しております。

あと、ついでなんですが、警告オプションは-Wと-Wallしかないのでしょうか?

Aベストアンサー

GCCのマニュアル
http://gcc.gnu.org/onlinedocs/index.html
日本語訳は古いバージョンのしか見つからなかった。

> アライメントを変化させながら
http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable-Attributes

コンパイラオプションでやるなら、-Dでマクロを使うなりして。
インテルプロセッサだと
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

> -mpreferred-stack-boundary=num
> -mincoming-stack-boundary=num
というあたりも関係あるかも

>警告オプションは-Wと-Wallしかないのでしょうか
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Warning-Options.html#Warning-Options

GCCのマニュアル
http://gcc.gnu.org/onlinedocs/index.html
日本語訳は古いバージョンのしか見つからなかった。

> アライメントを変化させながら
http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable-Attributes

コンパイラオプションでやるなら、-Dでマクロを使うなりして。
インテルプロセッサだと
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options

> -mpreferred-stack-boundary=num
> -mincoming-stack-boundary=num
とい...続きを読む

Q起動できなくなったOSのデータを拾いたい

今月に入り2回もOSが起動できなくなるという不運に遭遇しました・・・。原因は究明できたのですが、起動できなくなったOSのレジストリデータを拾えず困っています。

回復コンソールからreg.exeで必要レジストリをエクスポートしたいのですが、他のユーザーの HKEY_CURRENT_USER を拾うにはどうしたらいいのでしょうか?
回復コンソールでログインできるのはAdministratorで、他のユーザーへ切り替えることはできるのでしょうか?

OSの修復インストールを行おうとSP2適用のi386を作成して、再インストールを試みるもWindowsファイルコピー中に.sys .dll .dls .binなどのいくつかのファイルが「コピーに失敗しました」と言われ、正常に再インストールが行えません。

・回復コンソールでのレジストリの拾い方
・OSの修復インストールの方法

以上2点についてどなたかお教えください!

Aベストアンサー

>・回復コンソールでのレジストリの拾い方
質問内容と違いますが、レジストリハイブについての情報です。
http://okwave.jp/qa1677102.html ユーザのレジストリの場所です。
regeditのヘルプの「レジストリにハイブを読み込むには」にあるようにHKEY_USERSに別ユーザのレジストリを読み込むことが出来ます。
ファイルとしてコピーできれば通常の起動状態から参照することが出来ると思います。
>・OSの修復インストールの方法
http://support.microsoft.com/kb/881207/ja
http://support.microsoft.com/kb/884642/ja

Q#include

#include<stdio.h>
main ()
{
int a,b;
printf("適当な数字\n");
scanf("%d %d",&a,&b);
printf("(a*b)%(a+b)=%d\n",(a*b)/(a+b));
return (0);
}
で結果が
任意の数字
2
3
(a*b)(a+b)=1

なんですが違いますよね?
商の余りを求めるにはどう改変すればいいでしょうか?

Aベストアンサー

printf("(a*b)%(a+b)=%d\n",(a*b)/(a+b));
 ↓
printf("(a*b)%%(a+b)=%d\n",(a*b)%(a+b));


因みに、カテゴリが違います…。

QVirtual PCのゲストOSが起動しなくなった

WinXPで、VirtualPCを動かして、ゲストOSとして、XPを動かしておりましたが、ある日突然、ゲストOSのXPが動かなくなりました。

エラーとしては、
system32/hal.dll
が存在しないか、壊れているため起動できないとのこと。

http://lets-go.hp.infoseek.co.jp/bootdisk6.html#Tool
を参考に、回復コンソールイメージを作ってboot.iniの復旧を
試みましたが、回復コンソールの起動はできたものの、
インストールされた仮想PCにはログインできず。(認識されない)

ゲストOS内に作ったプログラムが入っているので、それだけでも
救い出したいのですが、何かよい方法はございませんでしょうか。

以上よろしくお願いします。

Aベストアンサー

できるかどうかわかりませんが、

#! 念のため実行する前に破損OSのバーチャルハードディスクのバックアップコピーを作って行ってください。

新しいバーチャルハードディスクを作成して
そこにOSをインストールします、
出来上がったら
その新しいゲストOSに
壊れているOSが入っているバーチャルハードディスクをマウントする(これが出来るかどうかわからない)
別ドライブとして新しいOSからみえるかもしれない。

#! 念のため実行する前に破損OSのバーチャルハードディスクのバックアップコピーを作って行ってください。

Q"stdio.h"との違い

"stdio.h"と<stdio.h>の違いについて教えていただけないでしょうか?
両方とも同じと考えているのですが正しいでしょうか?

教えていただけないでしょうか?よろしくお願いします。

Aベストアンサー

>両方とも同じと考えているのですが正しいでしょうか?

一部で正しい…でしょうか…。

「include 検索順」で見つかるページです。
http://www2.ocn.ne.jp/~cbmaho/homepage/vc/Help/include.htm

#include <~>
だと、カレントパスは見てくれない…か?
となると、2つ前の質問での
#include <stdafx.h>
はほぼ確実に失敗でしょうかねぇ…。


人気Q&Aランキング

おすすめ情報