1

cでプログラミングするのは初めてです。私は、0 を入力するまで、ユーザーが入力した数字を受け取ることになっているこのコードを持っています。その後、それらをすべて追加する必要があります。たとえば、1、2、3、最後に 0 と入力すると、6 が出力されるはずですが、何らかの理由で最後の値が追加されません。私が言及したケースでは、6 ではなく 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();

    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

10行目に余分なsyscall_read_int()があります。とにかく、少なくとも1つの整数を読み取る必要があるため、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 に答える
1

この関数の余分な呼び出しがあります: syscall_read_int()。デバッグして、何が起こっているかを確認してください。

変数の値を上書きしていましたint inputint resultその結果、あなたが言及した特定のケースでは、変数に最初の値を追加していませんでした:

を挿入1し、次に23最後に0。最初の値 - 1- は追加されていないため、プログラム5は (1 + 2 + 3) ではなく (2 + 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(); //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 に答える
0

あなたのプログラムが書かれているので、最後ではなく最初に入力した値 (それは何もしていません) が欠けているので、1、2、3 を入力すると、3 ではなく 5 が返されます。コードの最後に余分な syscall_read_int() がありますか?

于 2012-08-28T22:43:12.090 に答える