C 循环直到给出 0

Oda*_*dar -1 c loops for-loop while-loop

我正在尝试创建一个循环,让用户逐个输入数字并计算所有这些数字的总和,直到用户输入 0 作为输入。但是,我的代码只运行一次,然后就停止了。

#include <stdio.h>

int main(void) {
    int i = 0;
    int num;
    int total = 0;

    printf("Give me a number \n");
    scanf("%d", num);
    
    if(num < 0 && num > 0){
        printf("Give me a number \n");
        scanf("%d", num);
        total = total + num;
        i = i + 1;
    }

    printf("The total is %d", total);
}
Run Code Online (Sandbox Code Playgroud)

438*_*427 5

  1. 您的代码中没有循环

  2. 条件(num < 0 && num > 0)始终为假。数字不能是:小于零大于零

  3. 错误呼叫scanf

您可能想要:

printf("Give me a number \n");
if (scanf("%d", &num) != 1) exit(1);
while(num != 0){
    total = total + num;
    i = i + 1;
    printf("Give me a number \n");
    if (scanf("%d", &num) != 1) exit(1);
}
Run Code Online (Sandbox Code Playgroud)

如果用户输入非整数,例如字母,上述解决方案将退出程序。

将结束非整数输入循环的另一种解决方案是:

printf("Give me a number \n");
while(scanf("%d", &num) == 1 && num != 0){
    total = total + num;
    i = i + 1;
    printf("Give me a number \n");
}
Run Code Online (Sandbox Code Playgroud)

最后一个解决方案甚至可以写得更紧凑一些 - 例如:

while(printf("Give me a number \n"), scanf("%d", &num) == 1 && num != 0){
    total = total + num;
    i = i + 1;
}
Run Code Online (Sandbox Code Playgroud)

阅读起来有点困难,但避免了重复的行。