Userが何度も質問を繰り返せるような,下のようなプログラミングが書きたいのですが、どうしたらいいのわかりません。ちなみに私の書いたものでは、一度しか実行できません。わかる方がいらしゃったら教えてください。
--------------------------------------------------------------------
問題:ユーザーがセールスを入れると、$200+コミッション(セールスの9%)がサラリーとしてもらえる。
-------------------------------------------------------------------
実行例:
Enter Sales(-1to end):
Salary is:

Enter Slaes(1 to End):
-------------------------------------------------------
私の書いたプログラム:
#Include<iostream.h>
int main(){
int x;
float;

cout<<"Enter Sales in Dollars"
cin>>x;

y=200+x*0.09;
return 0;
}

このQ&Aに関連する最新のQ&A

A 回答 (4件)

No.2での補足に書かれたプログラムですが、if文の位置が正しくありませんね。


-1の判定はxの入力の直後にすべきです。
-1が入力されたときはその後の計算や結果表示は不要なのですから。
    • good
    • 0
この回答へのお礼

私はいつもプログラミングするとき、すこし複雑になると何をどこにおいたらいいのかいまいちわかりません。
実行するときにWarnngがでるだけで、たいして大きい問題にならないので、違っているってわかってても、自分で調べるのにも限界があるし、学校の先生は適当にそれをみて点数しかつけないし、いったい何が悪いのかもよくわからないまま終わってしまいます。
Naturalさんのような、位置の違いを指摘して下さるとすごく助かるし、勉強になります。

お礼日時:2002/02/19 08:20

#2のclow_hです。


warningの理由ですが、ちょいと調べたところ
yをfloat型で宣言しているの原因だと思われます。

なにやら、float型を計算するときはいったんdouble型へ変換し、再びfloat型へ戻すという作業をするらしいので、
float(32bit 符号付き浮動小数点数) < double(64bit 符号付き浮動小数点数)
の図式により、いったんdouble型に変換されて戻すときにDataが失われる可能性があることをコンパイラが警告していると思われます。

実行上では問題ないでしょう。何しろ使用していないと思われるビットで警告を受けているだけなので・・・
もしかしたら、まれにこの領域を使ってしまう可能性がある。というぐらいです。

この警告が出てくるのがいやだったら、yの宣言をdouble型にしましょう。
警告が消えるはずです。

参考URL
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.4 …
(このページに、float、doubleのことが書いてありました)
下のURLはこのページのトップページです。

参考URL:http://www.pro.or.jp/~fuji/mybooks/cdiag/index.h …
    • good
    • 0
この回答へのお礼

ほんとにWarningきえました! ご丁寧なアドバイスどうもありがとうございました。
URLも細かいことはまだ理解できないのですが、参考になりました。 
しかし、プログラミングは本当に少しのことで、いろいろ変わってしまうんですね

お礼日時:2002/02/19 08:10

こんにちは


蛇足ながら、ご質問(追加のほう)へお答えします。
>なぜwhile (1),if ( x==-1)なのですか? その1とかー1は一体どういう意味なんでしょうか?

本を読めばわかると思いますが、
while文は条件式(カッコの中身)が真(0以外、条件に合う)なら実行し、偽(0、条件に合わない)なら実行しません。
よって、while(1)は条件に合うので{}の中を実行します。もちろんwhile(0)なら実行しません。

>また、Ifのときは、()に文を実行する文を入れるらしいのですが、なぜ(-1)なんですか

if(x==-1)はEnter Sales(-1to end): で指定されているとおり、-1を入力したら終了せよなので、 xの値が-1だったときと言う意味ですね。
x == -1 は xが-1と等しいときなので条件に合っています。

それでは、蛇足でしたが、がんばってください。

この回答への補足

