質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

1回答

987閲覧

C言語 警告文:安全でない演算 アドレス帳のような機能を作っています。

madanai

総合スコア5

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2020/07/22 04:58

アドレス帳のような機能を作成しています。
[編集]:2を選択すると動作が止まります。
while ( ( ch == fgetc ( fp ) ) != EOF )の部分で、
「'!='安全でない演算:'bool'型から'int'型への上位変換を行うと与えられた定数に等しくなりません」という警告が出ます。

なぜ警告が出るのか、そもそもこの警告がどういう意味なのかもよくわからず
お力添え願いたいです。

プログラミング歴2週間程です。

C言語

1#include <stdio.h> 2 3int profile_edit ( int , char [ 256 ] ); 4 5struct profile { /* プロフィール構造体 */ 6 char name [ 256 ]; /* 氏名 */ 7 char code [ 256 ]; /* 郵便番号 */ 8 char add [ 256 ]; /* 住所 */ 9 char tel [ 256 ]; /* 電話番号 */ 10 char mail [ 256 ]; /* メールアドレス */ 11}prof; 12FILE* fp; 13FILE* fp2; 14 15int main ( ) 16{ 17 char file_in [ 256 ]; 18 int num = 0; 19 int end = 0; 20 21 printf ( "【アドレス帳】\n" ); 22 do { 23 printf ( "\nアドレスの\n\t[登録]:1\t[編集]:2\n\t[削除]:3\t[参照]:4\t数字を入力:" ); 24 scanf_s ( "%d" , &num ); 25 if ( num == 1 ) { /* 1の場合 */ 26 fopen_s ( &fp , "mail.txt" , "a" ); 27 if ( fp == NULL ) { 28 return 0; 29 } 30 printf ( "氏名     :" ); 31 scanf_s ( "%s" , prof.name , 255 ); 32 printf ( "郵便番号   :" ); 33 scanf_s ( "%s" , prof.code , 255 ); 34 printf ( "住所     :" ); 35 scanf_s ( "%s" , prof.add , 255 ); 36 printf ( "電話番号   :" ); 37 scanf_s ( "%s" , prof.tel , 255 ); 38 printf ( "E-mailアドレス:" ); 39 scanf_s ( "%s" , prof.mail , 255 ); 40 fputs ( prof.name , fp ); 41 fputs ( "\n" , fp ); 42 fputs ( prof.code , fp ); 43 fputs ( "\n" , fp ); 44 fputs ( prof.add , fp ); 45 fputs ( "\n" , fp ); 46 fputs ( prof.tel , fp ); 47 fputs ( "\n" , fp ); 48 fputs ( prof.mail , fp ); 49 fputs ( "\n" , fp ); 50 fclose ( fp ); 51 } 52 else if ( num == 2 ) { /* 2の場合 */ 53 fopen_s ( &fp2 , "mail2.txt" , "a" ); 54 if ( fp2 == NULL ) { 55 printf ( "\n編集ができません。\n" ); 56 break; 57 } 58 fopen_s ( &fp , "mail.txt" , "r" ); 59 if ( fp == NULL ) { 60 printf ( "\n連絡先が見つかりません。\n" ); 61 break; 62 } 63 int edit = 0; /* 編集番号を受け取る */ 64 int a = 0; /* profile_edit関数の引数を受け取る */ 65 char newdata [ 256 ]; 66 printf ( "どの項目を編集しますか?\n\t[氏名]:1\t[郵便番号]:2\n\t[住所]:3\t[電話番号]:4\n\t[E-mailアドレス]:5\t\t数字を入力:" ); 67 scanf_s ( "%d" , &edit ); 68 printf ( "新しい情報を入力してください。\n\t:" ); 69 scanf_s ( "%s" , newdata , 255 ); 70 71 profile_edit ( edit , newdata ); 72 if ( a = profile_edit ( edit , newdata ) == 0 ){ 73 printf ( "新しい情報に書き換えられました。\n" ); 74 } 75 else { 76 printf ( "編集に失敗しました。\n" ); 77 break; 78 } 79 80 fclose ( fp ); 81 fclose ( fp2 ); 82 83 } 84 85 else if ( num == 3 ) { /* 3の場合 */ 86 87 if ( remove ( "mail.txt" ) == 0 ) { 88 printf ( "\n連絡先を削除しました。\n" ); 89 } 90 else { 91 printf ( "\n連絡先の削除に失敗しました。\n" ); 92 } 93 } 94 else if ( num == 4 ) { /* 4の場合 */ 95 fopen_s ( &fp , "mail.txt" , "r" ); 96 if ( fp == NULL ) { 97 printf ( "\n連絡先が見つかりません。\n" ); 98 do { 99 printf ( "\n続けますか?[はい]:1 [いいえ]:2\t数字を入力:" ); 100 scanf_s ( "%d" , &end ); 101 } while ( ( end != 1 ) && ( end != 2 ) ); 102 if ( end == 2 ) { 103 return 0; 104 } 105 else { 106 continue; 107 } 108 } 109 while ( 1 ) { 110 fgets ( file_in , 255 , fp ); 111 if ( feof ( fp ) ) { 112 break; 113 } 114 printf ( "%s" , file_in ); 115 } 116 fclose ( fp ); 117 } 118 else { 119 printf ( "1~4の数字を入力し直してください。" ); 120 continue; 121 } 122 123 do { 124 printf ( "\n続けますか?[はい]:1 [いいえ]:2\t数字を入力:" ); 125 scanf_s ( "%d" , &end ); 126 } while ( ( end != 1 ) && ( end != 2 ) ); 127 if ( end == 2 ) { 128 break; 129 } 130 } while ( end == 1 ); 131 132 return 0; 133} 134 135//profile_edit関数 136int profile_edit ( int row , char str [ 256 ] ) 137{ 138 int ch = 0; 139 int nr = 0; 140 int nc = 0; 141 142 while ( ( ch == fgetc ( fp ) ) != EOF ) { 143 fputc ( ch , fp2 ); 144 if ( ch == '\n' ){ 145 nr++; 146 } 147 if ( nr == row - 1 ) { 148 nc++; 149 } 150 if ( nc == 8 ) { 151 fputs ( str , fp2 ); 152 fputc ( '\0\n' , fp2 ); 153 nr++; 154 nc++; 155 } 156 157 } 158 return 0; 159}

visual studio

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

なぜ警告が出るのか

ch == fgetc ( fp )という比較の結果はbool型です。

おそらく、ch = fgetc ( fp )と代入したかったのではないでしょうか?

投稿2020/07/22 05:06

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

madanai

2020/07/22 05:36

本当ですね...!直したら動くようになりました。 警告の意味も理解できました。 お早い回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問