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