这是我第一次在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);
}
答案 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()的版本?