至急お願いします。
期末試験の過去問からの質問です。
名前と3科目の点数を読み込むプログラムを作っています。
以下のプログラムでデバッグしたところ、配列またはポインタでない変数に添字が使われましたというエラーが出ます。
これの原因が分かりません。
C言語については基本的なことも理解できてないです。
また、パソコン自体も全く使いこなせません。
そのため、申し訳ありませんが、フォーラムルールを読んでも、codeの使い方が理解できなかったため、そのまま貼り付けさせていただきます。
#include<stdio.h>
#define NUM 6
#define CNUM 20
typedef struct exam {
char name[CNUM];
int score;
int sum;
}exam;
int read(exam data[NUM]) {
FILE *fp;
int i, j;
fp = fopen("test.txt", "r");
if (fp = NULL) {
printf("ファイルをオープンできませんでした\n");
return 1;
}
for (i = 0; i < NUM; i++) {
exam;
data[i].sum = 0;
for (j = 0; j < 3; j++) {
fscanf(fp,"%s",data[i].name[i]);
fscanf(fp,"%d",&data[i].score[i]);
}
}
fclose(fp);
return 0;
}
void sort(exam data[NUM]) {
exam tmp;
int i, j;
for (i = 0; i < NUM - 1; i++) {
for (j = 0; j<NUM - 1;j++) {
if (data[j].score>data[j + 1].score) {
tmp = data[j];
data[j] = data[j + 1];
data[j + 1] = tmp;
}
}
}
}
int main(void) {
int i;
int res;
exam data[NUM];
res = read(data);
if(res==1)
{
return 1;
}
sort(data);
for (i = 0; i < NUM; i++) {
printf("%d番 : %s %d点\n",i+1,data[i].name,data[i].sum);
}
getchar();
getchar();
return 0;
}
読み取りファイル test.txt
ames 67 87 97
tom 65 54 87
jane 98 67 87
judy 87 65 95
gerorge 76 77 78
emily 78 98 76
期末試験
Re: 期末試験
そのまんま、配列またはポインタでない変数に添字が使われたからでしょう。0137 さんが書きました:以下のプログラムでデバッグしたところ、配列またはポインタでない変数に添字が使われましたというエラーが出ます。
まちがい 改善案 また、これを直しても他にもこのような警告が出て、実行するとSegmentation Faultになりました。
原因はNULLをfscanfの第一引数に渡したことでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 期末試験
直してみましたが、次にこのエラーが出ました。
重大度レベル コード 説明 プロジェクト ファイル 行
エラー C4996 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. rem c:\users\nec-pcuser\documents\visual studio 2015\projects\rem\rem\document.cpp 17
これの原因は何ですか?
重大度レベル コード 説明 プロジェクト ファイル 行
エラー C4996 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. rem c:\users\nec-pcuser\documents\visual studio 2015\projects\rem\rem\document.cpp 17
これの原因は何ですか?
Re: 期末試験
コンパイラの不都合ですね。0137 さんが書きました:直してみましたが、次にこのエラーが出ました。
(略)
これの原因は何ですか?
GCCや学習用C言語開発環境など、デフォルトでC言語の標準ライブラリに対応しているコンパイラを使用することをおすすめします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 期末試験
0137 さんが書きました:これの原因は何ですか?
この関数や変数が安全でない可能性があります。代わりにfopen_sを使用することを検討してください。
非推奨を無効にするには、_CRT_SECURE_NO_WARNINGSを使用します。
google翻訳より
オフトピック
あれ、この感じ前にも…
百聞は~
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 14年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 期末試験
codeタグの使い方をフォーラムルールを読んでも分からないということはありえないと思います。
よく読んでください。
フォーラムルールに行かなくても投稿する際赤矩形内にやり方が表示されています。
よく読んでください。
フォーラムルールに行かなくても投稿する際赤矩形内にやり方が表示されています。