2016-12-16 170 views
0

我是C語言的絕對初學者,我在codeblocks中編寫了這個代碼並構建它,它沒有錯誤。該程序是,我們輸入兩個整數,並顯示,總結,減法,乘法和no1和no2的劃分。爲什麼運行這段代碼時cmd會崩潰?

下面的代碼:

#include <stdio.h> 
int main() 
{ 
int no1,no2,sum,sub,multi,div; 

printf("Enter your first number"); 
scanf("%d", &no1); 
printf("Enter second number"); 
scanf("%d", no2); 

sum=(no1+no2); 
sub=(no1-no2); 
multi=(no1*no2); 
div= (no1/no2); 

printf ("%d + %d = %d \n",no1,no2,sum); 
printf ("%d - %d = %d \n",no1,no2,sub); 
printf ("%d * %d = %d \n",no1,no2,multi); 
printf ("%d/%d = %d \n",no1,no2,div); 

return 0 ; 
} 

我得到0的錯誤,但是當我跑了,CMD打開,然後NO1和NO2然後程序崩潰我的輸入值,並給出了消息窗口將調查問題。

+0

謝謝你,這就是問題所在。所以代碼塊不會顯示爲一個錯誤吧? – 2016-12-16 10:54:48

+0

我們不能將問題遷移到stackOverflow嗎? 「 – linuxunil

+5

」......它沒有錯誤。「但它確實有警告,如果它們已打開,它們會提醒您這個問題。始終,總是在開啓所有警告的情況下進行編譯,並將產生它們的代碼視爲不完整或不正確。 – Blrfl

回答

4

仔細查看了這個片段:scanf("%d", no2);

+1

謝謝,是的,「&」不見了:) – 2016-12-16 10:55:45

+0

使用一種沒有類型安全的語言的樂趣... – CodesInChaos

+0

公平起見,如果您啓用所有警告與'-Wall'(並且通常你應該) – Timidger

1

說你聲明一個名爲foo的變量。

int foo; 

這個變量佔用一些內存。它佔用四個字節的內存(因爲int是四個字節寬)。

現在讓我們聲明另一個變量。

int *foo_ptr = &foo; 

foo_ptr被聲明爲指向int的指針。我們已經初始化它來指向foo變量。

正如我所說的,foo佔據了一些記憶。它在內存中的位置稱爲它的地址。炭「&」是「地址的」運算符。

這個操作符返回一個變量的地址。在我們的例子中富,從而foo_ptr現在指向foo的變量的地址內存。

思考foo是一個大小爲sizeof(int)個字節的框,這個框的位置就是它的地址,當你訪問地址時,你實際上訪問它指向的框的內容

boxes

1

您錯過了'&'這裏...

printf("Enter second number"); 
    scanf("%d", &no2); 
1

你忘了把 '&' 在第二scanf函數:)