Apple IDログイン機能メンテナンスのお知らせ

printf、scanf関数:標準入出力に対して使用
fprintf、fscanf:ファイルに対して使用
sprintf、vsprintf、sscanf:メモリに対して使用
とあるのですが、これらの関数の違いが分かりません。教えて頂けると幸いです。

質問者からの補足コメント

  • NULL文字とは、文字列を区切るものなのでしょうか?教えて頂けると幸いです。

    No.6の回答に寄せられた補足コメントです。 補足日時:2023/11/02 17:53
  • うーん・・・

    コンパイルは成功しました!ありがとうございました!ですが、質問のscanf関数がどういうものかというのが、いまいちつかめません。教えていただけると幸いです。

      補足日時:2023/11/07 03:29
  • うーん・・・

    迅速な回答大変恐縮です。すみませんが、3つほど教えて頂けると幸いです。以下の通りです。
    ①return 0は、0=成功、1=失敗の、0でしょうか?
    ②printfで、/nを使っていますが、なぜ、sprintfで、/nは間違いだと言ったのでしょうか?
    ③vsprintfは、sprintfや printfなどの関数と何が違うのでしょうか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/11/07 20:17

A 回答 (39件中1~10件)

>単なるテキストファイルの例です。

内容はどこに打てば良いのでしょう
か?

terapadを起動し、文字を打ち込みます。
そして、保存するとき、「名前を付けて保存」を選択し、sample.txtの名前を付けて保存します。
必ず、goo2.cを格納しているフォルダに保存してください。
(必ず同じフォルダの下にsample.txtとgoo2.cがあるようにします)
    • good
    • 0

No37の続きです。



下記のサイトも候補としてよさそうです。
一週間で身につくC言語の基本
おさえておきたいプログラミングの基本
https://c-lang.sevendays-study.com/

ざっと読んでみて、あなたにとってしっくりくる方を選べばよいかと思います。
    • good
    • 0

>①FILE fpと、の意味



回答:
FILE *fp;
はFILE型のポインタ変数fpです。ファイルを扱うときに使用します。
詳細は、
https://9cguide.appspot.com/index.html
の17章:ファイルの取り扱い
を読んでください。

>②char *p の、*はどういう意味なのでしょうか?後、

回答:
char *p;はchar型のポインター変数です。
ポインターについては、
https://9cguide.appspot.com/index.html
の15章:ポインタ変数の仕組み
を読んでください。

>③sample.txt の例です。

回答:
単なるテキストファイルの例です。内容は
AAA
BBB
CCC
でも
aioue
kakikukeko
でも構いません。


そもそもの話ですが、
return 0 とreturn 1を使うときの例を示すというのが、このソースの目的です。
ファイルをオープンしたときに、エラーが発生したら、return 1で終了する。
最後まで、実行した場合は、return 0で終了するということが、理解できれば、それで十分かと思います。

細かいところが、気になりいろいろと疑問がわいてくるのは、仕方ありませんが、
一度に、全てを理解しようとするのではなく、少しずつ基礎から一歩一歩進めてはいかがでしょうか。

その例として
https://9cguide.appspot.com/index.html
を1章から順に最後まで読まれてはいかがでしょうか。練習問題は必ず行ってください。
そこで、不明点があれば、質問するのが良いかと思います。
質問の際は、出典を明確にできるので、第三者が非常に回答しやすくなります。

上記のサイト以外にあなたが、理解しやすいサイトなり参考書があれば、それでもかまいません。
但し、出典を明確にし、第三者が簡単にその情報を共有できる方が、回答が得られやすくなります。
    • good
    • 0
この回答へのお礼

単なるテキストファイルの例です。内容はどこに打てば良いのでしょうか?教えて頂けると幸いです。

お礼日時:2023/11/10 15:37

>このプログラムの関数の解説と、sample.txtの例です。


解説をつけました。

#include <stdio.h>

int main(void)
{
FILE *fp;
char data[1024];
char *p;
int ctr = 0; /* 読み込み件数:初期値は0*/
fp = fopen("sample.txt", "r"); /*sample.txtを読み込み用にオープンする*/
if (fp == NULL){ /*エラーがあれば:*/
printf("file open error\n"); /*エラー表示*/
return 1; /*エラーなので return 1 */
}
while(1){ /*以下を繰り返す*/
p = fgets(data,1024,fp); /*1行 読み込む*/
if (p==NULL) break; /* ファイルの終端に達して、もうデータがないなら 繰り返しを抜ける*/
ctr++; /*読み込み件数に1加算する。*/
}
fclose(fp); /*ファイルをクローズ*/
printf("record count=%d\n",ctr); /*読み込み件数を表示*/
return 0; /* 正常なのでreturn 0*/
}
    • good
    • 0
この回答へのお礼

すみません。3つほど質問があって、①FILE fpと、②char ✴︎p の、✴︎はどういう意味なのでしょうか?後、
③sample.txt の例です。
This is a pen.
I have a book.
Are you ready?
はどういう事なのでしょうか?

お礼日時:2023/11/09 22:15

>では、なぜ、今回組んだプログラム(goo1.c)で、return1を使わなかったのでしょうか?



エラーになるケースがなかったからです。
(厳密にいえばエラーになるケースはあるかもしれないが、通常は考えなくて良いからです)


>それと、return 1を使う例を簡単なプログラムで例を挙げて頂けると幸いです。

以下のようなプログラムです。
ファイル名:smaple.txtを読み込み、その行数を画面に表示します。

#include <stdio.h>

