c언어 gets 함수 오류 질문
조회수 2007회
void main()
{
int m=1000 ,MAX = 0;;//최솟값 최댓값
int i, j; //for문
int a = 0, l = 80, try = 0, r = 0; //사람수 글자수
scanf("%d%*c", &a);
char** name = 0;
int** rank = 0;
int** votes = 0;
char NAMESIZE[NAME_SIZE];
fgetc(stdin);
if (a <= 20)
{
name = malloc(sizeof(char*) * a);
for (i = 0; i < a; i++)
{
name[i] = malloc(sizeof(char) * 80);
}
for (i = 0; i <a; i++)
{
fgets(name[i],NAME_SIZE,stdin); @@@@@@@@@@@@@@@@@@
}
rank = malloc(sizeof(int*) * 1000);
for (i = 0; i <10; i++)
{
rank[i] = malloc(sizeof(int) * a);
}
votes = malloc(sizeof(int*) * 1000);
for (i = 0; i <= 1000; i++) //1000바꾸기
{
votes[i] = malloc(sizeof(int) * a);
}
for (j = 0; j <= a; j++) //여기도
{
votes[0][j] = 0;
}
}
else printf("20명 이하로 등록해주세요.");
vote(name, rank,votes, a, try,m,MAX);
for(i=0;i<=a;i++)
{
free(name[i]);
free(rank[i]);
}
free(name);
free(votes);
for(i=0;i<=1000;i++)
{
free(votes[i]);
}
free(rank);
}
@@@부분 봐주세요 비쥬얼 스튜디어에서는 잘 작동했는데 dev-c++프로그램은 이름을 입력하면 바로 종료가 되네요.어떻게 해결해야할까요? c언어 입니다. gets함수에서 오류가 있는 것 같아요
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
2 답변
-
에러메시지를 잘 해석하면 보통 해결이 가능합니다. 아니면, 에러메시지를 구글에만 넣어서 검색해도 해결방법을 찾을 수 있어요. 질문을 올릴 때에도 에러메시지를 같이 올려주세요.
-
gets대신에 fgets를 사용할 때에는 주의가 필요합니다.
gets 함수는 입력에서 '\n'을 읽어 들이지 않지만, fgets 함수는 '\n'까지 읽어 들입니다. 이 차이때문에 gets함수와 fgets(...,stdin)은 동일한 동작을 수행하지 않습니다.
참고로 gets 함수는 deprecated되어서 사용할 수 없는 함수입니다.
아래 코드 참고하세요.
- 코드
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #define MAX_NAME_SIZE 80 int main() { int people_number = 0; // 사람 수 const int max_number = 20; printf("사람 수: "); scanf("%d", &people_number); char** name = NULL; if (people_number > max_number) { puts("20명 이하로 등록해주세요."); } else { name = (char**)malloc(sizeof(char**) * people_number); if (name) { for (int i = 0; i < people_number; i++) name[i] = (char*)malloc(sizeof(char) * (MAX_NAME_SIZE + 1)); for (int i = 0; i < people_number; i++) if (name[i]) { printf("%d번째 사람 이름 입력: ", i + 1); scanf("%s", name[i]); } for (int i = 0; i < people_number; i++) if (name[i]) { puts(name[i]); } } } if (name) { for (int i = 0; i < people_number; i++) { if (name[i]) free(name[i]); } free(name); } return 0; }
- 결과
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력