整数之和,不计13和13之后的数字

时间:2018-09-07 14:48:11

标签: c

我是C语言的新手,并尝试编写一个程序,该程序读取一系列整数,直到遇到零值为止,然后打印所有等于13或紧接在之后的数字的总和。 13.确保输入中至少有一个零。 最多100行输入,每行包含一个整数。至少其中一行包含整数0。 我的代码是这样的:

    #include <stdio.h>
int main ()
{

    int sum = 0;
    int data[100];
    int i = 0;
    scanf("%d\n", &data[i]);
    while (data[i] != 0 && i < 100)  {

        if (data[i] == 13) {
            sum = sum;
        } else if (i > 0 && data[i-1] == 13) {
            sum = sum;
        } else {
            sum += data[i];
            i++;
        }
        scanf("%d\n", &data[i]);
    }
    printf("%d",sum);

}

我试图摆脱13号以后的数字,但失败了...请帮助。

2 个答案:

答案 0 :(得分:4)

您也可以尝试以下方法:

// extra flag outside loop
int found13 = 0;

while (data[i] != 0 && i < 100)  {
    if (data[i] == 13) {
        found13 = 1; // set flag
    } else if (found13) {
        found13 = 0; // clear flag
    } else {
        sum += data[i];
        i++;
    }
    scanf("%d\n", &data[i]);
}

改进:

  • 不回头看上一个元素
  • 不需要经常检查i > 0):

编辑:进一步重构

int sum = 0;
int found13 = 0;
int data;

while (scanf("%d\n", &data) == 1 && data != 0) {
    if (data == 13) {
        found13 = 1; // set flag
    } else if (found13) {
        found13 = 0; // clear flag
    } else {
        sum += data;
    }
}

改进:

  • 正如@PaulOgilvie所指出的那样,您不再需要数组来存储结果
  • ...您也不需要i
  • ...也无需在循环外额外调用scanf
  • 现在可用于任意数量的输入

答案 1 :(得分:1)

最简单的方法是在if语句的一个布尔表达式中收集所有条件:

        if (data[i] != 13 && (i == 0 || data[i-1] != 13){
            sum += data[i];
        }
        i++;

...并将i移至if正文之外。