int main(void)
{
FILE *fp;
char data[1024];
char *p;
int ctr = 0;
fp = fopen("sample.txt", "r");
if (fp == NULL){
printf("file open error\n");
return 1;
}
while(1){
p = fgets(data,1024,fp);
if (p==NULL) break;
ctr++;
}
fclose(fp);
printf("record count=%d\n",ctr);
return 0;
}

----------------------------------
sample.txtを同じフォルダにおいて、実行してください。
その行数を表示します。

sample.txtの例です。
This is a pen.
I have a book.
Are you ready?

sample.txtがないと、エラー表示し、return 1;を実行します。
実際にコンパイル&実行して確認してください。
ソースファイル名はgoo2.cとしてください。
    • good
    • 1
この回答へのお礼

このプログラムの関数の解説と、sample.txtの例です。の所が分かりません。教えて頂けると幸いです。

お礼日時:2023/11/09 17:39

>つまり、デバッグ作業のときにreturn0とreturn 1を1つのプログラムで、使うことはあるのでしょうか?教えて頂けると幸いです。



あります。デバッグ作業でも本番でも、使います。
    • good
    • 0
この回答へのお礼

では、なぜ、今回組んだプログラム(goo1.c)で、return1を使わなかったのでしょうか?プログラムが短かったからでしょうか?教えて頂けると幸いです。それと、return 1を使う例を簡単なプログラムで例を挙げて頂けると幸いです。

お礼日時:2023/11/08 22:53

>処理の途中で、異常を検知し、最後まで実行せず、途中でreturnするときに、0以外でreturnします。

というのは、言い換えれば、デバッグ作業をするときにということでしょうか?

デバッグ時には、わざとエラーが発生するようにして、試験するので、
そのようになります。
但し、本番(実際の運用時)でも、発生する可能性はあるので、
ソースは、そのままにしておきます。
(デバッグが終わったからといって、途中でreturnする行を削除することはありません)
    • good
    • 0
この回答へのお礼

つまり、デバッグ作業のときにreturn0とreturn 1を1つのプログラムで、使うことはあるのでしょうか?教えて頂けると幸いです。

お礼日時:2023/11/08 20:33

>①returnの所で、return1とすることは、無いですよね?



下記の続きでしょうか。
>①return 0は、0=成功、1=失敗の、0でしょうか?

それであれば、return 1;とすることはありません。
処理の途中で、異常を検知し、最後まで実行せず、途中でreturn するときに、0以外でreturn します。(return 1,return 2等)

厳密にいえば、いくつの値で、returnするかは、そのプログラムを作成した人の決め事なので、自由に決めて構いません。
俺は、return 1;が正常で、return 0;が異常にしたいといえば、それで構いません。但し、ほかの方からひんしゅくを買いますが。
それは、変数に名前を付ける時に
男の人数ならint man_count; とし
女の人数ならint woman_count; とするのが普通ですが、
これを
男の人数ならint woman_count; とし
女の人数ならint man_count; としても、プログラムは動作します。
ただし、そのようなプログラムは誤解を招くので、通常はそのようにはしません。
それと同じ理由で、通常は、正常終了時、 return 0;とします。
    • good
    • 0
この回答へのお礼

処理の途中で、異常を検知し、最後まで実行せず、途中でreturnするときに、0以外でreturnします。というのは、言い換えれば、デバッグ作業をするときにということでしょうか?教えて頂けると幸いです。

お礼日時:2023/11/08 19:23

>その関数(サブルーチン)の知識を十分に身につけるためには、どのような本を読めば良いのでしょうか?



苦しんで覚えるC言語(下記URL)
https://9cguide.appspot.com/index.html

11章:関数の作り方
練習問題11
を一通りやって理解してください。
    • good
    • 0
この回答へのお礼

迅速な回答大変恐縮です。ちなみに、①returnの所で、return1とすることは、無いですよね?教えて頂けると幸いです。

お礼日時:2023/11/08 18:22

>①return 0は、0=成功、1=失敗の、0でしょうか?


はい。その意味で使っています。

>②printfで、/nを使っていますが、なぜ、sprintfで、/nは間違いだと言ったのでしょうか?
説明上の都合です。
sprintf(data,"number=%d\n", num);
とした場合は、dataの内容は
data[0]='n'
data[1]='u'
data[2]='m'
data[3]='b'
data[4]='e'
data[5]='r'
data[6]='\n'
data[7]='\0'
となります。
\nがない方が、わかりやすいかと思い、\nをとりました。
\nをつけても、C言語上は、全く問題ありません。

>③vsprintfは、sprintfや printfなどの関数と何が違うのでしょうか?
vsprintfはvprintfの変数へ出力するバージョンです。
printfとvprintfは画面に出力
sprintfとvsprintfは変数に出力
になります。

printfとvprintfの違いが判れば、sprintfとvsprinfの違いも分かるかと思います。
現時点で、vprintfの機能について説明するのは難しいので、説明は省かせてください。「可変長引数に対応するprintf機能を実現するためのもの」
というのが、回答ですが、これでは、なんのことかわからないと思います。
あなたが、関数(サブルーチン)について、十分な知識がついたときに、
機会があれば説明しますので、そのことだけを覚えておいてください。
関数(サブルーチン)について十分な知識がついたら、gooで質問してください。その時に、質問が目に付けば、回答します。
使用例としては
https://www.ibm.com/docs/ja/zos/2.3.0?topic=func …
に例があります。
只、使う機会は、めったにないので、今は、覚える必要はないかと思います。スキルとしては中級者以上で使用する関数です。
    • good
    • 0
この回答へのお礼

その関数(サブルーチン)の知識を十分に身につけるためには、どのような本を読めば良いのでしょうか?教えて頂けると幸いです。教えて頂けると幸いです。

お礼日時:2023/11/08 14:16
1  2  3  4 次の回答→

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A