2012-07-28 10 views
0

나는 C의 새로운 그리고 난이 구조체가 예를 들어 multipule 입력 에 관한 몇 가지 도움을받을 싶어요 :C 언어로 여러 입력을받는 방법?

typedef struct person{ 
    char * name; 
    int age; 
    } 

를 내가의를 얻을 함수 작성하려면 : 이름 나이 이름 세 명 시대. .. 내가 할 수있는 방법이 있니? 나중에 값을 가져올 수 있습니까? 내가 그런 일하고 싶어 "..."내가 사용할 수있는 자바처럼

void my_func(char* name, int age , char* name1,int age1.....) 

:

내가 좋아하는 뭔가를 의미 ..

void my_func(char* name, int age , char* name1,int age1.....){ 
    int num_of_ppl = length of the input/2 
    person p1 ; 
    p1.name = first input name 
    p1.age = first input age 

감사!

+1

당신이 우리에게 몇 가지를 표시 할 수 있습니다 우리에게 출발점을 주려고 했나요? – cnicutar

+0

http://www.eskimo.com/~scs/cclass/int/sx11b.html – wroniasty

+0

* 다중 입력 * (아마도 일부 입력 스트림에서)과 * 가변 인수 * 사이의 관계는 무엇입니까? 귀하의 용어가 잘못 나와 혼란 스럽습니다 : 입력이 인수가 아닙니다 –

답변

0

당신이 변수 인수 목록과 기능은 의 va_list를 사용하려면

#include <cstdarg> 
using namespace std; 
void myFunction(int num, ...) 
{ 
    va_list arguments;       // A place to store the list of arguments 
    va_start (arguments, num);     // Initializing arguments to store all values after num 
    for (int x = 0; x < num; x++)    // Loop until all numbers are added 
     func(va_arg (arguments, person));  // get next value of argument and call a function 
    va_end (arguments);      // Cleans up the list 

} 
+0

"u"는 사용하지 말고 "you"를 사용하십시오. –

0

언어는 매우 낮은 수준의 언어이므로 각 필드를 처리하는 방법을 결정해야합니다. input_person의 호출자가 적절하게 destroy_person를 호출해야합니다 협약에

typedef struct person_st { 
    char* name; // malloc-ed string 
    int age; 
} Person; 

// allocate a Person of given name and age 
Person* make_person(const char* n, int a) { 
    if (!n || a<0) return NULL; 
    Person* p = malloc(sizeof(Person)); 
    if (!p) 
    perror("malloc Person"), exit(1); 
    p->name = strdup(n); 
    if (!p->name) 
    perror("strdup Person"), exit(1); 
    p->age = a; 
    return p; 
} 

// destroy a Person and the data inside 
void destroy_person(Person*p) { 
    if (!p) return; 
    free (p->name); 
    free (p); 
} 

// read and allocate a Person 
Person* input_person(FILE*f) { 
    if (!f) return NULL; 
    char name[104]; 
    int age; 
    memset (name, 0, sizeof(name)); 
    age = 0; 
    if (fscanf(f, " %100[A-Za-z] %d", &name, &age)<2) 
    return NULL; 
    return make_person(name, age); 
} 

: 귀하의 경우

당신은 아마도 무언가 같이 적절하게 지적 데이터를 소유 name이다, 코드 무엇을 결정해야합니다.

질문에 대한 오해가 생겼을 수 있습니다. variadic function (입력 또는 출력과 관련이 없음)을 단순히 코딩 하시겠습니까? 그런 다음 신중하게 <stdarg.h> header을 사용하십시오. 가변 인자 함수는 C에 잘못 입력되어 있음을 알아 두십시오. GCC를 사용하면 sentinel function attribute을 줄 수 있으며 GCC를 사용자 정의 할 수도 있습니다. MELT으로 일부 유형 검사를 추가하십시오.

+0

감사합니다! 나는 "variadic function"을 보았다. 그리고 그것은 내가보고있는 것으로 보인다 !!! 고마워요! :) – user1391863

1

당신은 stdarg.h에서 가변 인자 기능을 사용할 수 있습니다

// 
// First argument specifies the number of name/age pairs supplied 
// 
void my_func(int persons, char *name1, int age1, ...) { 
    int age, i; 
    char *name; 
    va_list vl; 
    va_start(vl, age1); 

    for (i = 1; i < persons; i++) { 
    name = va_arg(vl, char*); 
    age = va_arg(vl, int); 
    // Do something with the values 
    } 

    va_end(vl); 
} 
관련 문제