#c #arrays
Вопрос:
У меня есть 2D-массив, желающий проверить, равна ли сумма (каждого) столбца 0 или нет. Более того, добавление к целым числам из массива, похоже, приводит к неожиданному результату.
#include<bits/stdc .h>
using namespace std;
int main() {
long long int lines;
int temp;
int is_0 = 1;
cin>>lines;
int numbers[3][lines];
for(int i = 0; i < 3; i ){
for(int j = 0; j < lines; j ){
cin>>temp;
numbers[i][j]=temp;
}
}
for(int i = 0; i<3; i ){
temp = 0;
for(int j = 0; j<lines;j ){
temp = numbers[i][j];
}
cout<<temp<<endl;
}
return 0;
}
пример ввода:
2
1
1
1
-1
-1
-1
пример вывода:
2
0
-2
Есть идеи?
Комментарии:
1. Похоже, вам может понадобиться научиться использовать отладчик для пошагового выполнения вашего кода. С хорошим отладчиком вы можете выполнить свою программу построчно и посмотреть, где она отклоняется от того, что вы ожидаете. Это важный инструмент, если вы собираетесь заниматься каким-либо программированием. Дальнейшее чтение: как отлаживать небольшие программы и руководство по отладке
2. Это не решает вопрос, но код не нуждается
temp
в цикле ввода.std::cin >> numbers[i][j];
работает просто отлично.3. Нарисуйте картинку; какие значения куда идут, когда код считывает входные данные? Какие значения идут куда, когда в циклах, которые вычисляют суммы? Подсказка: название
lines
вводит в заблуждение.4.
cin>>lines; int numbers[3][lines];
похоже на VLA. Я думал, что VLA не является стандартом в C . Возможно, в этом случае используется расширение компилятора?
Ответ №1:
Программа работает так, как ожидалось. Вы создаете следующую матрицу
1 1
1 -1
-1 -1
и здесь
for(int i = 0; i<3; i ){
temp = 0;
for(int j = 0; j<lines;j ){
temp = numbers[i][j];
}
cout<<temp<<endl;
}
Вы суммируете номера каждой строки.
Комментарии:
1. Круто! 1 Это показывает разницу между проверкой и проверкой . . .