ご回答ありがとうございました。プログラムを書き直すことができました。とりあえず下記のプログラムで実行はできるのですが、コンパイル上でWarningが出てしまいます。いろいろ試してみたのですが、いっこうにWarningが消えません。なぜ、これではDataが失われる可能性があるのでしょうか? 実行上では何の問題もなかったのですが、、、。
--------------------------------------------------------------------
#include <iostream.h>
int main()
{
int x;
float y;

while(1)
{

cout << "Enter Gross Sales in Dollars :";
cin >> x;
y= 200 + x * 0.09;
cout <<" The Commision of "<< x << " is " << y << endl;

if (x==-1
{
break;// Break loop only if x is -1
}
}
return 0;
}
-----------------------------------------------------------------
Compiling...
commision.cpp
A:\commision.cpp(37) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data

commision.obj - 0 error(s), 1 warning(s)

補足日時:2002/02/18 19:21
    • good
    • 0

ご質問文の様に「永遠に」ということでしたら永久ループを使用すればよいと思います。


但し、実行例には(-1 to end)という但し書きがついていますので、その条件に合致した場合はループを抜けるようにします。

恐らく課題か何かだと思いますのでプログラム全体はあえて記載しませんが、ヒントだけ…。

while(1){
  ・
  ・
  ・
  if(x == -1){
    break;
  }
  ・
  ・
  ・
}

尚、lilnoさんのプログラムは実行例とメッセージ等が微妙に違っていますので御確認下さい。
恐らく写し間違いだと思いますが、floatの後にあるべきyが定義されていないこと、計算後の結果が表示されていないこと(Salary is:に続いて表示される筈)も指摘しておきます。

この回答への補足

naturalさん重大なHintありがとうございました。私はまだプログラミングの超初心者なので、いまいち本を読んでも、実際に自分で書くとかならず行き詰ってしまいます。
すごく基本な質問でごめんなさい。

なぜwhile (1),if ( x==-1)なのですか? その1とかー1は一体どういう意味なんでしょうか?

 本にはwhile(0),この場合は条件文が0なのでcoutで始まる文は実行されない。と書いてあります。While(2)とかの場合もあるのですか?

 また、Ifのときは、()に文を実行する文を入れるらしいのですが、なぜ(-1)なんですか?

補足日時:2002/02/18 16:47
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qコード変換(漢字)のサンプルプログラム

始めまして!
困っています、御力添えをお願いします。
UNIX(SouOS5.8)でのコード変換(SJIS→EUC、EUC→SJIS)のコーディング(サンプルソース:C言語)をどなたか教えて頂けないでしょうか?
お願いします。

Aベストアンサー

下記URL参照。

参考URL:http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/kanjicod.html

Q{x = x>y ? x:y; return x;}

#include <iostream>
using namespace std;

inline int max(int x, int y){x = x>y ? x:y; return x;}

int main()
{
int num1, num2, ans;

cout << "2つの整数を入力して。\n";
cin >> num1 >> num2;

ans = max(num1, num2);

cout << "最大値は" << ans << "です。\n";

return 0;
}
の{x = x>y ? x:y; return x;}の部分の意味が解りません。

Aベストアンサー

inline int max(int x, int y){x = x>y ? x:y; return x;}
これを普通に関数で書くと

int max(int x, int y)
{
x = x>y ? x:y;
return x;
}

です。

x = 部分は右辺の結果が代入されます。これはわかりますよね。
x>y?x:y;
と書くと?より左にある条件式を判定し、その結果が真である場合は:で区切られた左側の値を、偽である場合は右の値を帰します。
x>yが真であればxを、偽であればyを返します。
それが、左辺値xに代入され、関数の戻り値として帰ります。

従って、2つの値をこの関数に入れると、大きいほうの値が帰ることになります。

Qブログ等で公開されているサンプルコードの著作権について

個人の方などが、ブログ等で公開されているサンプルコードについてですが、

あるプログラムの解説サイトで見つけた、サンプルコードと、
同じコードで解説しているサイトを2つ発見したので、こういうのって、法律的に、どういう扱いなのだろうかという疑問です。

Aベストアンサー

プログラミング言語や規約つまりプロトコルは対象外だけど、ソースは保護対象なんだってば。
当たり前だよ。プログラミング言語使って生み出された創作物なんだもん。
この辺、IT系資格の参考書でもたまに間違いを見かけるからわかりにくいんだろうね。

私は法学部卒の現役エンジニアです。
ソースコードが著作物なのは断言します。

Qvoid (*signal(int signum, void (*handler)(int)))(int);

の解釈を教えてください
最後の「(int)」については詳しくお願いします

Aベストアンサー

signalが

(1)1つ目の引数の型:int
(2)2つ目の引数の型:引数がintで戻り値がvoidである関数へのポインタ
(3)戻り値の型:引数がintで戻り値がvoidである関数へのポインタ(2と同じ)

を満たす関数である事を宣言しています。最後の(int)はsignalの戻り値の
関数ポインタがint型の引数を持つ事を示しています。

「引数がintで戻り値がvoidである関数へのポインタ」の型をHANDLERと表すと

HANDLER signal(int signum, HANDLER handler);

となります。

Q数学演算のサンプルコード集のあるサイトを探しています(VB6)

VB6で数学演算のソースコードのサンプル集を探しています。

例えば今回は3次元のベクトルをX,Y,Z軸周りに任意の角度だけ回転する行列をプログラムしたいので、アフィン変換のサンプルなんかないかと探しています。いいサイトがあれば教えていただけませんでしょうか。

よろしくお願いします。

Aベストアンサー

まったくの素人なので、
参考になるかはわかりませんが、
検索したらこんなのがありました。

参考URL:http://files.codes-sources.com/fichier.aspx?id=37873&f=mdlMath.bas

Qint main の前のint add(int a,int b) ってなんですか?

int main の前のint add(int a,int b)
ってなんですか?

Aベストアンサー

関数のプロトタイプ宣言です。

賢いコンパイラだと後ろに書いてある実体を見て関数値や引数の型を読み取ってくれたりしますが、コンパイラによっては先に(つまりソースコードのより上の行に)型を宣言しておかないと正しく値の引き渡しができないものもあります。そういったトラブルを避けるために、add()という関数を使う箇所よりも上に、その返り値や引数の型を宣言しておくのです。

ちなみに、#include <stdio.h>というインクルードがありますが、このstdio.hファイルの中には、main()内で利用しているprintf()等の標準関数についてのプロトタイプ宣言なども書かれています。

QHead First PHPサンプルコード文字化け

よろしくです。
下記のphpの本を参考にプログラムを勉強しているのですが、
サンプルコード(完成品)の日本語部分(DBがソースの日本語部分全て)がすべて文字化けしてしまいます。
この本は文字化け対策を強みにした本なのですが、実際のサンプルコードがこんな状態なので非常に困っています。
例えば、表示サイトページ内に3時間というデータが表示される予定だとすると、3??(ハテナマーク)のように表示されます。
ちなみに文字化け後、ブラウザ、DB、phpの文字コード設定はutf8統一であることは確認しました。apacheの文字コードはわかりません。
テスト環境は、自宅のローカルサーバーと、某レンタルサーバーの2つでどちらでも文字化けです。

この本を試した方、もしくはちゃっちゃっと下記サイトからサンプルをとって試していただける方、どうかレスをお願いします。
著書内ではこれでどうだというくらい日本語対策をうたっているのに、全サンプルがNGとは、あまりに不思議な現象で、とても困っています。
どうかよろしくお願いします。

『Head First PHP & MySQL――頭とからだで覚えるWebアプリケーション開発の基本』
Lynn Beighley, Michael Morrison 著、佐藤 嘉一 訳
2010年03月 発行
672ページ
ISBN978-4-87311-444-6

http://www.oreilly.co.jp/books/9784873114446/
関連ファイル ー サンプルコード
に本の中で使われている全てのサンプルが入っています。

よろしくです。
下記のphpの本を参考にプログラムを勉強しているのですが、
サンプルコード(完成品)の日本語部分(DBがソースの日本語部分全て)がすべて文字化けしてしまいます。
この本は文字化け対策を強みにした本なのですが、実際のサンプルコードがこんな状態なので非常に困っています。
例えば、表示サイトページ内に3時間というデータが表示される予定だとすると、3??(ハテナマーク)のように表示されます。
ちなみに文字化け後、ブラウザ、DB、phpの文字コード設定はutf8統一であることは確認しま...続きを読む

Aベストアンサー

表示させるだけじゃねーじゃん。

確かにデフォルトだと文字化けした。
でも文字化け回避できた。

--------------------------------
// Connect to the database
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
mysqli_set_charset($dbc, "utf8");// ←追加

Q「void ( *signal(int sig, void (*func)(int)) ) (int)」の (int)

signal関数の書式についてですが、

  void ( *signal(int sig, void (*func)(int)) ) (int);

最後に付く(int)は一体何でしょうか?
このような関数の書式ははじめて見ました。
UNIX系の何かでしょうか。
回答よろしくお願いします。

Aベストアンサー

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t sighandler);
より後半部分のtypedefを置き換えると
sighandler_t signal(int signum, void (*sighandler)(int));
つぎに戻り値の部分のtypedefを置き換えると
void (*signal(int signum, void (*sighandler)(int)))(int);
となります。
(
sighandler_t signal(int signum, void (*sighandler)(int));
の「signal(int signum, void (*sighandler)(int))」をAと置き換えて
sighandler_t A;
からtypedefを置き換えると
void (*A)(int);
となり、Aを戻すと
void (*signal(int signum, void (*sighandler)(int)))(int);
となる。
)

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t sighandler);
より後半部分のtypedefを置き換えると
sighandler_t signal(int signum, void (*sighandler)(int));
つぎに戻り値の部分のtypedefを置き換えると
void (*signal(int signum, void (*sighandler)(int)))(int);
となります。
(
sighandler_t signal(int signum, void (*sighandler)(int));
の「signal(int signum, void (*sighandler)(int))」をAと置き換えて
sighandler_t A;
からtypedefを置き換...続きを読む

Qホームページや書籍などのサンプルコードは動かないものばかりでしょうか?

ホームページや書籍などのサンプルコードを試して動かしてみても、動かないサンプルコードばかりだと思いますが、同じことを考えている人はいらっしゃいますか?

何か…ホームページや書籍などのサンプルコードが動かないということは、そのサンプルコード自体の問題というよりは作者の問題と思いますが…。なぜなら、1件のホームページや1冊の書籍で、このサンプルコードが動かなければ別のサンプルコードが動かない可能性が高いです。逆にこのサンプルコードがちゃんと動くということは、他のサンプルコードも動く可能性が高い。経験談で感じた限りです。

要するには作者の解説力次第になりますと思いますが、どうでしょうか?どんな簡単な言語でも解説力がなければ取っ付きにくく、どんな難しい言語でも解説力があれば取っ付きやすいものでしょうか?

何か解決法とかありますでしょうか?ご回答をお願いします。

Aベストアンサー

ちょっと抽象的かも、です。

>ホームページや書籍などのサンプルコードが動かないということは、そのサンプルコード自体の問題というよりは作者の問題と思いますが…。

それは「あり得ます」。
ただし、その前に自分の環境をチェックした方がいいでしょう。
ヴァージョン違い、なんてのは他のお方が仰ってる通りなんですが、他にも原因は色々と考えられると思います。
基本的に、一概にプログラミング言語と言っても、

1.提供元が一つしか無いもの
2.公式規格が制定されているもの

の2種類があります。
例えばC#なんかはMicrosoftしか提供元が無い言語がありますし、最近流行りのスクリプト言語系(Python、Ruby等)も提供元が一つしかありません。こう言う場合はヴァージョン違いだと動かない可能性がありますね。他のお方が仰っているように、使用してる言語のヴァージョンをチェックした方がいいでしょう。
じゃあ、2番なら安心か、と言うとそう言う事もないのです。
例えばC言語なんかは公式規格があったりしますが、かと言って、通常は「公式規格に則って」作っただけの言語なんてのも無くって、大体その提供側独特の「拡張ライブラリ」が入ってたりするんです。
つまり、A社が提供した「拡張ライブラリ」を利用したプログラムを「B社製の」一応公式規格に則った言語で書いても動かない場合があるんです。「拡張ライブラリ」自体は独特なんで、B社が同じモノを付けている、とは限りません。そう言う場合があるんですね。
まあ、そう言う事が(しばしば)生じるんで、何らかのサイト/参考書を利用してプログラムの勉強をする場合は、なるたけその筆者と「同じ環境を」備えるようにした方がいいです。作成者自身も「全部の環境を」試せるワケではない、と言う事を最初に納得しておくべきだと思います。

>要するには作者の解説力次第になりますと思いますが、どうでしょうか?
>どんな簡単な言語でも解説力がなければ取っ付きにくく、どんな難しい言語でも解説力があれば取っ付きやすいものでしょうか?

一理あるとは思います。
が、同時に「言語の性質」ってのはありますね。解説力があってもそれを埋める事は難しいでしょう。

これ言って良いのか悪いのか分かりませんが、原則、書籍を購入して勉強する場合は「定番で」「評価の高い」書籍を選んだ方が、万能では無いですけど「失敗する確率は低い」とは思います。やっぱ校正とかそのテのノウハウを蓄積してる「実績ある」出版社の本を選んだ方がいいですね。
敢えて言いますが、最近「ネットで発表」→「書籍化」と言うのが流行りになっていますが、ホームページを作れても書籍が作れるのか、と言うとこれはまた別の話なんですね。
新興のネット関係での出版社なんかがプログラミング言語の本をサイトの作者の持ち込みで「安く」出版してるケースが見られますが、単なるブログ系の本だったらいざ知らず、このテの技術系の本の場合、「校正を全く行わない」「誤字脱字が多い」「索引でデタラメで役に立たない」状態で出版していて、「安い」だけで買うと、結局役に立たないんで痛い目見ます(敢えて会社名は伏せておきますがそう言う実例があるのです)。
ですから、サイトで勉強するなら構いませんが、書籍を買って勉強する場合は、少々値段が高くでも「定番商品」の方が結果安上がりです。書評に関しては大体のトコamazonで見れますし(もっともamazonは否定的な意見は載せたがらない方針ですが)、何種類か評判が良い書籍をメモっておいて本屋で現物を見た後購入した方が良いでしょう。または、評判書籍を取りあえず図書館で借りて読んでみる、とか。
出版社もすべて同じなワケではなく、「一回刷っちゃったらあとは絶版でイイや」程度で考えて粗製本作ってるケースも確かに存在するんで、そこまで行くと、確かに仰る通りかもな、とは思います。

ちょっと抽象的かも、です。

>ホームページや書籍などのサンプルコードが動かないということは、そのサンプルコード自体の問題というよりは作者の問題と思いますが…。

それは「あり得ます」。
ただし、その前に自分の環境をチェックした方がいいでしょう。
ヴァージョン違い、なんてのは他のお方が仰ってる通りなんですが、他にも原因は色々と考えられると思います。
基本的に、一概にプログラミング言語と言っても、

1.提供元が一つしか無いもの
2.公式規格が制定されているもの

の2種類があり...続きを読む

Qint *a = new int; エラー

下記をコンパイルすると、'int' 型は 'int *' 型に変換できない(関数 main() )
とエラーが出てしまいました。 何がおかしいのでしょうか ?
初歩的な間違いをしていると思いますが、アドバイスお願いします。

#include<iostream>
#include<stdlib>
#include<ctime>
using namespace std;

void main(void)
{
int *a = new int;
a=rand();
cout<<a<<endl;
delete a;

}

Aベストアンサー

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;

int main(void)
{
srand ( time(NULL));
int *a = new int;
*a=rand();
cout<<*a<<endl;
delete a;
return 0;
}

/*
多分こうだと思う。
想像以上に乱数の精度が悪いような気がする。
*/


人気Q&Aランキング