2015-10-08 50 views
-4

我已經寫了一個簡單的循環在C中,這意味着打印n^2給出N從用戶。正確編譯後程序失敗

#include <stdio.h> 

int main() 
{ 
    int n; 
    int N; 

    printf("Input iterations: "); 
    scanf("%d", N); 

    return 0; 
} 

我使用的是gcc編譯器:它輸入N.我已經去除了循環,它仍然崩潰當所有我現在做的是用scanf函數輸入N.這裏是我寫後崩潰和編譯它使用命令提示符(Windows 10),用下面的命令:

gcc "C2 Loops.c" -o "C2 Loops.exe" 

它編譯罰款,然後運行,當我進入:

"C2 Loops.exe" 

,但只要我進入價值對於N,程序cras HES:

Crash message Crash message 2

作爲邊注(I通常程序用C++)使用命名空間std加入 ; 在編譯時引發錯誤。這是正常的嗎?

任何幫助這個問題,將不勝感激,謝謝。

+0

不只是提供鏈接。所有必要的信息都必須包含在問題中!並閱讀'scanf'手冊頁! – Olaf

+2

您應該始終使用-Wall進行編譯並認真對待警告。 –

+0

您還應該閱讀相關手冊。 google「man scanf」,或者,如果在Cygwin上,只需輸入「man scanf」。 –

回答

4
scanf("%d", N); 
     ^missing & 

%d預計int地址。

2

您應該將變量的地址傳遞給scanf(),而不是變量本身。更改

scanf("%d", N);

scanf("%d", &N);

否則,scanf將嘗試輸入值設爲其地址N點。這裏沒有初始化N的值,這意味着程序會在這裏處理不可預知的內存地址。這就是你的程序失敗的原因。

0

只有使用這部分代碼,程序纔會收回參數N並結束。如果你沒有對這個參數做任何事情。也許你應該向我們展示你如何寫出n^2命令。它可能類似於

printf("N^2 = %d", N*N);