
最近C言語を勉強を始めまして、参考書に載っていた以下のソースプログラムをvisualC++2010に打ち込んだのですがビルドが成功しません
#include <stdio.h>
#include <math.h>
int main(void)
{
int d[33];
double m,v,s;
int n=33;
int i;
double sum;
printf("データを%d個入力してください\n",n);
for(i=0;i<n;i++)
{
printf("date %d=",i+1);
scanf_s("%d",&d[i]);
}
for(sum=0.0,i=0;i<n;i++)
{
sum+=d[i];
}
m=sum/n;
for(sum=0.0,i=0;i<n;i++)
{
sum+=(d[i]-m)*(d[i]-m);
}
v=sum/n;
s=sqrt(v);
printf("平均=%10.3f\n",m);
printf("分数=%10.3f\n",v);
printf("標準偏差=%10.3f\n",s);
return 0;
}
エラーメッセージは
・'scanf' の宣言を確認してください。
・(11): warning C4566: ユニバーサル文字名 '\u00A5' によって表示されている文字は、現在のコード ページ (932) で表示できません
・(14): warning C4566: ユニバーサル文字名 '\u00A5' によって表示されている文字は、現在のコード ページ (932) で表示できません
・(14): error C2065: 'i1' : 定義されていない識別子です。
と出るのですがさっぱりわかりません。どなたか教えてください。
No.2
- 回答日時:
そのエラーになったプログラムをそのまま貼り付けてないのでは?サンプルの方を貼り付けたとか、サンプル見ながら入力しなおした、とか
エラーがあると報告されている行数と、おそらくのそれが出ているであろう行が一致してません。
正しい情報が無ければ、こちらでは判断できません。
エラーメッセージの読み方はわかりますか?
()の中がエラーのある行数、errorはビルドに致命的な「エラー」、warning はビルドはできるけども、場合によっては実行時に問題になる「警告」、その後のC???はエラー番号で、これで検索するとある程度の解説が見付かる。その後は簡単にエラー/警告の内容を説明しているものです。
> ・(14): error C2065: 'i1' : 定義されていない識別子です。
メッセージの通り、定義されていない識別子(変数とか定数とか関数とか) i1 が使われている、というものですが、このプログラム中にどこにも i1 なんて書いてありません。
おそらく
printf("date %d=",i+1);
が
printf("date %d=",i1);
となっているのでは?
/* あと、細かいことを言えば「data」ですね */
> ・'scanf' の宣言を確認してください。
scanfはどこで使っているのでしょう?エラーメッセージはもうすこし長くなかったですか?
> ・(11): warning C4566: ユニバーサル文字名 '\u00A5' によって表示されている文字は、現在のコード ページ (932) で表示できません
ちょっと根が深い問題です。
nの前の\は実際にはどう表示されていますか?
/を反対にしたような記号(バックスラッシュ)でしょうか?円記号でしょうか?
なんにせよ、一度消して、キーボードの円記号のキーを入力しなおしてください。
この回答への補足
新しくプロジェクトを作って以下のように入力してみたら警告がでましたが、実行できました
#include <stdio.h>
#include <math.h>
int main(void)
{
int d[33];
double m,v,s;
int n=33;
int i;
double sum;
printf("データを%d個入力してください\n",n);
for(i=0;i<n;i++)
{
printf("data%d=",i+1);
scanf("%d",&d[i]);
}
for(sum=0.0,i=0;i<n;i++)
{
sum+=d[i];
}
m=sum/n;
for(sum=0.0,i=0;i<n;i++)
{
sum+=(d[i]-m)*(d[i]-m);
}
v=sum/n;
s=sqrt(v);
printf("平均=%10.3f\n",m);
printf("分散=%10.3f\n",v);
printf("標準偏差=%10.3f\n",s);
return 0;
}
コピペしたので、そのままです。nの前\は円マークです。
エラーメッセージは
.cpp(16): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304) : 'scanf' の宣言を確認してください。
とでました。
No.1
- 回答日時:
貼り付けられているソースをVS2008のVC++でコンパイルすると、コンパイルは通りましたね。
なので、ここにあるソースは、問題ないようですね。
原因は
>>printf("データを%d個入力してください\n",n);
の"\"がうまくユニコードに変換されないため、
>>・(11): warning C4566: ユニバーサル文字名 '\u00A5' によって表示されている文字は、現在のコード ページ (932) で表示できません
のエラーになったように思えます。
とりあえず、漢字メッセージを漢字以外のアルファベット表示に変えてみるとコンパイルエラーは無くなると思います。
なかなかユニコード変換が絡むと、よくわからないエラー状況になりますね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
HEWを使用しているのですが、こ...
-
バッチからsqlplusの接続エラー...
-
VBAでファイルを開くプログラム...
-
デバッグ中のエラーのことで教...
-
RightとLeft関数のライブ...
-
Visual Studioのstrcpy_sについて
-
VC++のエラー(初回の例外)の原...
-
ccコマンド時の0711-317エラー
-
sys/time.hのインクルードがで...
-
BC30002: 型 'ListItem' が定義...
-
エラー 'iostream.h' : No su...
-
適切な変換関数が存在しない???
-
ハンドルされていない例外が発生?
-
vbaのインポートでエラー
-
プログラムが落ちる。
-
atlstr.hのインクルードによる...
-
VBScriptによるExecuteExcel4Ma...
-
fortranでプログラムを実行する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
Excelのエラーで困ってます。
-
fortranでプログラムを実行する...
-
適切な変換関数が存在しない???
-
バッチからsqlplusの接続エラー...
-
ビルド失敗 指定されたファイ...
-
デバッグ中のエラーのことで教...
-
sys/time.hのインクルードがで...
-
visual C++ でビルドの中止がで...
-
BC30002: 型 'ListItem' が定義...
-
VB2008で定数に色の設定をした...
-
コンパイルできません。
-
HEWを使用しているのですが、こ...
-
Arduinoに関する質問
-
Visual Studioのstrcpy_sについて
-
RightとLeft関数のライブ...
-
左側がクラス、構造体、共用体...
-
Handlesについて
-
DLL関数を使ったプログラム
おすすめ情報