onkeypress — я не могу понять что-то в приложении C ++

Поэтому я делаю приложение на C ++ для решения некоторых упражнений.

int i=1;
cout << "How many times :";
cin >> n;
while (n>0)
{
cout << "Input F" << i << ":";
if (cin >> a[i] && cin >> sign&& cin>>b)
{
switch (sign)
{
case'$': a[i] = a[i] * (sqrt(b));
break;
case'^': a[i] = pow(a[i], b);
break;
case'/':a[i] = a[i] / b;
break;
default: cout << "\n Wrong sign";
break;
}
}
else
a[i]=a[i];
i++;
n--;
}

В некоторых случаях мне не нужны переменные sing или b … и приложение, позволяющее мне завершить работу, если я нажму Enter.

Например: мне нужно ввести F1: 8sqrt (2), и я наберу 8 $ 2, затем F2: просто 8, затем я нажимаю Enter, но приложение продолжает запрашивать значения.

Хорошо, теперь, чтобы это заработало, мне нужно дважды ввести знак …

while (n>0)
{
cout << "Input F" << i << ":";
cin >> a[i];
if (cin.get() == '\n')
a[i] = a[i];
else {
cin >> sign;
if (sign)
cin >> b;
switch (sign)
{
case'$':
a[i] = a[i] * (sqrt(b));
break;
case'^': a[i] = pow(a[i], b);
break;
case'/':a[i] = a[i] / b;
break;
default: cout << "\n Wrong sing;
break;
}
}
i++;
n--;
}

Спасибо за ваше время.

-3

Решение

Вы сказали:

В некоторых случаях мне не нужны переменные sing или b … и приложение, позволяющее мне завершить работу, если я нажму Enter.

Это потому, что программа ждет от вас ввода всех значений, необходимых для

if (cin >> a[i] && cin >> sign&& cin>>b)

Вы можете выйти из этого оператора, введя все необходимые входные данные или введя EOF (ввод EOF зависит от платформы).

Вам будет лучше, если вы будете читать строку ввода построчно и обрабатывать каждую строку независимо, используя std::istringstream,

while (n>0)
{
std::string line;
cout << "Input F" << i << ":";
if ( ! getline(cin, line) )
{
// Error reading the next line.
break;
}

// Now extract the data from the line using a istringstream.
std::istringstream str(line);
if (str >> a[i] && str >> sign && str >> b)
{
switch (sign)
{
case'$': a[i] = a[i] * (sqrt(b));
break;
case'^': a[i] = pow(a[i], b);
break;
case'/': a[i] = a[i] / b;
break;
default: cout << "\n Wrong sign";
break;
}
}
else
a[i]=a[i];
i++;
n--;
}
2

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

Других решений пока нет …

По вопросам рекламы [email protected]