![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.1ベストアンサー
- 回答日時:
お答えします。
これら入力関数の違いは、
「入力する場所が、『標準入力』か『ストリーム』か」
「入力するものが『文字』か『文字列(行)』か」
で分類されます。
「標準入力」というのは、通常、キーボードからの入力を意味します。
それに対し、「ストリーム」というのは、fopen()を使って、FILE*を経由して入力をすることです。
fgets()を使うときこういうことするでしょ?
FILE *file;
char string[100];
file = fopen("abc.txt");
fgets(string, 100, file);
「abc.txt」というファイルと、プログラムの間にストリーム(流れ)を渡して、
データを流せるようにします。
ファイルからデータを入力できるようになります。
また、ここでfileの変わりにstdinを使うとキーボードから入力できます。
キーボードからの入力もできるし、ファイルから入力することもできるのです。
入力関数をまとめるとこうなります。
標準入力・文字 : getchar()
標準入力・行 : gets()
ストリーム入力・文字 : fgetc(), getc()
ストリーム入力・行 : fgets()
ただし、それぞれ使い方(引数の数とか)が違うので、
詳しいことはC言語の資料を見てください。
なお、「ストリーム入力・文字」が二つあるのは、歴史的な理由です。
原則的には同じものと思ってかまいません。
あと、ungets()は、getc()等で読んだ文字を、
「読まなかったことにして」と押し返す関数です。
普通、使う機会は少ないと思います。あまり考えなくていいでしょう。
ungetchar()というのは知りませんが、ungetc()と同様だと思います。
No.2
- 回答日時:
プロトタイプを比較してみましょう。
int getc(FILE*) ;
char *gets(char *) ;
int getchar(void) ;
int ungetc(int, FILE *) ;
int fgetc(FILE *) ;
int ungetchar(int) ;はANSI-C標準ではありません。
getchar()はgetc(stdin)と同じです。
gets()はgetchar()の行バージョンと考えることが出来ますが、入力行がそのまま返されるという保証がありません。
少なくとも、EOL(改行や改ページなど)は削除されます。
fgetc()とgetc()はよく似た動作をしますが、【全く同じ】という保証はありません。
fopen()でFILE *を取得している場合、getc()を使います。
ungetc()は入力されたデータを1文字入力元に戻す、という特殊な関数です。
実際にはファイルではなく、FILE *で管理する入力バッファいに戻されます。
ungetchar()が存在する処理系ではungetchar(c)はungetc(c, stdin)と同じ動作をする可能性が高いと思います。
ただし、ungetc()/ungetchar()はsetbuf()によってバッファなしに設定されているファイルに対して呼び出すことは出来ません。
もし、呼び出した場合は無視されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 薬剤師・登録販売者・MR 変更調剤について 1 2022/05/22 11:50
- 中古車 GD系フィットとGE系フィットの燃費について 3 2023/06/18 02:20
- その他(悩み相談・人生相談) 人は皆平等だと言いますが… 6 2022/11/06 23:59
- 統計学 X~Ge(0.4)であるとする。このとき、p(X≧4)≦???である。チェビシェフの不等式を用いて? 1 2022/12/06 14:52
- 片思い・告白 マッチングアプリで全く質問してこない男性がいるのですが、どういうことだと思いますか? 最初の1-2日 4 2022/07/19 23:01
- 英語 1単語及び2単語の「no~」を受ける単語について 1 2022/11/07 11:54
- 英語 アメリカ文化について質問です。アメリカ人はよく I love you を乱用している気がします。わた 7 2022/12/20 17:10
- 父親・母親 説明が下手すぎる母親 さっき母親と話していたら母の言いたいことが支離滅裂で頭が混乱してしまいました。 5 2023/05/10 23:34
- 教えて!goo 2つ教えてください 4 2023/03/17 18:11
- 日本語 <形容動詞>という誤りについて! 4 2022/04/15 21:14
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
プログラミング初心者です。 Py...
-
c言語の数当てゲームプログラム...
-
java初心者です。入力されたの...
-
scanf が無視されます
-
正負を反転させて出力するプロ...
-
入力値が1以下、かつ数字以外の...
-
getchar()について 教えてくだ...
-
数字以外が入力されたらエラー...
-
C言語 逆ピラミッドの作り方
-
scanfの入力をgets関数で読み捨...
-
C言語初心者です。ファイルの読...
-
小数か整数かを判定する方法
-
C言語 While文(ループ)内の...
-
C言語について
-
Userformの入力順序をタブオー...
-
getc 等の違い
-
C言語(構造体)
-
C言語でgetchar();が上手く使え...
-
C言語で作成したプログラムの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
数字以外が入力されたらエラー...
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
C言語 逆ピラミッドの作り方
-
double型が正常に認識されてい...
-
ワードで文字を入力する時の変...
-
コマンドプロンプトからのEOFの...
-
Linuxで入力待ちなしkeyread関...
-
scanf が無視されます
-
if文の条件にscanf関数を使うと…?
-
C言語について
-
cout関数を使っているのですが...
-
enterでループ終了
-
"scanf"でエンターで改行させな...
-
C言語でgetchar();が上手く使え...
-
C言語scanf_sで何故か2回入力に...
おすすめ情報