2017-02-10 23 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

相關問題