2013-10-06 5 views
0

정말 간단한 코딩을 만들고 오류가 없지만 실행하면 '나이'쪽에 입력을 넣을 수 없습니다.배열에서 int를 사용하는 방법?

#include <stdio.h> 
#include <conio.h> 


struct baby 
{ 
    char name[2][30]; 
    char sex[2][7]; 
    char birthday[2][12]; 
}; 

struct parents 
{ 
    char nama[2][30]; 
    int age[2]; 
}; 

struct momdad 
{ 
    struct parents father; 
    struct parents mother; 
}; 

struct momdad info; 
struct baby newborn; 

int main() 
{ 
    int i; 

    for(i=0;i<2;i++) 
    { 
     printf("\nEnter baby's name %d: ",i+1); 
     gets(newborn.name[i]); 

     printf("Enter baby's sex %d (Female/Male): ",i+1); 
     gets(newborn.sex[i]); 

     printf("Enter baby's birthday %d (dd/mm/yyyy): ",i+1); 
     gets(newborn.birthday[i]); 

     printf("Enter father's name %d: ",i+1); 
     gets(info.father.nama[i]); 
     printf("Enter father's age %d: ",i+1); 
     gets(info.father.age[i]); 

     printf("Enter mother's name %d: ",i+1); 
     gets(info.mother.nama[i]); 
     printf("Enter mother's age %d: ",i+1); 
     gets(info.mother.age[i]); 



    } 

    printf("\n\n\tNEW BORN BABY IN KUANTAN HOSPITAL"); 
    printf("\n\n==============================================="); 

    for(i=0;i<2;i++) 
{ 


     printf("\n\nBaby name: %s",newborn.name[i]); 
     printf("\nSex: %s",newborn.sex[i]); 
     printf("\nBirthday: %s",newborn.birthday[i]); 
     printf("\n\nFather name: %s",info.father.nama[i]); 
     printf("\nFather age: %s",info.father.age[i]); 
     printf("\n\nMother name: %s",info.mother.nama[i]); 
     printf("\nMother age: %s",info.mother.age[i]); 
     printf("\n\n----------------------------------------------"); 
} 

    getch(); 
} 

이것은 내 선언이 잘못되었다고 생각하지만 어떻게 알지 못합니다.

int age[2]; 

및 입력이 여기에 여기

printf("Enter father's age %d: ",i+1); 
gets(info.father.age[i]); 

N에 넣어 될 것이다

printf("Enter mother's age %d: ",i+1); 
gets(info.mother.age[i]); 

내가 프로그래밍에 여전히 새로운 해요 죄송이 간단한 질문

+2

'gets()'는 문자열이 아닌 정수를 읽는 데 사용됩니다. 'scanf()'를 보아라. 이것은 다른 타입을 읽는데 사용될 수있다. – Barmar

+0

@Barmar 전에 scanf를 사용했지만 똑같은 일이 발생했습니다. ( –

+1

@EricJablow 물론 남성과 여성의 두 남녀가 있습니다. 아기가 섹스를 하나만 가지고 있습니까? –

답변

0
요청에 대한

gets()을 사용하지 마십시오. 안전하게 사용할 수 없으며 2011 년부터는 언어에서 삭제되었습니다.

의견에서 fflush(stdin);을 언급하는 것을 언급합니다. fflush의 동작은 입력 스트림에 대해 정의되지 않습니다. 일부 구현은 동작을 정의하지만, 그 동작에 따라 프로그램을 이식 할 수 없게됩니다. 어쨌든 필요하지 않습니다.

입력 데이터를 읽는 가장 간단한 방법은 scanf()을 사용하는 것이지만 그 자체의 문제가 있습니다. 예를 들어, scanf("%d", &n);을 사용하고 123을 입력하면 123을 사용하고 그 뒤에 오는 모든 항목 (예 : 개행)을 읽는 것을 기다리게됩니다.

입력을 읽는 더 좋은 방법은 을 사용하여 텍스트 줄을 읽은 다음 sscanf을 사용하여 입력 줄의 데이터를 구문 분석하는 것입니다. 그것은 여기에

를 다시 예입니다 :

#define MAX_LEN 200 
char line[MAX_LEN]; 
int num; 

printf("Enter an integer: "); 
fflush(stdout); 

if (fgets(line, MAX_LEN, stdin) == NULL) { 
    fprintf(stderr, "Error reading line\n"); 
    exit(EXIT_FAILURE); 
} 
if (sscanf(line, "%d", &num) != 1) { 
    fprintf(stderr, "Error parsing integer from line\n"); 
    exit(EXIT_FAILURE); 
} 
printf("The number is %d\n", num); 

내가 메시지가 실제로 나타나는지 확인하기 위해 처음 printffflush(stdout)를 호출합니다. stdout은 줄 바꿈이 가능합니다. 즉, 전체 줄을 인쇄 할 때까지 출력이 나타나지 않습니다. fflush은 항상 필요한 것은 아니지만 좋은 생각입니다.

fgets은 라인이 더 길면 또는MAX_LEN 문자의 전체 라인을 읽습니다. (gets에는 최대 입력 크기를 지정할 방법이 없으므로 대상 배열의 크기에 관계없이 항상 더 많은 내용을 읽고 임의의 메모리를 깨뜨릴 수 있습니다.) fgets은 문제가 있으면 null 포인터를 반환하고이를 확인합니다.

sscanfscanf과 유사하지만 표준 입력이 아닌 메모리의 문자열에서 데이터를 읽습니다. (지정된 파일에서 읽는 fscanf도 있습니다.) 성공적으로 스캔 한 항목의 수를 반환하므로 1 이외의 값은 오류를 나타냅니다.

이러한 모든 기능에 대한 설명서를 읽는 것이 좋습니다. 나는 그들이하는 모든 것을 다 다루지 않았다. 실제로 에 대한 설명서를 읽고 사용하는 표준 라이브러리 기능을 읽어야합니다.

관련 문제