如何使用scanf向数组添加数字

时间:2013-10-30 01:58:03

标签: c

我想使用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

3 个答案:

答案 0 :(得分:2)

我建议:

void addScores(int *a, int count){
    int i;
    for(i = 0; i < count; i++) {
       printf("please enter your score..");
       scanf("%d", a+i);
    }
}

用法:

int main() {
    int scores[6];
    addScores(scores, 6);
}

答案 1 :(得分:2)

a+i is not friendly to newcomer.

我建议

scanf("%d", &a[i]);

答案 2 :(得分: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. 告诉用户做什么的简单提示始终是任何程序的重要组成部分 - 即使是简单的五线程。
  4. 在上面有一些更简洁的方法来编写某些表达式 - 但根据我的经验,清晰度总是胜过聪明 - 而且编译器通常会优化任何明显的冗余。因此 - 不要害怕额外的括号,以确保你得到你想要的。
  5. 如果你需要动态增加数组的大小,请查看realloc。它可以与malloc结合使用来创建可变大小的数组。但是,如果您的初始数组在上面的代码片段中声明,那么它将不起作用。
  6. 测试返回值(addScores,因此有效地scanf>0而不是!=0可以捕获有人输入ctrl-D(“EOF”的情况“)终止输入。感谢@chux的建议!