
Visial C++ 2008を使用したプログラミングについてです。
学校の課題をやるためやむなくVisial C++2008を使用していて
学校では実行が出来たのに家では出来ませんでした。
ソースファイルは以下のとおりです。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*構造体宣言*/
struct Students{
int N;
int A;
int B;
int C;
};
int main(void){
struct Students std[50]; /*構造体型配列*/
int i,N,A,B,C,num,scannum;
srand((unsigned)time(NULL)); /*乱数の初期化*/
FILE *file; /*ファイルのポインタを用意*/
file=fopen("Data.txt","r"); /*Dataファイルの読み込み*/
/*ファイルのオープンチェック*/
if(file==NULL){
fprintf(stderr,"cannnot open file 'Data.txt'\n");
exit(1);
}
/*Studentsにデータを格納*/
for(i=0;i<=49;i++){
fscanf(file,"%d%d%d",&N,&A,&B);
std[i].N=N;
std[i].A=A;
std[i].B=B;
std[i].C=70+(rand()/(RAND_MAX+1.0)*31);
/*表示*/
printf("学籍番号:%d.",std[i].N);
printf("科目A:%d.\n",std[i].A);
printf("科目B:%d.\n",std[i].B);
printf("科目C:%d.\n",std[i].C);
}
fclose(file);
return 0;
}
エラーとしては
1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(21) : error C2275: 'FILE' : この型は演算子として使用できません
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(69) : 'FILE' の宣言を確認してください。
1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(21) : error C2065: 'file' : 定義されていない識別子です。
1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(23) : error C2065: 'file' : 定義されていない識別子です。
1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(23) : warning C4047: '=' : 間接参照のレベルが 'int' と 'FILE *' で異なっています。
1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(26) : error C2065: 'file' : 定義されていない識別子です。
1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(26) : warning C4047: '==' : 間接参照のレベルが 'int' と 'void *' で異なっています。
1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(32) : error C2065: 'file' : 定義されていない識別子です。
1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(32) : warning C4047: '関数' : 間接参照のレベルが 'FILE *' と 'int' で異なっています。
1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(32) : warning C4024: 'fscanf' : の型が 1 の仮引数および実引数と異なります。
1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(36) : warning C4244: '=' : 'double' から 'int' への変換です。データが失われる可能性があります。
1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(45) : error C2065: 'file' : 定義されていない識別子です。
1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(45) : warning C4047: '関数' : 間接参照のレベルが 'FILE *' と 'int' で異なっています。
1>c:\documents and settings\devil\my documents\visual studio 2008\projects\テスト\テスト\tt.c(45) : warning C4024: 'fclose' : の型が 1 の仮引数および実引数と異なります。
1>ビルドログは "file://c:\Documents and Settings\devil\My Documents\Visual Studio 2008\Projects\テスト\テスト\Debug\BuildLog.htm" に保存されました。
と表示されます。FILEの宣言をしているのになんで確認してください
と出るのでしょうか。。。。解決にご協力お願いします。m(__)m
No.1ベストアンサー
- 回答日時:
こんばんは。
VC++6.0の*.Cファイルにて確認してみました。
一応コンパイルは通りました。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*構造体宣言*/
struct Students{
int N;
int A;
int B;
int C;
};
int main(void){
/*stdという名前が衝突しているので名前変更*/
struct Students arr[50]; /*構造体型配列*/
int i,N,A,B,C,num,scannum;
/*fileの宣言が処理の下にかかれていたので上に持ってきた*/
FILE *file; /*ファイルのポインタを用意*/
srand((unsigned)time(NULL)); /*乱数の初期化*/
file=fopen("Data.txt","r"); /*Dataファイルの読み込み*/
/*ファイルのオープンチェック*/
if(file==NULL){
fprintf(stderr,"cannnot open file 'Data.txt'\n");
exit(1);
}
/*Studentsにデータを格納*/
for(i=0;i<=49;i++){
fscanf(file,"%d%d%d",&N,&A,&B);
arr[i].N=N;
arr[i].A=A;
arr[i].B=B;
arr[i].C=70+(rand()/(RAND_MAX+1.0)*31);
/*表示*/
printf("学籍番号:%d.",arr[i].N);
printf("科目A:%d.\n",arr[i].A);
printf("科目B:%d.\n",arr[i].B);
printf("科目C:%d.\n",arr[i].C);
}
fclose(file);
return 0;
}
詳細をありがとうございます。php504さんのアドバイスのとおり
宣言と乱数の初期化が反対になっていたのが原因だったんですね。。
学校のPCではうまく実行できたのにVisial C++で出来なかったので
別の問題かと思ってしまいました。親切にありがとうございました。
m(__)m
No.2
- 回答日時:
Cでは変数の宣言を最初にしないといけません
srand((unsigned)time(NULL)); /*乱数の初期化*/
FILE *file; /*ファイルのポインタを用意*/
を入れ替えて
FILE *file; /*ファイルのポインタを用意*/
srand((unsigned)time(NULL)); /*乱数の初期化*/
にしてみてください
回答ありがとうございます。入れ替えた結果望ましい実行結果が
出ました。このミスには気をつけないといけませんね^^;
ご教授ありがとうございました。m(__)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
texに関する初歩的な質問
-
Visial C++におけるプログラミング
-
C#単体テストで同クラス内の呼...
-
VB6 コードでメニュー作成
-
納品 vs ご納品 どちらが正し...
-
Windows server 2022 CALとSQL ...
-
テキストファイル内の外字の有無
-
「スポット受注」はどういう意...
-
営業職をやってます。先月発注...
-
三菱製PLC:ファイルレジスタ(...
-
契約期間内における値上げ等に...
-
印刷会社がミスプリント。その...
-
システムを作るにあたり、SQLSe...
-
三菱シーケンサーA1SHCPUとA1SJ...
-
Zと2とか紛らわしいのがあるか...
-
Excel VBA(マクロ)処理...
-
テストについて
-
納入日と納品日について
-
プログラム修正の際に古いソー...
-
電子納品 CDへの捺印について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
texに関する初歩的な質問
-
C#の単体テストでローカル変数...
-
VBからBeckyを使用したメール送...
-
テスト仕様書作成って初心者(...
-
JUnit結果出力をファイルに書き...
-
Excel-VBA コンテンツの作成日時
-
プログラマに渡すテスト結果に...
-
「クィエックメニュー」って、...
-
プログラムを実際に実行したと...
-
ホームページ・ビルダーで「e...
-
仕様書に書かれていないこと
-
単体テストについて
-
ソフト開発に関する仕様書の書...
-
テストオペレーターとして採用...
-
納品の定義,システムの動作の常...
-
単体テストについて
-
メッセージボックスのタイトル設定
-
VBで画像から線で囲まれた場所...
-
マーキーが表示されない
-
C#単体テストで同クラス内の呼...
おすすめ情報