Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对于循环';具有两种类型变量的s init语句_C++ - Fatal编程技术网

C++ 对于循环';具有两种类型变量的s init语句

C++ 对于循环';具有两种类型变量的s init语句,c++,C++,我想在for的init语句中声明两种类型的变量。就像下面的代码一样。我知道“for(string-word,int-numb;;cin>>word>>numb;)”不起作用。只是想让你知道我想做什么。我的目标是声明具有相同生存期的两种类型的变量,并将它们组合在一起。其他的编码方式也很有用。提前谢谢 #include <iostream> #include <vector> #include <string> #include <utility> u

我想在for的init语句中声明两种类型的变量。就像下面的代码一样。我知道“for(string-word,int-numb;;cin>>word>>numb;)”不起作用。只是想让你知道我想做什么。我的目标是声明具有相同生存期的两种类型的变量,并将它们组合在一起。其他的编码方式也很有用。提前谢谢

#include <iostream>
#include <vector>
#include <string>
#include <utility>
using namespace std;
int main ()
{
    cout<<"enter a word and a number"<<endl;
    for (string word, int numb, ; cin>>word>>numb; )
    {
        //do some work      
    }
return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
coutnumb;)
{
//做些工作
}
返回0;
}
好的,我想这是我能得到的最接近某人建议的

#include <iostream>
#include <vector>
#include <string>
#include <utility>
using namespace std;
int main ()
{
    vector<pair<string,int> > pvec;
    cout<<"enter a word and a number"<<endl;
    {
        int numb=0; 
        for (string word; cin>>word>>numb; )
            pvec.push_back(make_pair(word,numb));
    }
    cout<<pvec[3].second<<endl;
return 0;
} 
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
载体pvec;
coutnumb;)
pvec.push_back(使_配对(单词,麻木));
}

这是不可能的。可以在for循环的初始化语句中声明相同基本类型的两个变量,但不能声明不同基本类型的两个变量。您必须在for循环之外声明一个。这是不可能的。可以在for循环的初始化语句中声明相同基本类型的两个变量,但不能声明不同基本类型的两个变量。您必须在for循环之外声明一个。您尝试这样做的方式不是最干净的方式。我会这样做:

string word;
int num;
while(true)
{
    cin >> word >> num;
    if (!cin.good()) break;
    // do some work
}
int main ()
{
    cout<<"enter a word and a number"<<endl;
    while( cin.good() )
    {
        string word;
        int num;

        cin >> word >> num;
        //do some work      
    }
    return 0;
}
word
num
在相同的范围内(相同的“生存期”)

请注意,您希望用一些合适的条件替换
while(true)


如果希望word和num位于循环范围内,请执行以下操作:

while(true)
{
    string word;
    int num;
    cin >> word >> num;
    if (!cin.good()) break;
    // do some work
}


但我不知道为什么这是必要的。

您尝试这样做的方式并不是最干净的方式。我会这样做:

string word;
int num;
while(true)
{
    cin >> word >> num;
    if (!cin.good()) break;
    // do some work
}
int main ()
{
    cout<<"enter a word and a number"<<endl;
    while( cin.good() )
    {
        string word;
        int num;

        cin >> word >> num;
        //do some work      
    }
    return 0;
}
word
num
在相同的范围内(相同的“生存期”)

请注意,您希望用一些合适的条件替换
while(true)


如果希望word和num位于循环范围内,请执行以下操作:

while(true)
{
    string word;
    int num;
    cin >> word >> num;
    if (!cin.good()) break;
    // do some work
}


我不知道为什么这是必要的。

以下内容未经测试,但应该可以工作:

int main()
{
  std::cout << "enter a word and a number" << endl;
  for (struct { std::string word, int number } vars;
       std::cin >> vars.word >> vars.number;
      )
  {
    //do some work      
  }
  return 0;
}
intmain()
{
std::cout vars.word>>vars.number;
)
{
//做些工作
}
返回0;
}

以下内容未经测试,但应能正常工作:

