C++ 使用用户输入从结构返回多个值

C++ 使用用户输入从结构返回多个值,c++,struct,C++,Struct,我有一个关于结构的问题。我试图让用户输入一个字母,让计算机返回两个值。以下是我到目前为止所拥有的: #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.coord

我有一个关于结构的问题。我试图让用户输入一个字母,让计算机返回两个值。以下是我到目前为止所拥有的:

#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
}
#包括
结构坐标{
int-coordsx1;
int-coordsy1;
}a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;
int main()
{
焦优先;
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>>首先;
coordsx1=first.coordsx;//这是不起作用的部分
}
例如,如果用户首先输入变量“d”,我希望计算机将coordsx1的值设置为等于3,coordsy1的值设置为等于0(我还没有完成coordsy1部分)。
另外,这是一种为用户输入返回多个值的好方法吗

用户在
cin>>first
中输入的是文本,它存储在
first
中,即char。这是一个包含字符的变量,而不是名称为包含字符的变量,这就是它不起作用的原因

C++没有将变量的文本表示形式转换为变量名所需的自反功能,但您可以使用chained
if
s或更方便的
开关显式转换:

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;
}
开关(第一个)
{
案例“a”:
coordsx1=a.coordsx;
coordsy1=a.coordsy;
打破
案例“b”:
coordsx1=b.coordsx;
coordsy1=b.coordsy;
打破
案例“c”:
coordsx1=c.coordsx;
coordsy1=c.coordsy;
打破
//所有其他情况
违约:
标准:cerr优先;
如果(第一个>c'| |第一个std::cerr用户在
cin>>中输入的第一个
是文本,它存储在
第一个
中,即char。这是一个包含字符的变量,而不是名称为包含字符的变量,这就是它不起作用的原因

C++没有将变量的文本表示形式转换为变量名所需的自反功能,但您可以使用chained
if
s或更方便的
开关显式转换:

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;
}
开关(第一个)
{
案例“a”:
coordsx1=a.coordsx;
coordsy1=a.coordsy;
打破
案例“b”:
coordsx1=b.coordsx;
coordsy1=b.coordsy;
打破
案例“c”:
coordsx1=c.coordsx;
coordsy1=c.coordsy;
打破
//所有其他情况
违约:
标准:cerr优先;
如果(第一个>c'| |第一个std::cerr用户在
cin>>中输入的第一个
是文本,它存储在
第一个
中,即char。这是一个包含字符的变量,而不是名称为包含字符的变量,这就是它不起作用的原因

C++没有将变量的文本表示形式转换为变量名所需的自反功能,但您可以使用chained
if
s或更方便的
开关显式转换:

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;
}
开关(第一个)
{
案例“a”:
coordsx1=a.coordsx;
coordsy1=a.coordsy;
打破
案例“b”:
coordsx1=b.coordsx;
coordsy1=b.coordsy;
打破
案例“c”:
coordsx1=c.coordsx;
coordsy1=c.coordsy;
打破
//所有其他情况
违约:
标准:cerr优先;
如果(第一个>c'| |第一个std::cerr用户在
cin>>中输入的第一个
是文本,它存储在
第一个
中,即char。这是一个包含字符的变量,而不是名称为包含字符的变量,这就是它不起作用的原因

C++没有将变量的文本表示形式转换为变量名所需的自反功能,但您可以使用chained
if
s或更方便的
开关显式转换:

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;
}
开关(第一个)
{
案例“a”:
coordsx1=a.coordsx;
coordsy1=a.coordsy;
打破
案例“b”:
coordsx1=b.coordsx;
coordsy1=b.coordsy;
打破
案例“c”:
coordsx1=c.coordsx;
coordsy1=c.coordsy;
打破
//所有其他情况
违约:
标准:cerr优先;
如果(第一个>c'| |第一个
您首先必须了解,运行时中的字符不是编译时的变量定义

你从cin得到的是一个角色,因为你创造了

char first;
因此,如果要从输入中选择输出,必须编写case语句级联,如:

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;
 }
开关(第一个){
案例“a”:coordsx1=a.coordsx;coordsy1=a.coordsy;break;
案例“b”:coordsx1=b.coordsx;coordsy1=b.coordsy;break;
……更多。。。
默认值:std::cerrUps:-)

您首先必须了解,运行时中的字符不是编译时的变量定义

你从cin得到的是一个角色,因为你创造了

char first;
因此,如果要从输入中选择输出,必须编写case语句级联,如:

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;
 }
开关(第一个){
案例“a”:coordsx1=a.coordsx;coordsy1=a.coordsy;break;
案例“b”:coordsx1=b.coordsx;coordsy1=b.coordsy;break;
……更多。。。
默认值:std::cerrUps:-)

您首先必须了解,运行时中的字符不是编译时的变量定义

你从cin得到的是一个角色,因为你创造了

char first;
因此,如果要从输入中选择输出,必须编写case语句级联,如:

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;
 }
开关(第一个){
案例“a”:coordsx1=