ここから本文です

c言語でfor文からbreak を使って抜けたいです。 文字を入力したら抜けるというよ...

ゆみさん

2015/5/1820:41:48

c言語でfor文からbreak を使って抜けたいです。
文字を入力したら抜けるというようにしたいのですが
bを押すと
一番初めに入力した数字以外は表示されなくなってしまいます。

どこがおかしいのか教えてほしいです。
ちなみにプログラミングは独学で今日で1週間目ほどです。
#include<stdio.h>
int main(void)
{
char s[12];
char moji,b;
int i;
printf("整数aを10個まで入力してください\n");
printf("10個未満で入力をやめるときはbを押してください\n");
for(i=0 ; i<10 ; i++){
scanf("%d", &s[i]);
scanf("%c", &moji);
if(moji=='b') break;
}
printf("\ta \ta^2 \ta^3\n");
for(i=0 ; i<10 ; i++){
printf("\t%d",s[i]);
printf("\t%d",s[i]*s[i]);
printf("\t%d\n",s[i]*s[i]*s[i]);
if(moji=='b') break;


}

return 0;
}

閲覧数:
180
回答数:
4

違反報告

ベストアンサーに選ばれた回答

apr********さん

2015/5/1908:53:37

/*
2015/5/18 20:41:48
*/

#define _CRT_SECURE_NO_WARNINGS
// Macro definition to suppress warn. for scanf() etc. (VC++)
#include<stdio.h>
int main(void){
_char_s[12];_// 入力文字列
_char_b='b';_// 文字'b'
_int_ i;___// 文字インデクス
_int_ a;___// 変換結果の整数値
_
_printf("数字を10個まで入力してください\n");
_printf("10個未満で入力をやめるときはbを押してください\n");
_
_printf("> ");
_for(i=0;i<10;i++){
__scanf("%c",&s[i]);
__if( s[i] == b ) break;
_} getchar();__// 最後の改行文字の読み捨て
_
_printf("\ta \ta^2 \ta^3\n");
_for(i=0;i<10;i++){
__if( s[i] == b ) break;
__a = s[i]-'0';____// アスキーの数字を整数化
__printf("\t%d",a);
__printf("\t%d",a*a);
__printf("\t%d",a*a*a);
__printf("\n");
_}
// 終了
_printf("\n# 正常終了 #\n"); // 正常終了の確認
_printf("どれかのキイ押下で画面が消えます:-");
_getchar();_// 入力待ちによる観察用の画面停止
_return 0;
}
/* 出力:画面
数字を10個まで入力してください
10個未満で入力をやめるときはbを押してください
> 12345b
____a___ a^2__ a^3
____1___ 1___ 1
____2___ 4___ 8
____3___ 9___ 27
____4___ 16___64
____5___ 25___125

# 正常終了 #
どれかのキイ押下で画面が消えます:-
*/

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

pon********さん

2015/5/1900:34:14

あと気になるのは此処。
char s[12];
...
...
scanf("%d", &s[i]);
...
...
printf("\t%d",s[i]); /* scanfほどには気にならないけれど、一応。*/

ソニクラさん

2015/5/1823:42:12

独学なりに頑張ってるね。

結果を画面に出すためのループ(後半の方)があるよね?
この中にも前半と同じく、
if (moji == 'b') break;
が入ってるよね?
最初のループを抜けるときにmojiに設定された'b'は、後半ループでも中身は入ったままなので、この判定のせいで後半ループをすぐに抜けちゃってるね。

直し方として、後半ループ内の上記判定行は削除することと、後半ループの回る回数は、前半ループで回した数分だけにとどめたいから、カウンタ用に変数を1個追加して、前半ループで回った回数を保持しておいて、その値を後半ループの上限に利用すれば、無駄に回らなくていいと思うよ。

あえて、言葉で説明してみました。

nak********さん

2015/5/1820:56:32

出力側のループにも'b'でのループ抜けがありますよ

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる