• ベストアンサー

教えてください!

初歩的な質問なのですが、c言語を勉強しています。 何度考えてもわからないので、どなたかお力を貸してください! キーボードから数値を入力して2桁の整数と十、一それぞれの位の数を表示させるプログラムを作成しているのですが、 int sei,a,b; sei=a*10+b; scanf("%d",&sei); printf("整数は%3d, 十の位=%1d, 一の位=%1d ",sei,a,b); としてみたのですが、おかしな答えになり、うまく表示しません。 どこがおかしいのか、ご指摘いただけるとうれしいです!

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

No1で回答した者です。 大変失礼しました。 関数scanf()はエンターが押されるまで複数のキー入力を一度に得られるのですね? (No2さんの回答を読んで気付きました) ならばNo2の言われる通りですね。 scanf("%d",&sei); a = sei/10; b = sei%10; printf("整数は%3d, 十の位=%1d, 一の位=%1d ",sei,a,b); 当方、組み込み専門なのでscanf()を使うことがなく勘違いしてました。 などと言い訳を・・・(^◇^;)

rarirarira
質問者

お礼

black_montblancさん、何度もご回答ありがとうございます! 専門家さんですか!すごいです! 尊敬します(>_<) 何度も挑戦して、頑張ってみたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • iiikkk
  • ベストアンサー率37% (92/247)
回答No.3

sei=a*10+b; 上記の意味がまったく分かりません。 とりあえず、 int sei,a,b; scanf("%d",&sei); a=sei/10; b=sei%10; printf("整数は%3d, 十の位=%1d, 一の位=%1d ",sei,a,b); これではどうでしょうか。

rarirarira
質問者

お礼

iiikkkさん、ご回答ありがとうございます! sei=a*10+b; では、なんの意味もないんですね。 大変参考になりました! もう一度頑張ってみたいと思います!

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

> sei=a*10+b; これによって十位がaに、一位がbに求まると思うのがマチガイ。 scanf("%d",&sei); a = seiの十位を求める式; b = seiの一位を求める式; printf("整数は%3d, 十の位=%1d, 一の位=%1d ",sei,a,b); でなくては。

rarirarira
質問者

お礼

epistemeさん、ご回答ありがとうございます! なるほど! sei=a*10+b; では、十の位がaに、一の位がbに求まらないんですね。 いろいろ参考になります! 本当に助かりました。 もう一度頑張ってみたいと思います!

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

キーボードから入力されるのは変数seiではなく、変数a,bです。 あなたのプログラミングでは変数seiにaが代入されていることになります。 以下に一例を・・・ int sei,a,b; scanf("%d",&a);←十の位の入力値を得る scanf("%d",&b);←一の位の入力値を得る sei=a*10+b;←解を求める printf("整数は%3d, 十の位=%1d, 一の位=%1d ",sei,a,b);

rarirarira
質問者

お礼

