스택을 구현하는 C 프로그램이 있습니다. I 배열의 최소의 요소를 계산하기위한 명령 인 '분'을 입력하려면C 프로그램이 scanf에서 영원히 기다립니다.
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
struct node *link;
};
struct stack{
struct node *head;
struct node *data_node;
};
int push(struct stack *a_stack, int i){
a_stack->data_node = malloc(sizeof(struct node));
if(a_stack->data_node == NULL){
puts("Error: Cannot allocate sufficient memory.");
exit(1);
}
a_stack->data_node->data = i;
a_stack->data_node->link = a_stack->head;
a_stack->head= a_stack->data_node;
return 0;
}
int pop(struct stack *a_stack){
if(a_stack->head==NULL){
return '\n';
}
int temp = a_stack->head->data;
a_stack->data_node = a_stack->head;
a_stack->head = a_stack->head->link;
free(a_stack->data_node);
return temp;
}
int minimum(struct stack *a_stack){
if(a_stack->head==NULL){
return '\n';
}
int min = a_stack->head->data;
struct node *a_node = a_stack->head;
while(a_node!=NULL){
if(min>a_node->data){
min = a_node->data;
a_node = a_node->link;
}
}
return min;
}
int init_stack(struct stack *a_stack){
a_stack->head = NULL;
a_stack->data_node = NULL;
}
int handle_input(struct stack *test){
char* input_string = (char*)malloc(20);
scanf("%s", input_string);
// gets(input_string);
char* pop_cmd = "-";
char* min_cmd = "min";
int num;
if (strcmp(pop_cmd, input_string) == 0){
printf("%d\n", pop(test));
}
else{
if (input_string[0] == 'm'){
printf("%d\n", minimum(test));
}
else{
num = atoi(input_string);
push(test, num);
}
}
return 0;
}
int main(void){
int no_of_input, counter;
struct stack test;
init_stack(&test);
scanf("%d", &no_of_input);
for(counter=no_of_input; counter>0; counter=counter-1){
handle_input(&test);
};
return 0;
}
문제는, 프로그램은 입력에 영원히 기다린다. 꽤 오래 동안 주위를 검색 한 후에도 왜 이런 일이 일어나는지 알 수 없습니다.
handle_input 메소드에서 char 포인터를 사용하고 있기 때문에 맞습니까? char * input_string = (char *) malloc (20); scanf ("% s", input_string); – user2277872
대부분의 시스템에서'scanf'는 Enter 키를 누르기 전까지는 반환되지 않습니다. (이것을 라인 버퍼링이라고합니다.) 당신은 그렇게하고 있습니까? – Gene
@Gene 예. 나는 입력하고 Ctrl + D를 시도했다. 그러나 아직도 아무것도. – tarashish