2016-04-27 51 views
-1
int main() 
{ 

    double a = 1; 
    double b = 3; 
    int n = 128; 
    int answer = 0; 
    printf("select an option(1, 2) "); 
    scanf("%d", answer); 
    double y = calcIntegral (answer, a, b, n); 
    printf("%f \n", y); 

    system("pause"); 
    return 0; 
} 

它得到Scanf,然後如果接受答案,但完全停止,我必須強制任務結束。這是怎麼回事?這與我寫的其他程序相同,我認爲。我嘗試使用%i,並使用char而不是double來表示變量「answer」。它說它無法訪問內存。Scanf運行時錯誤,必須按Ctrl-Alt刪除

+3

'scanf(「%d」,&answer)',變量answer是一個整數,而不是指針。 –

+0

我建議閱讀[this](http://www.tutorialspoint.com/c_standard_library/c_function_scanf.htm)。 – Chirality

+0

另外,得到一個工作的操作系統,W2K或更高版本。 –

回答

2

對於scanf修飾符d,它匹配一個可選的帶符號的十進制整數,下一個指針必須是指向int的指針。說標準。另外請確保始終檢查scanf返回值。

int ret = scanf("%d", &answer); 
if (ret != 1) { 
    // failed to input the number 
} 
0

使用scanf(),你讀的變量必須是一個指針。所以,你的語句:

scanf("%d", answer); 

應該是:

scanf("%d", &answer); 

因爲你已經宣佈answer是一個int,所以它的內存地址的指針int


在另一方面,如果你想讀一個string,並宣佈:

char *str; 

分配了它的一些記憶,那麼該語句將是:

scanf("%s", str); 

str被聲明爲指向char

+1

在'char *'的例子中,你必須在執行'scanf'之前讓'str'指向一些分配的內存。在'scanf'中你應該包含最大字段寬度以防止緩衝區溢出 –

相關問題