C ++ 단일 문자를 출력하고 입력합니다
-
05-09-2019 - |
문제
C ++로 프로그램을 작성하여 각 노드에서 단일 문자를 보유하는 이중 연결 목록을 구현합니다. Append 기능을 통해 문자를 삽입하고 있습니다.
doubly_linked_list adam;
adam.append('a');
이 기능은 다음과 같이 구현됩니다.
//Append node
node* append(const item c){
//If the list is not empty...
if(length){
//maintain pointers to end nodes
node* old_last_node = last;
node* new_last_node = new node;
//re-assign the double link and exit link
old_last_node->next = new_last_node;
new_last_node->back = old_last_node;
new_last_node->next = NULL;
//re-assign the last pointer
last = new_last_node;
}
//If this is the first node
else{
//assign first and last to the new node
last = first = new node;
//assign nulls to the pointers on new node
first->next = first->back = NULL;
}
//increase length and exit
++length;
return last;
}
그러나 C ++가 문자를 처리하는 방식과 관련하여 문제가 있다고 생각합니다. 내 목록을 인쇄 할 때, 어떻게 든 내 목록에 추가 된 캐릭터를 인쇄하지 않습니다. 이것이 제가 인쇄하는 데 사용하는 것입니다.
//Friendly output function
friend std::ostream& operator << (std::ostream& out_s, const doubly_linked_list& source_list){
//create iteration node pointer
node* traverse_position = source_list.first;
//iterate through, reading from start
for(int i = 1; i <= source_list.length; ++i){
//print the character
out_s << (traverse_position->data);
traverse_position = traverse_position->next;
}
//return the output stream
return out_s;
}
인쇄 할 때 쓰레기를 얻습니다. 그것은 내가 내 목록에 결코 추가 된 캐릭터를 인쇄합니다. 당신은 메모리 어딘가에서 나오는 캐릭터 만 알고 있습니다. 이것을 일으킬 수있는 것은 무엇입니까?
해결책
값을 어디에 할당하고 있습니까? c
에서 append()
기능? 나는 당신이 이중-연결된 부분에 너무 많이 집중했을 수도 있고 저장 데이터 부분에는 충분하지 않을까 걱정됩니다. :)
다른 팁
다른 사람들이 이미 언급했듯이, 당신은 당신이 부여했던 캐릭터를 저장하는 것을 잊었습니다. 합리적인 실수입니다. 미래에 피하기 위해 컴파일러가 도움을 줄 수 있습니다.
대부분의 컴파일러가 제공합니다 경고 기술적으로 괜찮지 만 아마도 당신이 정말로하고 싶은 것이 아닐 것입니다. 귀하의 경우, 당신은 매개 변수를 선언했습니다 c
, 그러나 당신은 그것을 사용하지 않았습니다. 경고가 활성화되면 컴파일러가 그 사실을 알아 차리고 사용하지 않았다고 말했습니다. 그것은 아마도 당신이 그 기능을 작성하지 않았다는 것을 알게되었을 것입니다.
일반적인 경고를 가능하게하는 GCC의 옵션은 다음과 같습니다 -Wall
. ( "경고", "모두"를위한 "W"입니다. 벽과 관련이 없습니다. 그러나 실제로는 아닙니다. 모두 경고도 예를 들어 :
g++ -Wall list-program.cpp
다른 컴파일러에는 비슷한 옵션이 있습니다. 자세한 내용은 컴파일러의 문서를 확인하십시오.
Append Method에서 실제로 새 노드에 항목을 배치하는 곳은 없습니다. 인쇄 할 때는 해당 메모리 위치 (일부 임의의 값)에 어떤 값이 발생하는지 인쇄합니다.