C言語の問題でわからないところがあります
先ほども似たような内容で質問させて頂いたのですが、もう一度質問させてください。
最近C言語を勉強し始めたのですが、わからないところがあります。
二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成するものなのですが、うまくいかなく困っています。
他の書き方でやれば普通にいけると思うのですが、これだとできない理由がわからないと、もやもやしてしまうので・・・・
プログラムは以下の通りです
#include <stdio.h>
int main(void)
{
int n1,n2,n3,n4;
puts("二つの整数を入力してください");
printf("整数1:"); scanf("%d",&n1);
printf("整数2:"); scanf("%d",&n2);
n3=(n1>n2) ? n2 : n1;
n4=(n1>n2) ? n1 : n2;
printf("%d以上%d以下の全整数の和は", n3,n4);
int num=n3; /* numの最初の値は小さい方の値 */
int wa=0;
/* n3が小さい方の数、n4は大きい方の数 */
do{
if (n1>n2)
{
wa=n4+num; /* 大きいほうの数(num)にsub(小さい方の数+0,2,3,4・・・)を足していく */
num=num+1;/* ここを通るたびにsubに+1 */
printf("%d",wa);}
else
{
wa=n4+num;
num=num+1;
printf("%d",wa);}
}while(num<n4); /* num<n4を満たさない=numが大きいほうの数よりも大きくなったらループを終了 */
printf ("です\n"); /* ですっす */
return 0;
}
これで大きい方に37、小さいほうに28と入力すると656667686970717273ととても大きな数値になってしまいます。
ループが間違っているのでしょうか?
whileは whileの後の()の中身の条件を満たしているとにループする、と認識しているので、numが大きい方の数値より大きくなったとき、ループを終了するようにしているつもりです。
ここがどこか間違っているのでしょうか・・・?
それから、初期化というのもいまいち理解していないのですが、intで宣言するときに、中に数値を格納しておく、という物だと思っています。
宣言の後にprintf("%d",num);などで確認すると、代入できているようなので、これは間違っていないと思うのですが・・・・、
間違っているところがざっとみて解りましたら、回答頂けるとありがたいです。
C言語を始めたばかりなので、できれば簡単に説明して頂けるとありがたいです。