我正在解决一个竞争性问题,我需要确保用户输入正确通过了向量。如何打印向量的值?
rem // Store Unix-(Linux-)style path in variable:
set "FILEPATH=/opt/My/Troublesome/Path"
rem // Precede drive and replace `/` by `\`:
copy "C:%FILEPATH:/=\%\MyFile" .
答案 0 :(得分:2)
您的代码中有几个问题
在
while(cin >> a >> b >> c){ result = 0; }
可能不是您想要的,因为您将仅在EOF上退出循环,或者输入的内容不是 int
不要在result = 0;
之后关闭 while 之后考虑代码,因此必须删除'}'
在
while(cin >> d);{
您当然不希望循环中有一个空的主体,“;”必须删除
在
for( int i = 0; i < v.size();i++);
您当然不希望循环中有一个空的主体,“;”必须在该行的末尾删除,这也允许 i 在下一行cout << v[i] << endl;
中有效,否则您将无法编译
请注意,您将带符号/无符号混合使用,最好对 i
使用size_t
而不是 int
注意while(cin >> d)
在EOF上停止,或者如果输入了无效的 int ,但是在这种情况下,您将返回第一个 while ,由于该原因而无法运行EOF或错误。如果要再次循环退出EOF情况,则必须清除错误并绕过无效的输入,否则,您就不想循环,因此用 if 替换第一个 while 。 em>
您设置了结果和 c ,但从未使用过它们。
包含两个循环的提案:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(){
int a;
int b;
int c;
int d;
int result;
while(cin >> a >> b >> c) {
result = 0;
vector <int > v;
while(cin >> d) {
v.push_back(d);
}
for( size_t i = 0; i < v.size();i++)
cout << v[i] << endl;
if (a>=b)
cout << 0 << endl;
else {
}
// clear error
cin.clear();
string dummy;
getline(cin, dummy); // or use cin.ignore(...);
}
}
编译和执行:
vxl15036 /tmp % g++ -pedantic -Wall -Wextra c.cc
vxl15036 /tmp % ./a.out
1 2 3
11 22 33 44 55 a
11
22
33
44
55
1 2 3
111 222 a
111
222
b
vxl15036 /tmp %
我使用无效整数 a 停止第二个 ,然后使用无效整数 b 停止第一个 两圈后
答案 1 :(得分:0)
如果没有错误的分号,您的程序会更好地工作。
while(cin >> d);{
^ HERE
和
for( int i = 0; i < v.size();i++);
^ HERE
分号结束一条语句,所以写作
for( int i = 0; i < v.size();i++);
与写作完全相同
for( int i = 0; i < v.size();i++)
{
}
这段代码
for( int i = 0; i < v.size();i++);
cout << v[i];
不应编译,因为i
变量仅在for循环内声明,但由于多余的分号v[i]
在for循环后而不在其内部。