int main()
{
  std::cout << "enter a word and a number" << endl;
  for (struct { std::string word, int number } vars;
       std::cin >> vars.word >> vars.number;
      )
  {
    //do some work      
  }
  return 0;
}
intmain()
{
std::cout vars.word>>vars.number;
)
{
//做些工作
}
返回0;
}

我相当肯定,在for语句中声明两种不同类型的两个变量是不可能的,但我也看不到这样做的好处:

string word;
int num;
while(true)
{
    cin >> word >> num;
    if (!cin.good()) break;
    // do some work
}
int main ()
{
    cout<<"enter a word and a number"<<endl;
    while( cin.good() )
    {
        string word;
        int num;

        cin >> word >> num;
        //do some work      
    }
    return 0;
}
int main()
{
库特数;
//做些工作
}
返回0;
}

一般来说,我更喜欢使用循环,其中有一些东西需要计数或至少需要迭代。在其他情况下,应该使用while或do循环。

我相当肯定,在for语句中声明两种不同类型的两个变量是不可能的,但我也看不到这样做的好处:

string word;
int num;
while(true)
{
    cin >> word >> num;
    if (!cin.good()) break;
    // do some work
}
int main ()
{
    cout<<"enter a word and a number"<<endl;
    while( cin.good() )
    {
        string word;
        int num;

        cin >> word >> num;
        //do some work      
    }
    return 0;
}
int main()
{
库特数;
//做些工作
}
返回0;
}

一般来说,我更喜欢使用循环,其中有一些东西需要计数或至少需要迭代。其他情况下,应使用while或do循环。

您可以获得的最近的循环是:

int main ()
{
    cout<<"enter a word and a number"<<endl;
    {
        string word;
        for (int numb; cin>>word>>numb; )
        {
            //do some work      
        }
    }
    return 0;
}

由于没有增量或初始化操作,代码实际上是一个while循环,包含两个声明的变量;这可以获得相同的结果并起作用。

您可以获得的最接近的结果是:

int main ()
{
    cout<<"enter a word and a number"<<endl;
    {
        string word;
        for (int numb; cin>>word>>numb; )
        {
            //do some work      
        }
    }
    return 0;
}

由于没有增量或初始化操作,代码实际上是一个while循环,包含两个声明的变量;这会达到同样的效果,并且有效。

什么不起作用?它是否无法编译?是否正在编译但给出了错误的结果?对于(stringword,intnumb,;cin>>word>>numb;)此语句。因为“string”也想将int声明为变量。在以后的文章中,请发布完整的、最少的示例程序。虽然您的程序很小,但它并不完整。为什么让我们所有人都重新键入三个缺少的标题行,而不是自己发布呢?有关完整的最小示例程序的更多信息,请参阅。@Rob:一般来说,我同意。在这个例子中,很明显(至少对我来说)上面的代码在语法上是无效的,OP想知道这样的事情是否可能发生。谢谢,@OliCharlesworth。即使在这种情况下,我也很想看到确切的错误消息——这不仅仅是我需要一个简单的复制、粘贴和编译?它是否无法编译?是否正在编译但给出了错误的结果?对于(stringword,intnumb,;cin>>word>>numb;)此语句。因为“string”也想将int声明为变量。在以后的文章中,请发布完整的、最少的示例程序。虽然您的程序很小,但它并不完整。为什么让我们所有人都重新键入三个缺少的标题行,而不是自己发布呢?有关完整的最小示例程序的更多信息,请参阅。@Rob:一般来说,我同意。在这个例子中,很明显(至少对我来说)上面的代码在语法上是无效的,OP想知道这样的事情是否可能发生。谢谢,@OliCharlesworth。即使在这种情况下,我也很想看到确切的错误消息——这需要我做的不仅仅是简单的复制、粘贴和编译。事实上,他可以声明一个包含这两个变量的结构。她可以,但真的有理由为两个互不相关的项创建一个结构吗?这里的正确答案不是使用for循环,也不是鼓励使用有问题的编程实践作为语法的变通方法。这就是声明一种类型的一个变量。而且,我觉得这种想法令人反感。如果我在代码复查中看到在for循环初始化块中定义了一个结构,我会读到执行它的人的riot act