C言語関係掲示板

過去ログ

No.10. DebugError!(VC++ %lgの問題)


データ数を入力してから
データXとデータYを入力するプログラムを作ったのですが、
「文字列0×**は認識されません」というようなエラーが
出ます。以下がコードですが、どこがまずいのでしょうか?
長くて恐縮です。

#include<stdio.h>
#include<process.h>
int main()
{
int kaz ;
int n = -1;
double datax[100];
double datay[100];

printf("データ数を入力してください。 (^^) \n");
scanf("%d" , &kaz); //データ数入力

while(1){
n = n + 1 ;
printf("データX[%d]?\n" , n + 1);
scanf("%lg", &datax[n]); //データXの入力

if(n == kaz - 1)  //データX入力終了の条件
{
n = -1;
while(1) //データY入力のループ
{
n = n + 1;
printf("データY[%d]?\n" , n + 1);
scanf("%lg", &datay[n]);
if (n == kaz - 1) //データY入力終了の条件
   {
    printf("ByeBye!\n") ;
 exit(0) ;
   }
}

}

}

return 0;
}


補足:性格には
「文字'0×81'は認識できません。」
「文字'0×40'は認識できません。」
というエラーが出ます。よろしくお願いいたします。m(--)m


全角のスペースが入っているようです。

0x8140は全角のスペースのコードです。どこかに、全角のスペースが入って
いるのでしょう。
ところで、while(1)を多用すると、プログラムの流れがわかりづらくなります。
あの処理は、n<kaz を継続条件にした方がすっきりすると思います。

#include<stdio.h>
#include<process.h>

int main(void)
{
int kaz ;
int n = 0;
double datax[100];
double datay[100];

printf("データ数を入力してください。 (^^) \n");
scanf("%d" , &kaz); //データ数入力

for (n=0; n<kaz; n++){
printf("データX[%d]?\n" , n + 1);
scanf("%lg", &datax[n]); //データXの入力
}

for (n=0; n<kaz; n++){
printf("データY[%d]?\n" , n + 1);
scanf("%lg", &datay[n]); //データYの入力
}

printf("ByeBye!\n") ;

return 0;
}


お返事ありがとうございました。
ともじ先生のコードでビルドしたらエラーも警告も
出ませんでした。しかし、データX[1]を入力すると、
"Debug Error"というMsgBox
(タイトルは"Microsoft VC++ Debug Library")
が表示されて、強制的に終了させられてしまいます。
これは何がまずいのでしょうか?無知ですいません。
何度もすいません。
よろしくご教授お願いいたします。m(--)m


/*
気づいた点ですが・・・

#include <process.h> ・・・いらない
int n=0; ・・・=0 はいらない
scanf() 内の"%lg"・・・%lf じゃないのか???

あとインデントしたほうがプログラムが見やすくて
エラーになってもミスが見つけやすいですよ。
*/

#include<stdio.h>

const int MAX = 100;

int main(void)
{
int kaz;
int n;
double datax[MAX];
double datay[MAX];

printf("データ数を入力してください。 (^^) \n");
scanf("%d", &kaz); //データ数入力

for(n=0; n<kaz; n++) {
printf("データX[%d]?\n", n+1);
scanf("%f", &datax[n]); //データXの入力
}

for(n=0; n<kaz; n++) {
printf("データY[%d]?\n", n+1);
scanf("%f", &datay[n]); //データYの入力
}

printf("ByeBye!\n");

return 0;
}


shu さんありがとうございました。
ところでやはりDebugError!というMessageBoxが出てしまいます。
データ数(kaz)の入力はできるのですが、データX[1]を入力し、
Enterキーを押すとMessageBoxが出ます。ビルド時のエラー、
警告は0です。VC++のインストールに問題があるのでしょうか?


ちなみにデータX(datax)とデータY(datay)をint型で入力した場合はうまくいくようです、MessageBoxが出ませんでした。double型変数への切り替えがスムーズに行っていないということなのでしょうか???


どうしてでしょうね。

> データX[1]を入力すると、
> "Debug Error"というMsgBox
> (タイトルは"Microsoft VC++ Debug Library")
> が表示されて、強制的に終了させられてしまいます。

LSIC86試食版、Turbo-C++ Version 4.0、Borland C++ Builder で試してみましたが、
特に問題はありませんでした。何故エラーが出るのでしょうね?
shuさんが指摘したように"%lg"が悪いのでしょうか。
"%lg"自体はdouble型の書式指定の一つなので、問題ないと思うのですが、
試しに"%lf"にしてみてくれませんか。
#"%f"じゃあなくて、"%lf"でお願いします。

それから、Microsoft VC++ をお持ちの方、同様のエラーが出るか試していただけますか。


"%lf"で、うまくいきました!(^^)(^^)(^^)
ともじ先生、shuさんありがとうございました。
私の持っているC言語のマニュアルを後で見たら、
「入力時の書式」:%lf または %lg で、
対応するデータの型がdouble となっていました。
%lf と %lg の違いなどがよく分からず、完全に
「結果AllRight」ですが、とりあえずうまくいきま
したことをご報告いたします。
以下が最終的にうまくいったコードです。(^^)

#include<stdio.h>

const int MAX = 100;

int main(void)
{
int kaz;
int n;
double datax[MAX];
double datay[MAX];

printf("データ数を入力してください。 (^^) \n");
scanf("%d", &kaz); //データ数入力

for(n=0; n<kaz; n++) {
printf("データX[%d]?\n", n+1);
scanf("%lf", &datax[n]); //データXの入力
}

for(n=0; n<kaz; n++) {
printf("データY[%d]?\n", n+1);
scanf("%lf", &datay[n]); //データYの入力
}

printf("ByeBye!\n");

return 0;
}


めでたし、めでたし・・・。

うまくいって良かったっす。
それにしても掲示板始まって以来の長い展開になりましたね〜


とりあえず、よかったですね。

> %lf と %lg の違いなどがよく分からず、完全に
> 「結果AllRight」ですが、とりあえずうまくいきま
> したことをご報告いたします。

少し調べてみましたが、何故"%lg"が駄目なのか、結局わかりませんでした。
処理系によっていろいろと問題が生じますね。


>shu さん

> #include <process.h> ・・・いらない
> int n=0; ・・・=0 はいらない

おっしゃる通りいりませんね。寺内さんのソースを変更したので、見落としました。

>scanf() 内の"%lg"・・・%lf じゃないのか???

"%lg"はdouble型の書式指定文字列なので、問題ないと思うのですが・・・。
ちなみに、"%g"は、「通常はf変換を行うが、指数部が-5以下か、有効精度以上の
とき、eまたはE変換を行う」(「新C言語入門 シニア編」 ソフトバンク 林晴比古著 )
と言うものです。

> あとインデントしたほうがプログラムが見やすくて

そうそう、タブ、無視されちゃうんですよね。


Tabって無効になるのね。

知らんかった・・・。

戻る


「初心者のためのポイント学習C言語」 Last modified:2001.7.25
Copyright(c) 2000-2002 TOMOJI All Rights Reserved