2017-06-25 15 views
0

私はncursesベースで動作するように、このコードを持っている書式設定奇妙な行:のncurses:

#include <iostream> 
#include <string> 
#include <fstream> 
#include <ncurses.h> 
#include <cstdlib> 

//char a='a'; 
int c=0; 

bool ex = false; 

void mva() 
{ 
    std::cout << "Nothing here yet, move along." << std::endl; 
} 

void cho() 
{ 
    std::cout << "Choose a valid option noob!" << std::endl; 
} 

void menu() 
{ 
    std::cout << "Welcome." << std::endl; 
    std::cout << "Choose an option" << std::endl; 
    std::cout << "1." << std::endl; 
    std::cout << "2." << std::endl; 
    std::cout << "3." << std::endl; 
    std::cout << "4. About" << std::endl; 
    std::cout << "5. exit" << std::endl; 
} 

void pause() 
{ 
    std::cin.get(); 
    std::cin.ignore(); 
} 

int main() 
{ 
    initscr(); 
    //clear(); 
    refresh(); 
    //system("clear"); 
    while (ex != true) 
    { 
     menu(); 
     std::cin >> c; 
     switch (c) 
     { 
      case 1: 
       mva(); 
       pause(); 
       system("clear"); //unfortunately, there is no clean variant to this :(
      break; 

      case 2: 
       mva(); 
       pause(); 
      break; 

      case 3: 
       mva(); 
       pause(); 
      break; 

      case 4: 
       std::cout << "About" << std::endl; 
       std::cout << "Programmed by nnmjywg." << std::endl; 
       pause(); 
      break; 

      case 5: 
       std::cout << "Press enter to exit" << std::endl; 
       pause(); 
       ex = true; 
      break; 

      default: 
       cho(); 
       pause(); 
      break; 
     } 
    } 
    endwin(); 
    return 0; 
} 

それが正常に動作するはずですが、私はこの奇妙なラインの書式を見たとき、私は絶対にバッフル付きです。それに加えて、私はまた、私は、Strange line formatting

+1

あなたの投稿のコードでは、あなたのスクリーンショットと一致していません。 –

+1

Jesperと同じように、あなたのコードにはこれらの単語の印刷を示すものは何もありません。 – Annabelle

+0

@JesperJuhlそれは非常に無関係です。私は奇妙なフォーマットの原因を知りたい。 –

答えて

1

は、あなたのプログラムがinitscr呼び出すと(std::cinで)入力した内容を見ることができないのncurses(実際呪いのいずれかの実装)はキャリッジリターンを印刷できるように、端末のモードを初期化します改行(改行)を単独で行うことができます。改行を印刷してもキャリッジリターンは生成されません。

しかし、iostreamのendlは単なる改行文字です。そのようにしてcoutに印刷すると、階段状に表示されます。

cursesを使用する場合、coutcinは実際には役に立ちません。入力を読むにはgetch(またはwgetch)を使用してください。また、getchに与える入力をエコーするかどうかを制御するには、curses echo(またはnoecho)を使用します。 curses echocinには何の影響も与えません(同様に、端末はエコー入力しないように設定されており、cursesはエコーするタイミングを知っています)。

さらに読書: