如何确定向量的内容?

时间:2019-06-13 10:42:02

标签: c++

我正在解决一个竞争性问题,我需要确保用户输入正确通过了向量。如何打印向量的值?

rem // Store Unix-(Linux-)style path in variable:
set "FILEPATH=/opt/My/Troublesome/Path"
rem // Precede drive and replace `/` by `\`:
copy "C:%FILEPATH:/=\%\MyFile" .

2 个答案:

答案 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循环后而不在其内部。