学校の課題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
スタッド

学校の課題

#1

投稿記事 by スタッド » 15年前

任意の個数の実数を入力し、正数と負数の数を表示するプログラムを作りたいのですが
なぜか負の数の個数がものすごく大きな数字になってしまうのですが、どこが違うのかがわかりません。
ご指導願います。
実数の入力は 0.0 を入力することにより終了させるようにします。
#include <stdio.h>

main(void)
{
  char buf[100];
  float i, posi , nega;
    printf("input data = ");
    fgets(buf, 100, stdin);
    sscanf(buf, "%0.1f", &i);
    if (i > 0 ){
      posi = posi + 1;
    }
    else if ( i < 0 ){
      nega = nega + 1 ;
    }
    while (i != 0)
      {
    printf("input data = ");
    fgets(buf, 100, stdin);
    sscanf(buf, "%0.1f", &i);
    if (i > 0 ){
      posi = posi + 1;
    }
    if ( i < 0 ){
      nega = nega + 1 ;
    }
      }
    printf("positive number = %0.0f\n",posi);
    printf("negative number = %0.0f\n",nega);

    return 0;
}

box

Re:学校の課題

#2

投稿記事 by box » 15年前

nagaもposiも、個数を勘定するからには初期値がゼロでなければなりません。
また、個数を勘定する変数はint型にしましょう。

実生活で、何かの個数を数えるとき、整数を使いますよね。
それと同じです。

スタッド

Re:学校の課題

#3

投稿記事 by スタッド » 15年前

返信ありがとうございます!

アドバイスいただいたとうりに次のように直したのですが、今度は負の数をカウントしてくれません
どこがまずいのかご教授いただけないでしょうか
#include <stdio.h>
main(void)
{
  char buf[100];
  float i; 
int posi , nega;
posi=0;
nega=0;
    printf("input data = ");
    fgets(buf, 100, stdin);
    sscanf(buf, "%0.1f", &i);
    if (i > 0 ){
      posi = posi + 1;
    }
    if ( i < 0 ){
      nega = nega + 1 ;
    }
    while (i != 0)
      {
    printf("input data = ");
    fgets(buf, 100, stdin);
    sscanf(buf, "%0.1f", &i);
    if (i > 0 ){
      posi = posi + 1;
    }
    if ( i < 0 ){
      nega = nega + 1 ;
    }
      }
    printf("positive number = %d\n",posi);
    printf("negative number = %d\n",nega);
    return 0;
}

組木紙織

Re:学校の課題

#4

投稿記事 by 組木紙織 » 15年前

質問というより、ヒントです。
正の数を入力したときに、変数iに正しく値が入っていることをどうやって確認しましたか?


[10/23,0:06分訂正]
整数→数

スタッド

Re:学校の課題

#5

投稿記事 by スタッド » 15年前

返信ありがとうございます!

確認は実際にプログラムを動かしてみて、正の数の場合はカウントされたということをもって
正しく値が入っていると判断しました。

組木紙織

Re:学校の課題

#6

投稿記事 by 組木紙織 » 15年前

いちゃもんをつけるようで申し訳ないのですが、直前のコードを私の環境(VS2005)
で実行するとうまく動きませんでした。


>確認は実際にプログラムを動かしてみて、正の数の場合はカウントされたということをもって

その確認方法だと、入力した数字が正しく入っていないかもしれませんよね。
たとえば
12.3を入力したら、変数iに3433.23と入っていてもわからないわけです。
入力した値が、本当に変数にiに入っているか確認してみてください。
それとsscanf()の使い方と一緒に。

閉鎖

“C言語何でも質問掲示板” へ戻る