我的代码片段如下所示
#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
答案 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;
}