電子書籍の厳選無料作品が豊富!

大学の課題で平均寿命、GDP、人口、国名のデータが入っているcsvファイルをリダイレクトで実行して、人口に応じた半径による円の描画がしたいのですが、以下に書いたプログラムでコンパイルは通るのですが結果が出力されません。原因のわかる方いらっしゃいますか?ちなみにrの値を30という風に指定すれば何の問題もなくBMP画像が生成されます。
int main( void ){
int x, y;
int offset = 100;
int life, GDP, pop;
char name[100+1];
BMPnew();
while( scanf( "%d,%d,%d,%100s",
&life, &GDP, &pop, name ) != EOF ){
x = GDP/100 + offset;
y = BMP_height - (life-50)*20;
int v, w;
int r=pop;
for( v=x-r; v<x+r; v++ ){
for( w=y-r; w<y+r; w++ ){
if( (v-x)*(v-x) + (w-y)*(w-y) < r*r ){
BMPpoint( v, w, 255, 255, 255 );
}
}
}
}
BMPsave();
return 0;
}

A 回答 (4件)

関数 scanf の返り値について


https://linuxjm.sourceforge.io/html/LDP_man-page …

> 一致と代入が成功した入力要素の個数を返す。
> 返される値は渡された変換の個数よりも少ないこともあり...

と説明されているので、
すべての入力要素が成功したか確認してから描画しましょう
    • good
    • 1

もう 1つ気になったこと.



例えば
79、56640、319929、United_States_of_America
というデータに対して,
どこにどのような大きさの円を描けば「正しい」のか
ははっきりと理解できてる?
    • good
    • 1

質問文の「結果が出力されません」ってどういう意味なんだろうと思いつつ.



C の int型には, 表現できる値の大きさに制限があります.
    • good
    • 1

そこら中にある BMPなんとか って関数の仕様が全く不明だし, どんなデータを与えたのかもわからんのだから, どうにも答えようがな

いんだが.
    • good
    • 4
この回答へのお礼

BMPnew()//画像データの初期化
BMPsave()//画像データの保存
画像サイズが1,280×720で1280をBMP_width,720をBMP_heightとして定義されています
BMPpoint(x座標、y座標、赤色、緑色、青色)
データの一部は79、56640、319929、United_States_of_Americaで国ごとのデータが69個入っています。
ですが恐らく原因は7行目while文から15行目if文までにあるかと思われるのでそこを重点的に見ていただけたら嬉しいです。

お礼日時:2024/06/28 21:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A