0

scanf を使用して配列に数値を追加したいのですが、何が間違っていましたか? scanf 内の i の前の最初の括弧 { に式が期待されていると表示されます...

void addScores(int a[],int *counter){
    int i=0;
    printf("please enter your score..");
    scanf_s("%i", a[*c] = {i});
}//end add scores
4

3 に答える 3

2
a+i is not friendly to newcomer.

私は提案します

scanf("%d", &a[i]);
于 2013-10-30T02:08:43.440 に答える
1

あなたのコードは、配列が動的にサイズ変更されることを期待していることを示唆しています。しかし、それは C では起こりません。事前に適切なサイズの配列を作成する必要があります。収集する可能性のあるすべてのスコアに対して配列に十分なメモリを割り当てたと仮定すると、次のように動作します。

#include <stdio.h>

int addScores(int *a, int *count) {
  return scanf("%d", &a[(*count)++]);
}

int main(void) {
  int scores[100];
  int sCount = 0;
  int sumScore = 0;
  printf("enter scores followed by <return>. To finish, type Q\n");
  while(addScores(scores, &sCount)>0 && sCount < 100);
  printf("total number of scores entered: %d\n", --sCount);
  while(sCount >= 0) sumScore += scores[sCount--];
  printf("The total score is %d\n", sumScore);
}

注意すべき点がいくつかあります。

  1. 関数addScoresは合計カウントを追跡しません。その変数はメインプログラムに保持されます
  2. 入力終了の単純なメカニズム: 文字が入力された場合scanf、数字が見つからず、値 0 が返されます
  3. ユーザーに何をすべきかを伝える単純なプロンプトは、どんなプログラムでも常に重要な部分です。単純な 5 行でさえも。
  4. 上記の特定の式を記述するためのよりコンパクトな方法がありますが、私の経験では、明快さは常に賢さよりも優先され、コンパイラーは通常、明らかな冗長性を最適化します。したがって、意図したとおりになるように、余分な括弧を恐れないでください。
  5. 配列のサイズを動的に増やす必要がある場合realloc、 を参照してください。と組み合わせてmalloc使用​​すると、可変サイズの配列を作成できます。ただし、初期配列が上記のコード スニペットのように宣言されている場合は機能しません。
  6. 誰かが ctrl-D ("EOF") を入力して入力を終了するケースをキャッチするのではなく、戻り値 ( のaddScores、したがって実質的に のscanf)をテストします。提案してくれた@chuxに感謝します!>0!=0
于 2013-10-30T02:18:44.413 に答える