C使用while循环添加输入

时间:2012-08-28 22:30:50

标签: c while-loop do-while

这是我第一次在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);
}

3 个答案:

答案 0 :(得分:1)

您需要额外调用此函数:syscall_read_int()。尝试调试并查看发生的情况。

您覆盖了变量int input的值;因此,在您提到的特定情况下,您没有将第一个值添加到变量int 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);
}

希望它有所帮助!

答案 1 :(得分: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);
}

答案 2 :(得分:0)

当你的程序被写入时,它会丢失你输入的第一个值(它没有做任何事情)而不是最后一个,所以如果你输入1,2,3它会返回5,而不是3.你在运行吗?在代码末尾有一个额外的syscall_read_int()的版本?