2015-06-05 2 views
1

У меня есть очень простой цикл if, который принимает в виде массива (вектора векторов), называемого данными, читает 0-й элемент из КАЖДОЙ строки (т. Е. Элементов данных [i] [0]) и выводит 5-й элемент специфического IFF строки THAT, он удовлетворяет условию, что первый элемент равен целочисленному pid (пользователь, определенный ранее в коде.) Если строка не начинается с этого элемента, я хочу, чтобы она ничего не выводит.simple for if loop не работает правильно

Вот мой код для этого цикла:

for(int i = 0; i < data.size(); i++) { 
    if(data[i][0] = pid) { 
     cout << data[i][5] << endl; 
    } 
} 

Однако, когда я запускаю программу, она выводит 5-й элемент каждой строки, а не только те, которые начинаются с PID. AKA, C++, похоже, полностью игнорирует мой оператор if.

У кого-нибудь есть ответ на этот вопрос?

Спасибо заранее!

ответ

1

Вы используете оператор присваивания = вместо оператора сравнения ==

if(data[i][0] = pid) { 
      ^^^ 

Что касается меня, я хотел бы написать эти петли следующим образом

for (size_t i = 0; i < data.size(); i++) 
{ 
    if (data[i][0] == pid && data[i].size() > 5) 
    { 
     cout << data[i][5] << endl; 
    } 
} 
+0

Большое вам спасибо! Я должен был знать, что это так, но я очень новичок в этом. – khfrekek

+0

@khfrekek Добро пожаловать. :) –

5

Вы должны использовать == вместо = внутри условия if:

if(data[i][0] == pid) 

В противном случае вы просто назначая значение pid к элементу массива, и это будет справедливо, если pid не 0.

+0

Спасибо так много! Я должен был знать, что это так, но я очень новичок в этом. – khfrekek