2016-04-27 29 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'中你应该包含最大字段宽度以防止缓冲区溢出 –

相关问题