4

私は C の入門を始めたばかりで、食料品店のセルフ チェック アウト ラインを模倣するプログラムを作成するように割り当てられました。これには、ユーザー入力に基づいて食料品の価格を配列に入力し、それらを加算してファイルにコピーする必要があります。

整数配列を設定する最も簡単な方法は、for ループを使用することです。しかし、float 型の配列の場合は異なりますか?

それはこのように見えるでしょうか?それともこれは間違っていますか?

int size, i;
float items[size];
printf("How many items are you checking out today?");
scanf("%d", &size);
for(i=0;i<size;i++){
  printf("Enter the price of an item\n");
  scanf("%f", items[i]);
}

このサイトは初めてなのでよろしくお願いします

4

3 に答える 3

3

誤って「ガベージ」値を防ぐために、変数を宣言するときに変数を常に初期化することをお勧めします。また、ループカウンターを事前に宣言することはお勧めしません。多くの古いコードで見られますが (以前はコンパイラの制限により必要でした)、今ではコード ノイズだと思います。次のようになります。

for (int i = 0; i < size; i++) {
    // stuff
}

また、あなたのコードには大きな問題があります。可変サイズ配列と呼ばれるものを使用していますが、それらはお勧めできません。通常、コンパイル時に配列サイズを宣言するか、malloc.

ただし、初期化に戻ると、宣言時にスタック割り当て配列のすべての要素を設定する方法は次のとおりです。

#define SIZE 4

int main(void)
{
    float items[SIZE] = { 0 };
}

配列を動的に割り当てる場合は、同じ理由でcallocorを使用して配列要素をデフォルト値に設定することをお勧めします。memset

配列の作成に関する質問に答えるには、はい、実際にそれを行う方法に違いはありません。for ループは、どちらの場合でも問題なく機能します。の戻り値を確認することを忘れないでくださいscanf

于 2018-05-04T05:09:44.363 に答える
0

配列の使い方に違いはありません。ただし、コードに必要な変更はほとんどありません。

#define MAX_SIZE (10)

int size=0, i=0; //It is always better to initialize the variables.
float items[MAX_SIZE] = {0.0f}; //Automatically the entire array will be initialized to zero.
printf("How many items are you checking out today?");
scanf("%d", &size);
if(size > MAX_SIZE)
    size = MAX_SIZE;

for(i=0;i<size;i++){
  printf("Enter the price of an item\n");
  scanf("%f", &items[i]); //You need to pass address of variable to scanf
}

コードを実装して配列サイズを処理する方法は他にもあります。これは方法の 1 つです。

于 2018-05-04T05:08:59.670 に答える