プロが教えるわが家の防犯対策術!

九九表を作ろうとしたのですが、うまくいきません、解説お願いします。

#include<stdio.h>

main()

{

int i ;

int j ;


for( i=1 ; i<=10 ; i++){

for( j = 1 ; j<=10 ; j++) {

printf("%4d\n") , i*j ; }

printf("\n") ;

}
}


結果

10
-748408832
-748408832
-748408832
-748408832
-748408832
-748408832
-748408832
-748408832
-748408832     が10個続いてました・・・・

A 回答 (4件)

>printf("%4d\n") , i*j ;



printf("%4d\n", i*j);
の間違いじゃないですか?

先の書き方だと……
i*jの結果は捨てられ、printf()の戻り値は評価されません。
# まぁ、評価する必要もないでしょうが…
書式としては一応合っていますので…コンパイルエラーにはならないのでしょう。
# 環境によってはprintf()の引数が足りない。などの警告orエラーになる場合もありますが。

で、printf()が表示しようとする値は「たまたそこにあったもの」になります。
この場合だと…たぶんprintf()からのリターンアドレスでしょうか……。
"%4d\n"の文字列定数が置かれたアドレス…か???
# 環境依存なので断言はできませんけどね…
    • good
    • 0
この回答へのお礼

ありがとうございます。

引数のくだりであらたな疑問ができたので、また別の質問としてやってみます。

お礼日時:2011/10/19 11:00

> printf("%4d\n") , i*j ;



これを、目をこらして、よく確認しましょう。
間違っていますが(意図したとおりではないはずですが)エラーにはならないんですね、これが。
Cの文法としては正しいので。
    • good
    • 0

以下のようにしてください。


-----------------------------------------------
#include<stdio.h>

main()

{

int i ;

int j ;


for( i=1 ; i<=10 ; i++){

for( j = 1 ; j<=10 ; j++) {

printf("%4d", i*j);
}

printf("\n") ;

}
}
------------------------------------------------------
実行結果は以下の通り
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
    • good
    • 0
この回答へのお礼

ありがとうございます。
どこがどう違うとどう変わるのか、一目瞭然でたすかりました。

お礼日時:2011/10/19 10:49

>for( i=1 ; i<=10 ; i++){


>for( j = 1 ; j<=10 ; j++) {

九九に10の段はありません。
    • good
    • 0
この回答へのお礼

確かに!?
へんなミスですね、ありがとうございます。

お礼日時:2011/10/19 10:48

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