2013-06-09 3 views
-3

나는 stdin에서 문자열을 읽고 그것을 문자 벡터에 저장하고 정수 문자 인 - (@)의 위치를 ​​저장하는 함수를 만들려고한다. 입력은 소문자 알파벳과 특수 문자, 즉 '@'로만 구성됩니다. 문자 및 정수 벡터는 모두 전역입니다. 왜 런타임 오류가 발생하는지 알 수 없습니다. 여기에 내 코드는 다음과 같습니다 -이 프로그램이 런타임 오류를 발생시키는 이유는 무엇입니까?

vector<int> v; 
vector<char> s; 

inline int input()    //called in main when we have to read input 
{ 
    char p=getchar(); 
    register int i=0; 
    while((p>='a'&&p<='z')||(p=='@')) 
    { 
     s.push_back(p); 
     if (p=='@') 
     { 
      v.push_back(i); 
     } 
     p=getchar(); 
     i++; 
    } 

    return 0; 
} 
+1

어떤 런타임 오류인지 알지 못해서 도저히 도와 주실 수 없습니다. – djechlin

+5

궁금한 점이 있으시면 * 컴파일 시간 오류를 아직 정리하지 않았습니까? – djechlin

+0

@pinkpanther, 오타였습니다. 내 코드에서 닫는 견적을 확실히 가지고 있습니다. –

답변

1

동안 ((P> = 'A'& & 페이지 < = 'Z') || (p == '@))

당신은 돈' t는 '@'입니다.

+1

어쩌면 OP는 런타임과 컴파일 시간의 차이를 이해하지 못합니다. –

+0

@kenyanke, 내 프로그램에서 닫는 따옴표가 있습니다. 그렇다면 컴파일 타임 오류가 아니라 런타임 오류가 발생한 것입니다. . –

+0

이제이 대답은 유효하지 않습니다. – pinkpanther

1

런타임시 발생하는 오류의 속성을 넣으면 도움이됩니다. 이 오류의 원인이되는 입력 예를 제공하면 도움이됩니다. 오류의 원인에 몇 가지 포인터를 제공 할 수 있습니다

몇 가지 관찰 :

  • 귀하의 벡터는 글로벌 변수입니다. 함수에 전달하고 전역 범위에 저장하지 않으면 훨씬 좋습니다. 이렇게하면 어디에 액세스하고 변경했는지 훨씬 잘 추적 할 수 있으므로 코드를 훨씬 더 유지 관리 할 수 ​​있습니다.
  • 함수 시작시 벡터가 지워지지 않으므로 후속 호출을 통해 빌드가 계속됩니다. 이것은 당신이하고 싶은 일일 수도 아닐 수도 있습니다.
  • 소문자 또는 '@'을 입력하지 않으면 함수가 빨리 종료됩니다. 이것은 고의적으로 보이지만 구두점, 대문자, 숫자 또는 공백은 조기 종료를 초래합니다.
  • 항상 함수에서 0을 반환합니다. 함수가 값을 반환하도록 작성되지 않은 경우 함수는 void로 선언해야합니다.

인라인 및 레지스터 사용을 제거하여 속도가 크게 향상되지는 않을 것입니다.

관련 문제