black_montblancさん、ご回答ありがとうございます! 全く勘違いしていたようです・・・。 もういちどきちんと勉強しなおさなきゃだめですね! とっても助かりました! 本当にありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 小数の表示が・・・。

    初歩的な質問で申し訳ないです。 「2個の整数値を標準入力装置(キーボード)から読み込み、その平均値を計算して結果を標準出力装置(ディスプレイ)に出力するというプログラムを書きなさい。小数以下1桁を表示すること。」 という問題を考えていたのですが、上手くいきません。 intじゃダメということはわかるのですが、floatやdoubleにしたら答えがおかしくなります。 intで割り切れる数字だったらこれでいいみたいですが割り切れない奴を小数1桁表示ができません。 どうすべきでしょうか? #include <stdio.h> main() { int a,b,c; printf("整数a:"); scanf("%d",&a); printf("整数b:"); scanf("%d",&b); c=(a+b)/2; printf("平均値は%dです。",c); }

  • c言語のプログラムで

    c言語で 2つの整数を読み込んで小さいほうの数以上で大きいほうの数以下の整数をすべて加えた値を表示するプログラム で最後の表示の仕方がわかりません。 実行結果は 整数1:37 整数2:28 28以上37以下の全整数は325です。と表示されるはずです。 この表示の3行目の28と37の表示がどうやればよいのかわかりません。 #include <stdio.h> int main(void) { int a, b; int sum=0; printf("整数1:"); scanf("%d",&a); printf("整数2:"); scanf("%d",&b); if(a>b) do{ sum=sum+b; b=b+1; }while(b<=a); else do{ sum=sum+a; a=a+1; }while(a<=b); printf("%d以上%d以下の全整数の和は%dです。",a,b,sum); return(0); } 全整数の表示はできます。 do文の中でa=cとかにしてやってみましたが、うまくいきませんでした。 お願いします。

  • c言語超初心者です。教えてください

    基本的だと思いますが教えてください。 #include <stdio.h> int main(void) { int na, nb: puts("二つの整数を入力してください."); printf("整数A:”); scanf("%d",&na); printf("整数B:”); scanf("%d",&nb); printf("それらの平均は%fです。\n,(na+nb)/2.0); return(0); } これでintの形で最後のprintfが%fなのですがintは%dとなるはずなのですがこれは2。0という実数値で割るから答えは実数値になりますよ。という意味で%fとしたのでしょうか?確かにこうしないと正しい値がでてこないのです。教えてください。

  • c言語超初心者です。2

    #include <stdio.h> int main(void) { int na,nb, nc; int sum; double ave; puts("三つの整数を入力してください."); printf("整数A:"); scanf("%d", &na); printf("整数B:"); scanf("%d", &nb); printf("整数C:"); scanf("%d", &nc); sum=na+nb+nc; ave=(double)sum/3; printf("それらの合計は%5dです。\n", sum); printf("それらの平均は%5.1fです。\n",ave); return(0); } とういうのを作ったんですが、最後のそれらの合計は%5dとやりその5の意味は整数を10進法で少なくても5桁で表示とありますが、例えば1,2,3と入力しても合計は6とでて5桁ででないんですけど。そういう意味ではありませんか?あとave=(double)sum/3;のところをave=sum/3.0としても問題なくできるのですが、どっちでやったほうがいいとかはありますか?もしあったらその理由も教えてください。

  • ヒントを教えて欲しいです

    2と1が同時に表示されてしまうのです。 キーボードから2個の整数を読み込み、それらの和と差がともに偶数であれば整数の2を表示し、いずれか一方のみが偶数の場合は1を表示し、それ以外の場合は整数の0を表示するプログラムを作れ #include<stdio.h> main() { int A,B; printf("Enter an integer:"); scanf("%d",&A); printf("Enter an integer:"); scanf("%d",&B); if((A+B)%2==0,(A-B)%2==0){ /* 偶数ならば */ printf("2\n"); } if((A+B)%2==0){ /* 偶数ならば */ if((A-B)%2==0) /* 偶数ならば */ printf("1\n"); } else{ /* 奇数ならば */ printf("0\n"); } }

  • Cのプログラミングを勉強中です。

    Cのプログラミングを勉強中です。 Aの値のBに対する割合を表示すしたいのですが、以下のように記述してもうまくいきません。 どこを直したらよいか教えていただけますか。 #include <stdio.h> int main(void) { int n1 , n2 ; printf("二つの整数を入力してください。\n"); printf("整数A:"); scanf("%d", &n1); printf("整数B:"); scanf("%d", &n2); printf("Aの値はBの%d%%です。\n" , n1 / n2 * 100 ); return(0); }

  • またプログラムの修正おねがいします。

    キーボードから出力した3つの整数について、以下の判定を行い 判定結果を出力するプログラムを作成する。 全部同じ 2つ同じ バラバラ * 論理演算子を使わないこと。 * インデントを正しくつけること。 #include<stdio.h> void main(void) { int a,b,c; printf("a --->"); scanf("%d",$a); printf("b --->"); scanf("%d",$b); printf("c --->"); scanf("%d",$c); if(a==b){ if(b==c){ printf("全部同じ\n"); } } else if(a!=b){ if(b==c){ printf("2つ同じ"); } else if(a==c){ printf("2つ同じ"); } else{ printf("バラバラ"); } } } 最近c言語を習ったばっかりなのでわからないとこだらけです。よろしくお願いします。

  • C言語 %表示

    二つの整数値を読み込んで、前者が後者の何%かを表示するプログラムを作成したいです。 #include<stdio.h> int main(void){ int no1,no2; printf("整数を入力してください。\n"); printf("整数A:"); scanf("%d",&no1); printf("整数B:"); scanf("%d",&no2); printf("Aの値はBの値の%f%%です。\n",(double)(no1/no2)); } Aの値はBの値の0.0000%です。となってしまいます。 上記のプログラムの訂正をお願いします。

  • 中央値をもとめる

    このプログラムだとたとえば 1、100、99を入力したときに間違った値を出します。どうすればいいでしょうか?おねがいします。 #include <stdio.h> int main(void) { int a, b, c, m; int max; printf("1個目の数値:"); scanf("%d", &a); printf("2個目の数値:"); scanf("%d", &b); printf("3個目の数値:"); scanf("%d", &c); max = a; if(max < b) max = b; if(max <= c) m = max; printf("%d, %d, %d の中央値は%dです。\n", a, b, c, m); }

  • C言語の初歩的な質問

    質問1----------------------------------------- #include<stdio.h> int main() {  int a;  char b[10];  for(int i = 0;i < 2;i++){   scanf("%d",&a);   printf("整数%d\n",a);  }  scanf("%s",b);  printf("文字列%s\n",b); } /* この際に、例えばabと入力すると結果が 整数-858993460 整数-858993460 文字列ab となり整数入力を無視して進められるのはなぜでしょうか? */ 質問2----------------------------------------- #include<stdio.h> void func(int**); int main() {  int *p;  func(&p);  printf("%d",*p); } void func(int **pp) {  int n = 10;  *pp = &n; } /* func関数のnはスコープからはずれて変数の寿命がなくなるはずなのにprintfで表示されるのはなぜでしょうか? */ ---------------------------------------------- C言語は一冊の本とネットの入門サイトをかじった程度の理解です。