简单C程序不存储变量中输入的正确值

时间:2017-02-10 10:33:25

标签: c input

有谁可以告诉我为什么输入的正确值没有存储在这个程序中?

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

int main()
{
    int num, sum=0;
    printf("Enter the number: ");
    while(num!=0)
    {
        sum = sum+num;
        scanf("%d", &num);
    }
    printf("Answerr = %d", sum);
    return 0;
}

这是输出:

Enter the number: 2
0
Sum = 10

5 个答案:

答案 0 :(得分:3)

更好:

num= 0;
do
{
    scanf("%d", &num);
    sum = sum+num;
} while(num!=0);

请注意,num的初始化仍然需要scanf可能会失败,这不会影响num

答案 1 :(得分:2)

你无法知道这部分究竟会做什么:

while (num != 0)
{
    sum = sum + num;
    scanf("%d", &num);
}

因为num未初始化,因此您要向sum添加一个您不知道的值。将其更改为:

while(num != 0)
{
    scanf("%d", &num);
    sum = sum + num;
}

这样num在您添加时就会有一个值,并且还会将num初始化为与0不同的值,例如:

int num = 2;

这样您的while循环至少会执行一次(换句话说,这样您就有机会阅读num)。

更好的方法是使用这样的循环:

int num = 0;
do
{
    scanf("%d", &num);
    sum = sum + num;
}while (num != 0);

以确保您的循环至少执行一次。即使采用这种方法,您仍应初始化num 以防scanf失败(因此num无法获取值)。

为了检查scanf的返回值,请使用以下代码:

if ( scanf("%d", &num) == 1)
    sum = sum + num;

答案 2 :(得分:0)

将您的代码更改为:

int main()
{
    int num = 0, sum = 0;
    printf("Enter the number: ");
    do
    {
        scanf_s("%d", &num);
        sum = sum + num;
    } while (num != 0);

    printf("Answer = %d", sum);
    return 0;
}

我将while循环替换为do while循环。您已初始化sum,否则您将在首次运行中使用未定义的值(如果使用while循环)。

答案 3 :(得分:0)

变量num未初始化。结果,循环具有未定义的行为。您还应该在添加值之前检查输入是否有效。考虑到标题<stdlib.h>中的声明均未使用。所以你可以删除标题。

程序可以按以下方式查看

#include <stdio.h>

int main( void )
{
    long long int sum = 0;

    while ( 1 )
    {
        int num;

        printf( "Enter number (0 - exit): " );

        if ( scanf( "%d", &num) != 1 || num == 0 ) break;

        sum += num;
    }

    printf( "\nAnswer = %lld\n", sum );

    return 0;
}

或者您可以在循环之前放置提示,例如

#include <stdio.h>

int main( void )
{
    long long int sum = 0;

    printf( "Enter numbers (0 - exit): " );

    while ( 1 )
    {
        int num;

        if ( scanf( "%d", &num) != 1 || num == 0 ) break;

        sum += num;
    }

    printf( "\nAnswer = %lld\n", sum );

    return 0;
}

根据C标准函数main,不带参数应声明为

int main( void )

答案 4 :(得分:0)

您在读取之前添加num的值 喜欢这个

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

int main()
{
    int num, sum=0;
    printf("Enter the number: ");
    do{
        scanf("%d", &num);
         sum = sum+num;

    }
    while(num!=0);

    printf("Answerr = %d", sum);
    return 0;
}