Вот простая программа, в которой суммируются все числа, отправленные в командной строке. Это должно принять произвольное количество значений.
Он продолжает давать мне 0 для каждой строки. Я устал, чтобы сделать несколько изменений, но он продолжает давать тот же результат
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
for (int i = 0; i < argc; i++)
{
int sum=0;
sum+=atoi("argc[i]");
cout << sum << endl;
}
return 0;
}
"argc[i]"
это буквальная строка поэтому при преобразовании atoi
дает 0! sum
должен быть инициализирован перед циклом:
int main(int argc, char *argv[]) {
int sum=0;
for (int i = 1; i < argc; i++) {
sum += atoi(argv[i]);
}
cout << sum << endl;
return 0;
}
Условно argv[0]
это имя программы (или, по крайней мере, имя, используемое в командной строке для вызова программы), поэтому лучше начать с индекса 1.
Вам нужно тратить десятки часов на чтение ваших книг и экспериментов на компьютере. Задавать такой простой вопрос вам совсем не поможет (и считается грубым …).
Не забудь включить отладочную информацию и все предупреждения при компиляции (например, с g++ -Wall -g
при использовании НКУ). Затем научитесь использовать отладчик (например. gdb
).
Ваши основы не ясны, я предлагаю вам прочитать книгу.
Программа должна быть такой:
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
int sum=0;
for (int i = 0; i < argc; i++)
{
sum+=atoi(argv[i]);
}
cout << sum << endl;
return 0;
}
перенести сумму параметров за пределы цикла !!
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
int sum=0;
for (int i = 0; i < argc; i++)
{
sum+=atoi(argv[i]);
cout << sum << endl;
}
return 0;
}