2016-09-02 10 views
1

私はこのサイトを初めて利用していて、助けを求めていました。私は、ユーザーから数値を入力し、配列に格納し、3つの列に正しくフォーマットするプログラムを設計しようとしています。しかし、なぜ私の入力が正しくフォーマットされていないのか分かりません。Cの配列からの出力はフォーマットされませんか?

#include <stdio.h> 
int main() 
{ 

int x=0; 
float num[100]; 

/* for loop for receiving inputs from user and storing it in array */ 
for (x=0; x<=100; x++) 
{ 
    scanf("%f", &num[x]); 
    printf("%7.1lf%11.0lf%10.3lf", num[x], num[x+1], num[x+2]); 

    //printf("%f %f %f\n", num[0], num[1], num[2]); 

} 
return 0; 
+2

あなたの入力し、(正しい書式で)あなたの予想される出力は何ですか? –

+0

どの入力を使用することもできますが、ここではどのように入力するのかの例があります。 https://gyazo.com/f0f69ad566794e32c79fa91f8f06efe6 –

答えて

1

の問題は、私は以下を参照してください。forループに誤った範囲の

  1. 使用。与えられた

    float num[100]; 
    

    最大有効インデックスは99です。それらが初期化される前に、配列要素を使用して

    for (x=0; x < 100; x++) // x < 100 not x <= 100 
    
  2. :したがって、forループはする必要があります。

    printf("%7.1lf%11.0lf%10.3lf", num[x], num[x+1], num[x+2]); 
    

    何もnum[x+1]num[x+2]に読み込まれていません。したがって、ガベージ値を取得しようとしています。

  3. numには、範囲外の配列インデックスを使用してアクセスします。

    アクセスnum[x]

    num[x+1]、およびnum[x+2]x+2は以下97に等しい場合にのみ意味があります。


私の提案:

は二つのループを使用してください。最初のループで、データを読み取ります。 2番目のループでは、データを書き出します。

for (x=0; x < 100; x++) // Using 100 here. 
{ 
    scanf("%f", &num[x]); 
} 

for (x=0; x < 98; x++) // Using 98 here. 
{ 
    printf("%7.1lf%11.0lf%10.3lf", num[x], num[x+1], num[x+2]); 
} 

更新、変更

OPによってコメントに応答して、印刷ループへ:

for (x=0; x < 98; x += 3) // Increment x by 3 
{ 
    printf("%7.1lf%11.0lf%10.3lf", num[x], num[x+1], num[x+2]); 
} 
+0

ご協力いただきありがとうございますが、もう1つ質問があります。 私はこのように入力が出るところを持っているはずです。 ピリオドが一列に並び、列間に偶数のスペースがある3つの列。このようなもの:https://gyazo.com/54d92853b4d132a49c07e7fb6be4ec73 –

関連する問題