입력받으면서 같은 이름이 있는지 확인하는 프로그램
BabySue
질문 제목 :
입력받으면서 같은 이름이 있는지 확인하는 프로그램
이름을 입력받을 때마다 파일에 같은 이름이 있는지 검사합니다.
만약 있으면 다른 이름을 입력하라는 메세지를 띄우고 새로 입력받아야 합니다.
그러나 번호와 이름을 한번 입력받고general protection fault in moudle이라는 메세지가 나옵니다.
그리곤 더 이상 입력할 수 없습니다. (참고 trubo c++ 컴파일러를 사용하고 있습니다.)
설명 부탁드립니다. 파란색으로 표시된 부분들 위주로 보시면 됩니다.
질문 내용 :
#includestdio.h
#includestring.h
typedef struct student{
int num; //번호
char name[20]; //이름
}students;
students data[10];
void main()
{
int i=0;
int j=0;
int k=0;
FILE *fp;
fp=fopen(dat.txt,r+);
while(1)
{
puts(번호: );
scanf(%d,&data[i].num);
getchar();
puts(이름: );
scanf(%s,data[i].name);
getchar();
/*띄어쓰기를 하기위해 fgets를 사용하려 합니다. 아래와 같은 방식이 맞나요?
fgets(data[i].name,10,stdin);
//1-, 10개의 글자까지 입력받을 수 있음, sdin 화면에 출력??
(data[i].name+(strlen(data[i].name)-1))=NULL; //Lvalue required 에러발생
//fgets 사용으로 인한 개행문자를 지우기 위함 */
while(!feof(fp))
{
fscanf(fp,%d%s,data[j].num,data[j].name);
/*이름을 입력받을 때마다 기존에 입력된 이름과 같은 이름이
있는지 검사하기 위해 fscanf로 데이터를 읽어옴 */
/*이름을 입력받을 때마다 읽어야할 이름이 늘어나므로
이름을 입력받고 바로 확인할 수 있도록 이름 밑에 둠 */
j++;
}
for(k=0;kj;k++)
//j++로 이미 입력된 이름의 갯수를 알려줌
if(!strcmp(data[k].name, data[i].name))
/*data[i].name - 새로 입력한 이름
data[k].name - 이미 입력된 이름
for문으로 k를 증가시키면서 기존 이름과 새로운 이름을 계속 비교함 */
{
puts(같은 이름을 입력할 수 없습니다.);
--i; //i값을 하나 빼 같은 이름이 파일에 쓰이지 않게 함
puts(이름 : ); //같은 이름이 있으면 새로 입력해야 함?
scanf(%s,data[i].name);
getchar();
}
fprintf(fp,%d%s\n,data[i].num,data[i].name); //파일에 입력받은 데이터를 씀
i++;
}
}
-
말글
fopen이 있으면 fclose가 있어야 됩니다.
그리고 fscanf를 사용해서
while(!feof(fp))
fsanf 어쩌구저쩌구...
j++;
}
이렇게 파일을 읽으면, 그 다음에 읽는 위치는 파일의 끝이 됩니다.
처음에 한 번은 제대로 될지는 모르지만 그 다음번에 읽으려고 하면 에러가 됩니다.
다음과 같은 구조로 바꾸시길 바랍니다.
1. 이름을 입력받는다.
2. fopen으로 \rt\ 모드를
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2693956 | PlaySound재생이 안됩니다!(C에 음악넣기) | 지존 | 2025-05-06 |
2693928 | &와 *의 사용에 관한 명확한 이해 | 제나 | 2025-05-06 |
2693903 | 반복문 설명좀요 ㅠㅠ (2) | 란새 | 2025-05-06 |
2693869 | stdio.h 는 왜 쓰는건가요? (1) | 큰꽃들 | 2025-05-06 |
2693842 | 포인터 변수의 주소값끼리 더하는 것에 대해서 질문드립니다. (1) | 진솔 | 2025-05-05 |
2693811 | 소수 출력;;;; | 화이트캣 | 2025-05-05 |
2693788 | 이런 함수는 없나요? (3) | 앤드류 | 2025-05-05 |
2693758 | txt파일 불러와서 행렬로 저장 | 큰애 | 2025-05-05 |
2693727 | scanf 오류 문제!! (2) | 큰나래 | 2025-05-04 |
2693704 | 구조체 주소록 문제인데 도와주세요 (2) | 도1도캣 | 2025-05-04 |
2693676 | 열혈강의 c언어 질문입니다 | 하양이 | 2025-05-04 |
2693647 | 12.620000 을요 12.620 으로 어떻게 표현해요? (2) | 파도 | 2025-05-04 |
2693619 | 타이틀 코드.. | 단순드립 | 2025-05-03 |
2693591 | 컴파일 에러에서 질문드립니다 (3) | 게자리 | 2025-05-03 |
2693463 | 동적할당 이용시 fwrite사용을 어떻게 해야하나요..? (10) | 일본어못해요 | 2025-05-02 |
2693387 | 배열문제입니다 수정오류캡쳐했습니다 (6) | 연하얀 | 2025-05-01 |
2693356 | text 입출력 내림차순 질문입니다 ㅠ | 빛글 | 2025-05-01 |
2693328 | C언어를이용해서 .txt파일 외에 다른 확장자 파일 삭제가 가능한지.. (2) | 대나무 | 2025-05-01 |
2693299 | 파일입출력 바이너리파일 | 독특한 | 2025-04-30 |
2693273 | 오류 (1) | 귀1여운렩 | 2025-04-30 |