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 回答
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);
}
于 2013-10-30T02:03:17.133 回答
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 的建议!
于 2013-10-30T02:18:44.413 回答