1

这是我第一次用c编程。我有这段代码应该接受用户输入的任何数字,直到输入 0。然后它应该将它们全部加起来。例如,如果他们输入 1,然后是 2,然后是 3,最后是 0,它应该打印出 6。但由于某种原因,它没有添加最后一个值。在我提到的情况下,它将打印 3 而不是 6。

#include <stdlib.h>
#include <stdio.h>

static char syscall_buf[256];
#define syscall_read_int()          atoi(fgets(syscall_buf,256,stdin))

main()
{
    int input;
    input = syscall_read_int();

    int result = 0;
    input = syscall_read_int();
    while (input != 0){
        result = result + input;
        input = syscall_read_int();
    }
    printf("%i\n", result);
}
4

3 回答 3

1

你有一个额外的调用这个函数:syscall_read_int(). 尝试调试并查看发生了什么。

您正在覆盖变量的值int inputint result因此,在您提到的特定情况下,您没有将第一个值添加到变量中:

插入1,然后2,然后3,最后0。第一个值 - 1- 没有被添加,因此程序打印5(2 + 3) 而不是6(1 + 2 + 3)。

这就是问题所在,试试这个:

#include <stdlib.h>
#include <stdio.h>

static char syscall_buf[256];
#define syscall_read_int()          atoi(fgets(syscall_buf,256,stdin))

main()
{
    int input;
    //input = syscall_read_int(); //you need to comment this line
    int result = 0;
    input = syscall_read_int();
    while (input != 0){
        result = result + input;
        input = syscall_read_int();
    }
    printf("%i\n", result);
}

希望能帮助到你!

于 2012-08-28T22:35:52.447 回答
1

您在第 10 行有一个额外的 syscall_read_int()。无论如何,我建议您使用 do-while 循环,因为您需要读取至少一个整数。以下带有 do-while 循环的代码有效:1 + 2 + 3 + 0 = 6

#include <stdlib.h>
#include <stdio.h>

static char syscall_buf[256];
#define syscall_read_int()          atoi(fgets(syscall_buf,256,stdin))

main()
{
    int input;
    int result = 0;

    do {
        input = syscall_read_int();
        result = result + input;
    } while(input != 0);

    printf("%i\n", result);
}
于 2012-08-28T22:50:34.577 回答
0

在编写程序时,它会丢失您输入的第一个值(它什么都不做)而不是最后一个,因此如果您输入 1、2、3,它会返回 5,而不是 3。您正在运行一个版本代码末尾有一个额外的 syscall_read_int() 吗?

于 2012-08-28T22:43:12.090 回答