天国にいけるC言語入門 ヘキサ構造体 ver5.2130
if(fp=NULL)の代わりにif(fp!=NULL)と記述してみましょう。fp=NULLの=は代入演算子ですがfp!=NULLの!=は関係演算子です。ですので!=は=の否定形ではありません
if(fp=NULL)の代わりにif(fp!=NULL)と記述してみましょう。fp=NULLの=は代入演算子ですがfp!=NULLの!=は関係演算子です。ですので!=は=の否定形ではありません
🌳🌳🌳
ファイルがきちんと開かれているかどうかを
確認するプログラムは
次のようなものでした。
次のプログラムでは
オープンモード"r"で
ハードディスクのTEN-GOGO-C-language.txtファイルを
開こうとしています。
#pragma warning(disable: 4996)
#include <stdio.h>
int main (void){
FILE *fp;
fp=fopen("TEN-GOGO-C-language.txt","r");
if(fp==NULL){
printf("ファイルオープンに失敗しましたよ~ん\n");
return -1;}
else printf("Hello!ファイルオープンに成功しましたよ~ん\n");
fclose(fp);
return 0;
}
コンパイル結果
EAZY IDECの場合
Hello!ファイルオープンに成功しましたよ~ん
Visual Studioの場合
Hello!ファイルオープンに成功しましたよ~ん
ここで
if(fp==NULL)の部分を
if(fp=NULL)としてはいけなかったのですね
ところで
このプログラムは
次のプログラムのように
if(fp==NULL){
printf("ファイルオープンに失敗しましたよ~ん\n");
return -1;}
else printf("Hello!ファイルオープンに成功しましたよ~ん\n");
の部分を
if(fp!=NULL)を使って
if(fp!=NULL){
printf("Hello!ファイルオープンに成功しましたよ~ん\n");
}
else {printf("ファイルオープンに失敗しましたよ~ん\n");
return -1;}
とかきかえることができます
#pragma warning(disable: 4996)
#include <stdio.h>
int main (void){
FILE *fp;
fp=fopen("TEN-GOGO-C-language.txt","r");
if(fp!=NULL){
printf("Hello!ファイルオープンに成功しましたよ~ん\n");
}
else {printf("ファイルオープンに失敗しましたよ~ん\n");
return -1;}
fclose(fp);
return 0;
}
コンパイル結果
EAZY IDECの場合
Hello!ファイルオープンに成功しましたよ~ん
Visual Studioの場合
Hello!ファイルオープンに成功しましたよ~ん
このプログラムの中の命令文
ファイルポインタ変数宣言とfopen関数の設定
FILE *fp;
fp=fopen("TEN-GOGO-C-language.txt","w");
が
実行された際
TEN-GOGO-C-language.txtファイルを開くのに失敗すれば
fopen関数は
戻り値NULLを返され
ファイルを開くのに成功すれば
fopen関数は
戻り値NULL以外の値を返されるよう設定されています。
ですので
ファイルオープンに成功すると
fpはNULL以外の値をもつようになり
プログラム内のif文
if(fp!=NULL){
printf("Hello!ファイルオープンに成功しましたよ~ん\n");
}
else {printf("ファイルオープンに失敗しましたよ~ん\n");
return -1;}
の
if()内の条件式(論理式)でfp!=NULLが成立するので
if(fp!=NULL)につづく命令文
printf("Hello!ファイルオープンに成功しましたよ~ん\n");
が実行され
コマンドプロンプト画面に
Hello!ファイルオープンに成功しましたよ~ん
が表示されます。
このとき
if(fp!=NULL)の!=は
関係演算子とよばれています
論理式
fp!=NULLの
左辺と右辺が等しい値をもたないときは
論理式fp!=NULLは
(fp!=NULL)=1
のように
真の値1をもつようになり
論理式
fp!=NULLの
左辺と右辺が等しい値をもつときは
論理式fp!=NULLは
(fp!=NULL)=0
のように
偽の値0をもつようになります
もう1つ例をご紹介いたしますと
論理式
a!=1
は変数aが1の値を格納しているとき
左辺と右辺が等しい値をもつので
論理式
a!=1
(a!=1)=0
のように
偽の値0をもつようになります
論理式
a!=1
は変数aが1の値を格納していないとき
左辺と右辺が等しい値をもたないので
論理式
a!=1
(a!=1)=1
のように
真の値0をもつようになります
ここで
if(fp==NULL)の
==は関係演算子と呼ばれ
a==1のような
論理式を形成します
論理式a==1は
変数aが1の値をもつとき
真となり
(a==1)=1
のように
1の値を持ち
変数aが1以外の値をもつとき
偽となり
(a==1)=0
のように
0の値を持ちます
ちょうど
論理式
a==1
と
論理式
a!=1
は
aの格納している値に対して
反対の値をもつのがわかります。
a!=1の
!=
は関係演算子であるのに対し
a=1の=は代入演算子と呼ばれ
変数aに1を代入し
変数aの格納している値を1にする働きがあります。
a=1も
一応論理式として
変数aが1の値をもつとき
真となり
論理式(a=1)は1の値を持ち
変数aが1以外の値をもつとき
偽となり
論理式(a=1)は0の値を持つのですが
a=1を論理式として使うと
プログラムを実行できない場合があります
ですから
fp!=NULLをもちいずに
if文を構成したいなら
代入演算子をもちいた
fp=NULLでなく
同じ関係演算子である==をつかって
fp==NULLを
もちいたほうがよいというわけです。
🌳🌳🌳
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます