2013-12-19 4 views
0

У меня есть кусок кода, который показан нижеКонсольные сбой приложения по неизвестной причине

#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

ответ

3

Ваше заявление scanf неверно. Вы не передаете ему аргумент (указатель).

Изменить

scanf("%d,&a"); 

в

scanf("%d",&a); 
+1

спасибо глупую ошибку, но она делает меня так хотелось, будет принимать после 15 – sosytee

+0

я сказал, что это работает, спасибо – sosytee

+0

Извини! Я неправильно понял :) – haccks

1

Для решения C - Я не уверен, в стороне от ранее упомянутых ошибки в Scanf форматирования (который компилятор должен был предупредить о), который бы положил результат .. ну, бог знает, где на стеке ... Я не уверен, но я подозреваю, что скомпилированный код займет следующее место в ram в качестве адреса, а wr там. 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; 
} 
Смежные вопросы