2014-05-21 3 views
0

구조에 대한 질문이 있습니다. 나는 사용자가 편지를 입력하게하고 컴퓨터가 두 개의 값을 반환하도록하려고한다.사용자 입력을 사용하여 구조에서 둘 이상의 값 반환

예를 들면
#include <iostream> 
struct coords{ 
int coordsx1; 
int coordsy1; 
} a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p; 
int main() 
{ 
char first; 
int coordsx1; 
int coordsy1; 
    a.coordsx=0; e.coordsx=0; i.coordsx=0; m.coordsx=0; 
    b.coordsx=1; f.coordsx=1; j.coordsx=1; n.coordsx=1; 
    c.coordsx=2; g.coordsx=2; k.coordsx=2; o.coordsx=2; 
    d.coordsx=3; h.coordsx=3; l.coordsx=3; p.coordsx=3; 
    cin >> first; 
    coordsx1= first.coordsx; // this is the part that doesn't work 
} 

먼저 변수에 대한 사용자 입력 'D'는, I 컴퓨터가 0과 동일하게 3 coordsy1 동일하게 coordsx1의 값을 설정할 경우, 지금까지 다음 I 가지고 무엇 (나는 coordsy1 부분을 아직하지 않았다). 또한 사용자 입력에 대해 둘 이상의 값을 반환하는 좋은 방법입니까?

+0

먼저 구조체가 아닌 코드에서'char'가 있습니다. 왜 당신은 그 coordsx 멤버에 접근 할 수 있다고 생각합니까 –

+0

이'a, b, c, d, e, f, g, h, i , j, k, l, m, n, o, p;'a [16]'에 대해 소리 치다. –

+0

또한'a.coordsx = 0; '은 어떻게 작동합니까? 구조체에는 'coordsx1'멤버가 있습니까? –

답변

2

cin >> first에 사용자가 입력하는 내용은 텍스트이고 first에 저장되며 char입니다. 이것은 문자를 포함하는 변수이며, 이름이 포함 된 문자가 아니기 때문에 작동하지 않습니다.

C++ 변수 이름에 변수의 텍스트 표현을 변환하는 데 필요한 재귀 기능이 없습니다,하지만 당신은 switch 또는,보다 편리하게 체인 if의 명시 적 변환을 수행 할 수 있습니다

switch(first) 
{ 
    case 'a': 
     coordsx1 = a.coordsx; 
     coordsy1 = a.coordsy; 
     break; 
    case 'b': 
     coordsx1 = b.coordsx; 
     coordsy1 = b.coordsy; 
     break; 
    case 'c': 
     coordsx1 = c.coordsx; 
     coordsy1 = c.coordsy; 
     break; 
    // All other cases 
    default: 
     std::cerr << "Wrong input" << std::endl; 
} 

는 다른 방법으로, 당신은 단순히 배열에 데이터를 넣고 인덱스 여기에 문자를 사용할 수 있습니다, 이것은 또한 데이터 초기화가 더 읽기하게 : :-)

#include <iostream> 

struct Coords 
{ 
    int x; 
    int y; 
}; 

Coords coords[3] = { 
    { 1, 2 }, // a 
    { 2, 3 }, // b 
    { 3, 4 }, // c 
}; 

int main(int arg, char** argv) 
{ 
    char first; 
    int coordsx1; 
    int coordsy1; 
    std::cin >> first; 
    if (first > 'c' || first < 'a') 
    { 
     std::cerr << "Wrong input" << std::endl; 
     return 1; 
    } 
    int index = first - 'a'; // Convert 'a' into 0, 'b' into 1, etc. 
    coordsx1 = coords[index].x; 
    coordsy1 = coords[index].y; 
} 
1

먼저 런타임의 문자가 컴파일 타임의 변수 정의가 아님을 알아야합니다!

switch (first) { 
    case 'a': coordsx1=a.coordsx; coordsy1=a.coordsy; break; 
    case 'b': coordsx1=b.coordsx; coordsy1=b.coordsy; break; 
    ... a lot more ... 
    default: std::cerr << "Unknown value entered" << std::endl; 
} 
:

은 당신이 CIN에서 얻을 것은, 당신이 같은 경우 문의 폭포를 작성해야 당신이이 입력에서 출력을 선택하려면

char first; 

그렇게 만들었 기 때문에 문자입니다

std :: vector 또는 std :: map을 살펴보십시오. 이 두 가지 컨테이너는이 유스 케이스에서 많은 도움을 줄 수 있습니다!

+0

STL 용기가 최고입니다! –

관련 문제