• 締切済み

プログラミング<暗号入力プログラム>について

はじめまして。よろしくお願いします。 現在、大学でプログラミングを習っているhayato2192といいます。 この間、ファイルを開くプログラムというのを習ったのですが、 そのプログラムを利用して何かほかのプログラムが作りたいなぁと思い、 暗号入力するとファイルが開く というプログラムをつくったのですが、 コンパイルはできても一向にファイルが開けないので、 コードをどうかえればいいか、というのを教えてください。 よろしくお願いします。 ちなみに、暗号は文字列が良いです。 コードは以下です ******************************** #include <stdio.h> int main(void) { FILE*fp; char i; int c; printf("START PROGRAM * FP\n"); printf("YOU SHOULD INPUT COAD\n"); scanf(" %s", i); if(i == "fileopen"); { if((fp = fopen("\\PROGRAM\\0123456789100.txt", "r")) == NULL) { printf("YOU CAN'T OPEN"); return 1; } while((c = fgetc(fp)) != EOF) { printf(" %c", c); } } else { printf("YOU CAN'T OPEN"); return 2; } fclose(fp); return 0; } ******************************** オープンするファイルはそんな結滞なもんじゃありません。 よろしくお願いします ただのテキストファイルです。

みんなの回答

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

とりあえず、環境は書かれた方がよろしいかと。 WindowsなのかLinuxなどのPC-UNIX系なのかどうかも不明です。 >char i; >scanf(" %s", i); 文字型のiに「文字列」は入れられません。 iを配列にすることで確保した文字数までの文字列を格納することができます。 配列にはなってないため、scanf()の第2引数もおかしいです。 # 配列ならば変数名だけで配列の先頭のアドレスを渡せますが、配列になっていない場合、その変数の中身を渡します。 ということで、scanf()で入力した時点でセグメンテーション違反(またはアクセス違反)で落ちる可能性があります。 >if(i == "fileopen"); C言語ではこのような文字列比較はできません。 iが配列だった場合、上記の条件式は… iの配列の先頭アドレスと(おそらく)データ領域に格納されている"fileopen"の先頭アドレスとの比較を行います。 そして、その結果は必ず偽となります。 C言語の書式としては間違いではありませんのでコンパイルエラーにはなりません。 iが配列でない場合は…iの値(charなので0x00~0xffのいずれか)と(おそらく)データ領域に格納されている"fileopen"の先頭アドレスとの比較を行います。 やはりこちらも偽…でしょう。 さらに、このif文の判定結果は以下の動作に影響を与えません。 セミコロンで終わっているため真だった場合には空文が実行されるだけとなります。 というワケで唯一あるelseは対になるif文が存在しないためコンパイルエラーになります。

関連するQ&A