Вывод второго отрицательного элемента в столбце
int main(int argc, char** argv) {
int i, j, n = 5, m = 6, k, i2;
srand(233);
int W[n][m];
for(i = 0;i < n;i++){
for(j = 0;j < m;j++){
W[i][j] = rand()%100-50;
printf("%3d", W[i][j]);
}
cout <<endl;
}
cout << endl;
for(j = 0; j < n; j++) {
k = 0;
i2 = 0;
for(i = 0; i < m; i++) {
if(W[i][j] < 0) {
k++;
}
if(k == 2 && i2 == 0) {
cout << W[i][j] << endl;
}
}
}
//cout << i2;
}
На выходе я иногда получаю еще и полследующий символ, в чем может быть проблема?
Ответы (1 шт):
Автор решения: Smoliarick
→ Ссылка
- переменные i и j лучше объявлять в цикле for, чтобы они были локальными
- в цикле, где вы выводите 2 элемент перепутаны значения n и m, что иногда приводит к выводу неинициализированной переменной
- в условии k == 2 лучше сделать выход из цикла с помощью break
Пример исправления:
P.S. Я новичок, поэтому возможно что-то получилось в результате не так, как вы хотели
#include <iostream>
int main(int argc, char** argv) {
const int n = 5, m = 6;
srand(233);
int W[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
W[i][j] = rand() % 100 - 50;
printf("%3d", W[i][j]);
}
std::cout << std::endl;
}
std::cout << std::endl;
for (int j = 0; j < m; j++) {
for (int i = 0, k=0; i < n; i++) {
if (W[i][j] < 0) k++;
if (k == 2) {
std::cout << W[i][j] << std::endl;
break;
}
}
}
}