연결된 목록 노드를 만드는 프로그램을 작성하고 있습니다. 그 후, 일부 기능 (삽입, 검색, 업데이트 및 인쇄)을 추가합니다. 연결된 목록에는 번호, 이름 및 수량이 포함되어 있습니다.C : fgets 함수가 작동하지 않는 이유는 무엇입니까?
main 함수는 사용자에게 작업 코드를 입력하도록 요청한 다음 함수가 요청한 작업을 호출합니다.
main()
{
char code;
int c;
for(;;)
{
printf("i: insert\ns: search\nu: update\np: print\n");
printf("Enter operation code: ");
scanf("%c",&code);
while((c=getchar())!= '\n'&& c!=EOF);
switch(code)
{
case 'i': insert();
break;
case 's': search();
break;
case 'u': update();
break;
case 'p': print();
break;
case 'q':return 0;
default: printf("Illegal code\n");
break;
}
printf("\n");
}
}
모든 기능이 올바르게 작동합니다. 그러나, 삽입 함수에서, 나는 사용자로부터 문자열 입력을 얻기 위해 fgets 문을 사용한다. (NAME_LEN = 25)
void insert()
{
node *previous,*current,*new_node;
new_node = malloc(sizeof(node));
printf("Enter part number: ");
scanf("%d",&new_node->number);
for(current = inventory,previous=NULL;
current != NULL&& new_node->number > current->number;
previous = current,current = current -> next);
if(current != NULL && new_node ->number == current->number)
{
printf("Part already exists.\n");
free(new_node);
return;
}
printf("Enter name part: ");
fgets(new_node->Name,NAME_LEN+1,stdin); // i use fgets to input string name
printf("Enter quantity on hand: ");
scanf("%d",&new_node->on_hand);
new_node -> next = current;
// move to the next node
if(previous == NULL)
inventory =new_node;
else
previous->next = new_node;
}
불행히도이 코드는 작동하지 않습니다. 프로그램에서 그 내용을 보여줍니다.
i: insert
s: search
u: update
p: print
Enter operation code: i
Enter part number: 2
Enter name part: Enter quantity on hand: 3
이름 부분을 놓친 것 같습니다.
또한 새 노드를 삽입하면 프로그램에 자동으로 스위치의 기본 사례가 표시됩니다.
i: insert
s: search
u: update
p: print
Enter operation code: i
Enter part number: 2
Enter name part: Enter quantity on hand: 3
i: insert
s: search
u: update
p: print
Enter operation code: Illegal code
무슨 일이 일어날 지 설명해 주시겠습니까?
무엇이 잘못 되었습니까? – coderredoc
scanf 대신 fgets를 사용하면 scanf가 inbuffer에 내용을 남깁니다. –
힌트 : * "왜 (C 라이브러리 함수 이름 삽입) 함수가 작동하지 않습니까?"* 질문을 시작할 때 대개 - 문제. –