控制台应用程序因未知原因崩溃

时间:2013-12-19 14:34:35

标签: c

我的代码片段如下所示

#include<cstdlib>
#include<iostream>
#include<stdio.h>
#include<stdlib.h>

using namespace std;

int main()
{   
    int a;
    printf("Please select a choice \n1.Enter New Artist\n2.List All Artist information\n3.   Show sorted List of Artists\n4.Add Album to existing Artist\n5.Remove Album from existing Artist\n6.Update Artist info\n7.Search for Artist");
    scanf("%d,&a");
    if(a==1)
    {
        printf("no");
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}

在运行代码时,它会显示菜单,如果我输入1,则需要几秒钟才能崩溃并显示信息

  

document1.exe已停止工作

如何调试此问题。我正在使用dev c++ 4.9.9.2

2 个答案:

答案 0 :(得分:3)

您的scanf声明错误。你没有传递参数(指针)。

更改

scanf("%d,&a");

 scanf("%d",&a);

答案 1 :(得分:1)

对于C解决方案 - 我不确定 除了前面提到的 scanf格式错误(编译器应该警告过), 这会产生结果..好吧,上帝知道堆栈在哪里... 我不确定,但我怀疑编译后的代码会将ram中的下一个位置作为地址,并在那里写。 Borked stack ==真的,真的,真的很难调试错误。

由于您使用的是c ++编译器,如果您可以使用c ++,您可能希望在此处考虑使用某些STL的评估。 我假设您将使用CR终止输入

int main (int argv, char** argv]
{

    int a;
    std::string inputString;
    std::cout <<"Please select a choice \n""1.Enter New Artist\n2.List All Artist information\n3.   Show sorted List of Artists\n4.Add Album to existing Artist\n5.Remove Album from existing Artist\n6.Update Artist info\n7.Search for Artist";
    std::getline(std::cin,inputString);
    std::stringstream inputStream(inputString);
    inputStream >> a;  // could also have been parsed with std::stol, or strtol. - my preference due to error checking - what if your user entered 'byte me'?  
    if (a==1)
    {
        printf("no");
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}