如何更有效地编写程序

Ham*_*zam 1 c performance

我写了一个代码,用于添加三个数字并打印它们的总和.有没有一种方法可以更有效地编写此代码,如初始化和引入每个变量.

代码如下:

#include <stdio.h>

int main()
{
  int firstNumber;
  firstNumber = 0;
  printf("Enter firstNumber");
  scanf("%d", &firstNumber);

  int secondNumber;
  secondNumber = 0;
  printf("Enter secondNumber");
  scanf("%d", &secondNumber);

  int thirdNumber;
  thirdNumber = 0;
  printf("Enter thirdNumber");
  scanf("%d", &thirdNumber);

  int sum;
  sum = firstNumber + secondNumber + thirdNumber;
  printf("%d", sum);
}
Run Code Online (Sandbox Code Playgroud)

alk*_*alk 5

可以更有效地编写此代码,例如初始化和引入每个变量.

使用数组:

int numbers[3] = {0};
Run Code Online (Sandbox Code Playgroud)

上面的行定义了三个ints并将它们全部初始化为0.

要获得第一次使用:

numbers[0]
Run Code Online (Sandbox Code Playgroud)

如果出于任何原因,您的代码需要引用" first "," second "和" third ",则创建一个枚举来访问数组的元素,如下所示:

enum Numbers
{
  FirstNumber,
  SecondNumber,
  ThirdNumber
}
Run Code Online (Sandbox Code Playgroud)

然后访问第二个数字的源代码可能如下所示:

numbers[SecondNumber]
Run Code Online (Sandbox Code Playgroud)

如果你想要大小Numbers跟随enum Numbers修改上面的例子中的条目数,如下所示:

enum Numbers
{
  FirstNumber,
  SecondNumber,
  ThirdNumber,
  MaxNumbers
}
Run Code Online (Sandbox Code Playgroud)

然后定义数字

int Numbers[MaxNumbers] = {0};
Run Code Online (Sandbox Code Playgroud)

按照相同的概念,您现在可以为定义的数字定义用户提示:

const char * prompts[MaxNumbers] = {
  "firstNumber",
  "secondNumer",
  "thirdNumber"
};
Run Code Online (Sandbox Code Playgroud)

现在一切都通过循环输入函数来显着减少源代码行(而不是为每个数字编码或多或少相同的东西):

读入:

 for (enum Numbers n = 0; n < MaxNumbers; ++n)
 {
   printf("Please enter %s:\n", prompts[n]);
   scanf("%d", &Numbers[n]);
 }
Run Code Online (Sandbox Code Playgroud)

总结:

 int sum = 0;

 for (enum Numbers n = 0; n < MaxNumbers; ++n)
 {
   sum += Numbers[n];
 }

 printf("The sum is: %d\n", sum);
Run Code Online (Sandbox Code Playgroud)

然而,这两个循环可以合并为一个:

 for (enum Numbers n = 0; n < MaxNumbers; ++n)
 {
   printf("Please enter %s:\n", prompts[n]);
   scanf("%d", &Numbers[n]);
   sum += Numbers[n];
 }
Run Code Online (Sandbox Code Playgroud)

作为最后的注释,留给你的学习,请注意,scanf()很可能会失败.它通过返回值表示这一点.然后,代码可以读取,检测可能的故障并相应地采取行动.