c언어 초기화되지 않은 search 지역 변수를 사용했습니다 오류
#include
#include
#include
/*typedef struct ListNode
{
element data;
struct ListNode *link;
}ListNode;*/
typedef struct AddressList
{
char StudentNumber[50];
char Name[50];
char PhoneNumber[50];
char Email[50];
struct AddressList *next;
}AddressList;
AddressList *head = NULL;
void display()
{
struct AddressList *p;
p = head;
p = p->next;
while (p != 0)
{
printf("\n이름: %s 전화번호: %s", p->Name, p->PhoneNumber);
p = p->next;
}
printf("\n");
}
void Add(char *Name, char *StudentNumber, char *PhoneNumber, char *Email)
{
AddressList *data;
AddressList *pdata;
data = head;
while (head !=NULL&&data->next)
{
data = data->next;
}
pdata = (AddressList*)malloc(sizeof(AddressList));
strcpy_s(pdata->Name,50,Name);
strcpy_s(pdata->Email,50,Email);
strcpy_s(pdata->StudentNumber,50,StudentNumber);
strcpy_s(pdata->PhoneNumber,50,PhoneNumber);
pdata->next = NULL;
data = pdata;
printf("등록 완료");
} //data입력 함수
//void DataOutput(struct AddressList *); //data출력 함수
//ListNode StudentNumber, Name, PhoneNumber, Email;
void SubChoice2()
{
AddressList *p, *temp, *before;
int SubChoice2;
char Name[50];
char StudentNumber[50];
char PhoneNumber[50];
printf("------------------\n");
printf("1.이름으로 삭제\n");
printf("2.학번으로 삭제\n");
printf("3.전화번호로 삭제\n");
printf("------------------\n");
printf("번호를 선택하시오.\n");
scanf_s("%d", &SubChoice2);
switch (SubChoice2)
{
case 1:
printf("이름 :");
scanf_s("%s", Name,50);
p = head;
while (p != NULL)
{
if (strcmp(p->Name, Name) == 0)
{
if (p == head && p->next == NULL)
{
free(p);
printf("%s : 삭제함\n", Name);
break;
}
else if (p == head &&p->next != NULL)
{
head = p->next;
free(p);
printf("%s : 삭제함\n", Name);
p = head;
break;
}
before->next = p->next;
free(p);
printf("%s : 삭제함\n", Name);
}
else if (p->next == NULL)
{
printf("존재하지 않습니다.");
}
before = p;
p = p->next;
}
break;
case 2:
printf("학번 :");
scanf_s("%s", StudentNumber, 50);
p = head;
while (p != NULL)
{
if (strcmp(p->StudentNumber, StudentNumber) == 0)
{
if (p == head && p->next == NULL)
{
free(p);
printf("%s : 삭제함\n", StudentNumber);
break;
}
else if (p == head &&p->next != NULL)
{
head = p->next;
free(p);
printf("%s : 삭제함\n", PhoneNumber);
p = head;
break;
}
before->next = p->next;
free(p);
printf("%s : 삭제함\n", PhoneNumber);
}
else if (p->next == NULL)
{
printf("존재하지 않습니다.");
}
before = p;
p = p->next;
}
break;
case 3:
printf("전화번호 :");
scanf_s("%s", PhoneNumber, 50);
p = head;
while (p != NULL)
{
if (strcmp(p->PhoneNumber, PhoneNumber) == 0)
{
if (p == head && p->next == NULL)
{
free(p);
printf("%s : 삭제함\n", PhoneNumber);
break;
}
else if (p == head &&p->next != NULL)
{
head = p->next;
free(p);
printf("%s : 삭제함\n", PhoneNumber);
p = head;
break;
}
before->next = p->next;
free(p);
printf("%s : 삭제함\n", PhoneNumber);
}
else if (p->next == NULL)
{
printf("존재하지 않습니다.");
}
before = p;
p = p->next;
}
break;
}
}
void SubChoice3()
{
int SubChoice3;
AddressList *Search;
printf("------------------\n");
printf("1.이름으로 검색\n");
printf("2.학번으로 검색\n");
printf("3.전화번호로 검색\n");
printf("------------------\n");
printf("번호를 선택하시오.\n");
scanf_s("%d", &SubChoice3);
char Name[50];
char StudentNumber[50];
char PhoneNumber[50];
switch (SubChoice3)
{
case 1:
scanf_s("%s", Name,50);
while (1)
{
if (strcmp(Search->Name, Name) == 0)
{
printf("이름 : %s, 학번 : %d, 전화번호 : %s, 이메일 : %s\n", Search->Name, Search->StudentNumber, Search->PhoneNumber, Search->Email);
return;
}
}
break;
case 2:
scanf_s("%s", StudentNumber,50);
while (1)
{
if (strcmp(Search->StudentNumber, StudentNumber) == 0)
{
printf("이름 : %s, 학번 : %d, 전화번호 : %s, 이메일 : %s\n", Search->Name, Search->StudentNumber, Search->PhoneNumber, Search->Email);
return;
}
}
break;
case 3:
scanf_s("%s", PhoneNumber,50);
while (1)
{
if (strcmp(Search->PhoneNumber, PhoneNumber) == 0)
{
printf("이름 : %s, 학번 : %d, 전화번호 : %s, 이메일 : %s\n", Search->Name, Search->StudentNumber, Search->PhoneNumber, Search->Email);
return;
}
}
break;
}
}
/*void displayi(struct node *r)
{
r = head;
if (r == NULL)
{
return;
}
while (r != NULL)
{
printf("%d ", r->data);
r = r->data->next;
}
printf("\n");
}*/
int main()
{
int MainChoice;
printf("----------------\n");
printf("1.주소 등록\n");
printf("2.주소 삭제\n");
printf("3.주소 검색\n");
printf("----------------\n");
printf("원하는 기능의 번호를 선택하시오.");
scanf_s("%d", &MainChoice);
switch (MainChoice)
{
case 1:
printf("---------------------\n");
printf("이름 :");
char Name[50];
scanf_s("%s", Name,50);
printf("\n학번 :");
char StudentNumber[50];
scanf_s("%s", StudentNumber,50);
printf("\n전화번호 :");
char PhoneNumber[50];
scanf_s("%s", PhoneNumber,50);
printf("\n이메일 :");
char Email[50];
scanf_s("%s", Email,50);
printf("--------------------");
Add(Name,StudentNumber,PhoneNumber,Email);
main();
break;
case 2:
SubChoice2();
break;
case 3:
SubChoice3();
case 4:
if (head == NULL)
{
printf("List is Empty\n");
}
else
{
printf("Element(s) in the list are : ");
}
break;
}
return 0;
}
여기에서 제목과 같은 오류가 void Subchoice2()-case1-if (strcmp(p->Name, Name) == 0)에서 발견되었습니다. 그런데 어떻게 고쳐야 되는지 모르겠습니다. 프로그래밍 능력자분들 부탁드립니다.
1. 소스코드는 (code) (/code) 로
1. 소스코드는 (code) (/code) 로 감싸주세요.(괄호는 꺾인 괄호로)
저러면 아무도 못 읽습니다.
2. 컴파일 오류 적으실거면 컴파일러와 컴파일 오류 코드를 포함해서 보여주세요.
또, 질문하기전에 먼저 구글에 해당 에러코드로 검색해보세요.
3. strcpy_s() 보니까 VS 쓰시는 것 같은데,
MS VS에서는 최근 C언어를 더 이상 지원 하지 않습니다.
C언어와 C++언어는 다른 언어입니다.
두 언어의 교집합이 있을지언정 C++이 C를 온전하게 포함하지는 않습니다.
질문하신 내용을 code 블럭으로 감싸 봤습니다.
질문하신 내용을 code 블럭으로 감싸 봤습니다. #include 다음에 나오는 헤더 파일은 제가 대충 추측해서 넣어봤습니다. indentation은 질문 올리신 분이 code 블럭안에 넣어서 올리시면 다시 살아날 겁니다.
위 소스코드를 ex2.c 로 저장하여
해봤습니다. 아래와 같은 에러가 나네요.
에러메시지에는 안 나타나지만 SubChoice2를 함수이름으로도 변수이름으로도 사용하신게 보이네요. 이러면 헷갈리지 않나요? 일부러 그리하신 건지는 모르겠지만...
세벌 https://sebuls.blogspot.kr/
댓글 달기