2017-02-10 66 views
0

有人可以告诉我为什么输入的正确值没有被存储在这个程序中?简单的C程序没有存储变量中输入的正确值

#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 
+1

您需要阅读*之前*将其添加到'sum'。现在,'num'被使用未初始化。 sum = sum + num; scanf(“%d”,&num);' - >'scanf(“%d”,&num); sum = sum + num;' –

+1

你还没有初始化'num',这就是为什么你有未定义的行为 –

+0

也,不检查['scanf'](http://en.cppreference.com/w/c/io/fscanf)的返回值。 –

回答

2

你无法知道究竟这部分就可以了:

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

因为num尚未被初始化,所以你加入sum您不知道的值。将其更改为:

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

使num有当您添加它,也初始化num到的东西比0不同,例如一个值:您while环路以执行

int num = 2; 

所以至少一个(换句话说,这样你就有机会阅读num)。


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

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

,以确保您的循环将至少执行一次。即使采用这种方法,在scanf失败(因此num没有得到值)的情况下,仍应初始化num

为了检查scanf返回值,使用这段代码:

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

当你想输入时,'do/while'总是最好的解决方案至少一次在循环中 –

+0

@ Jean-FrançoisFabre编辑并提到它 – Marievi

3

做的更好:

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

num初始化仍需要为scanf可能失效,这不会影响num

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循环)。

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标准的功能主要不带参数将被宣布之前放置提示像

int main(void) 
0

您在读取i之前添加num的值t 是这样做的

#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; 
} 
+0

'num'需要初始化。 – Marievi