- ベストアンサー
できているとは、思うのですが。ポインタの配列を
コンパイラではちゃんと動いてます。 1 2 3 0 1 2 3 という具合です。 気になるのは、printarrayの部分が正しいのか、ちょっと悩んでいます 問題としては main関数では0の値を読み込むまで最大99(MAX-1)個の値を配列 xに読み込んでいる。引数のポインタからの値を、値が0になるまで すべて1行に1つづつ画面に出力する関数printarray()を作成し、 プログラムを完成せよ。 引数はアドレスとして受け取る事。(配列としてでなく) フォーマットは、 "%d¥n" とする。(余計な出力はしない事。) (0は出力しない。) main内部を変更してはならない。 以下がソースです。 ご指摘よろしくお願いします。 #include <stdio.h> #define MAX 5 void printarray(int *); int main() { int x[MAX], i; int *p; x[MAX-1] = 0; for (i = 0, p = x; i < MAX-1; ++i, ++p) { scanf("%d", p); if (*p == 0) { break; } } printarray(x); return 0; } void printarray(int *a) { int i,*p; for(i = 0, p = a; i < MAX-1; ++i,++p) { if(*p == 0){ // continue; break; }else{ printf("%d\n", *(a+i)); } } }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 引数のポインタからの値を、値が0になるまで > すべて1行に1つづつ画面に出力する関数printarray()を作成し、 としてることから、出題者が意図しているのは void printarray(int* p) { while(*p!=0) { printf("%d\n", *p); p++; } } じゃないかと。whileが使えないなら、 for(;*p!=0;p++) printf("%d\n", *p); にするとか。
その他の回答 (1)
- Wr5
- ベストアンサー率53% (2173/4061)
まぁ、(最大値が99から変更されていますが)要求仕様には沿っているからいいんじゃないでしょうか。 >scanf("%d", p); こっちはpなのに、 >if(*p == 0){ >// continue; >break; >}else{ >printf("%d\n", *(a+i)); >} で*pだったり*(a+i)だったりと一貫性がないのはどうしたのかなぁ…とは思いますが。 まあ、あとは……for()ループでカウンタ変数iは排除できそうだなぁ…とか。 pが&x[MAX]より小さい場合…で判定できますよね?
お礼
0以外だから!=0で平気でしたね・・・ 少し頭が固かったみたいです。 ありがとうございました!