2016-05-10 2 views
-3

Так что я делаю приложение на 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--; 
} 

В некоторых случаях я не нужен петь или б variabels ... и приложение doesent позволит мне выйти из, если когда я нажать Enter.

Например: я должен вводить F1: 8sqrt (2) и i type 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--; 
} 

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

+0

Я бы не поставил cin в инструкции IF. Попробуйте положить ваш cin выше IF, а затем проверить его. –

+0

Да, но как я могу подписать знак только тогда, когда он напечатан? –

+1

Пожалуйста, улучшите заголовок вопроса. Как написано, будущий посетитель, у которого может быть такая же проблема, не сможет найти его, потому что заголовок слишком расплывчатый. –

ответ

2

Вы сказали:

В некоторых случаях я не нужно петь или б variabels ... и приложение doesent позволит мне выйти из, если когда я нажать 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--; 
} 
+0

Ну, это getline, это говорит о том, что оно не определено. –

+0

Вы стали жертвой опечатки, которая с тех пор была исправлена. – user4581301

Смежные вопросы