我是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号以后的数字,但失败了...请帮助。
答案 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正文之外。