2017-09-13 9 views
0

ユーザー入力の直後にパーセント記号を追加しようとしています(ユーザーがパーセント記号を入力する必要がないように)。私はこれを試すと、次の行に行くか、まったく動かない。C++で直接(cin)の後にcharを追加する方法

私が欲しいもの: _%
//空白はユーザーの入力用です。

申し訳ありませんこれは面倒ですが、私はここにC++を追加する方法がわかりません。

// used a percent as a variable: 
const char percent = '%'; 

cout << "Enter the tax rate: " << percent; // obviously here the percent 
symbol goes before the number. 

double taxRate = 0.0; 
cin >> taxRate >> percent; // here I tried adding it into the cin after the cin. 

cin >> taxRate >> '%'; // here I tried adding the char itself, but yet another failed attempt... 

だから、それは私が望んでいます何をすることも可能です:

ここで私がしようとしたいくつかのものがありますか?

+0

これは不可能です(または望ましい)。また、iostreamライブラリは、実際にインタラクティブな使用を意図したものではありません。 –

+0

よくidk、これは私たちが学校で学んでいるものなので、私はそれを自分のためにフレンドリーにしようとしています... – hannacreed

+0

あなたの時間を無駄にしないでください。 –

答えて

0

確かに可能ですが、iostreamは実際にそれを実行するための適切なインターフェイスを提供しません。典型的には、コンソールよりも大きな制御を達成するためには、プラットフォーム固有の機能を使用する必要があります。 Windowsの場合、これは_getchで次のように実行できます。

#include <iostream> 
#include <string> 
#include <conio.h> 
#include <iso646.h> 

int main() 
{ 
    ::std::string accum{}; 
    bool loop{true}; 
    do 
    { 
     char const c{static_cast<char>(::_getch())}; 
     switch(c) 
     { 
      case '0': 
      case '1': 
      case '2': 
      case '3': 
      case '4': 
      case '5': 
      case '6': 
      case '7': 
      case '8': 
      case '9': 
      { 
       // TODO limit accumullated chars count... 
       accum.push_back(c); 
       ::std::cout << c << "%" "\b" << ::std::flush; 
       break; 
      } 
      case 'q': 
      { 
       loop = false; 
       accum.clear(); 
       break; 
      } 
      case '\r': // Enter pressed 
      { 
       // TODO convert accumullated chars to number... 
       ::std::cout << "\r" "Number set to " << accum << "%" "\r" "\n" << ::std::flush; 
       accum.clear(); 
       break; 
      } 
      default: // Something else pressed. 
      { 
       loop = false; 
       accum.clear(); 
       ::std::cout << "\r" "oops!!        " "\r" << ::std::flush; 
       break; 
      } 
     } 
    } 
    while(loop); 
    ::std::cout << "done" << ::std::endl; 
    return(0); 
} 
関連する問題