Ввод — Нужна помощь с простой калькулятор командной строки проекта Переполнение стека

если кто-то поможет, это будет высоко ценится и будет много значить!

Так что я боролся с этой, по-видимому, простой задачей кода.

Эта программа включает командную строку.

Для ситуации, когда аргументы командной строки не передаются, должно отображаться мое имя «Джеймс».

Если есть 2 аргумента, он должен добавить два аргумента.

Если есть 3, он должен делать то же, что и третий аргумент (a для сложения чисел из первых двух и m для умножения и т. Д.).

Если бы ребята могли исправить мой код, я был бы очень признателен, так как я искал целую вечность, и он скоро должен быть.

Я собираюсь опустить начало, поскольку это было немного смущающим. Но это бы много значило, если бы вы помогли. <3.

Вот.

#include "stdafx.h"#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int firstNumber = atoi(argv[1]);
int secondNumber = atoi(argv[2]);
char inputoperator = argv[2][0]);
switch (inputoperator)
{
case'a':
{
cout << firstNumber + secondNumber << endl;
break;
}
case 's':
{
cout << firstNumber - secondNumber << endl;
break;
}
case 'm':
{
cout <<  firstNumber * secondNumber << endl;
break;
}
case 'd':
{
cout <<  firstNumber / secondNumber << endl;
break;
}
}
}

-4

Решение

#include <iostream>

void printError()
{
// @todo: this should actually print the usage of the program
std::cout << "Invalid input!" << std::endl;
}

void printResult(int result)
{
std::cout << result << std::endl;
}

int main(int argc, char *argv[])

{
if(argc == 2 || argc > 4)
{
printError();
return -1;
}

if(argc == 1)
{
std::cout << "James" << std::endl;
return 0;
}

int firstInput = atoi(argv[1]);
int secondInput = atoi(argv[2]);

char inputoperator = 'a'; // default to add

if(argc == 4)
{
inputoperator = argv[3][0];
}

int result = 0;

switch (inputoperator)
{
case'a':
{
result = firstInput + secondInput;
break;
}
case 's':
{
result = firstInput - secondInput;
break;
}
case 'm':
{
result = firstInput * secondInput;
break;
}
case 'd':
{
if(secondInput == 0)
{
printError();
return -1;
}

result = firstInput / secondInput;
break;
}
default:
{
printError();
return -1;
}
}

printResult(result);
}
  • Вам нужно проверить количество входов, прежде чем пытаться получить к ним доступ.
  • Вы повторно используете argv [2] для inputNumber и inputoperator, который фактически указывает на значение, которое вы хотите присвоить inputoperator
  • Обработка ошибок отсутствует

Возможно, вы захотите использовать альтернативу atoi, так как он имеет неопределенное поведение для всего, что не вписывается в int

2

Другие решения

Я не думаю, что он хочет сложного решения …

Я не уверен, что с использованием функций это нормально.

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
if(argc < 3)
{
cout<<"Your name" <<endl;
return 0;
}
int firstNumber = atoi(argv[1]);
int secondNumber = atoi(argv[2]);
char inputoperator = 'a';
if(argc == 4)
{
inputoperator = argv[3][0];
}
switch (inputoperator)
{
case'a':
{
cout << firstNumber + secondNumber << endl;
break;
}
case 's':
{
cout << firstNumber - secondNumber << endl;
break;
}
case 'm':
{
cout <<  firstNumber * secondNumber << endl;
break;
}
case 'd':
{
cout <<  firstNumber / secondNumber << endl;
break;
}
}
}
1