2011-09-27 60 views
-1

这里是我试图写一个的一些代码部分:可编辑控制台输出

//Choice Based Menu 
#include <iostream.h> 
#include <conio.h> 
int main() 
{ 
    char choice; 
    cout<<"Menu"<<endl<<endl; 
    cout<<"A. Option A"<<endl; 
    cout<<"B. Option B"<<endl; 
    cout<<"C. Option C"<<endl; 
    cout<<"Q. Quit"<<endl; 
    cout<<endl<<"Choice:\t"; 
    do 
    { 
     choice=getch(); 
     cout<<choice<<"\r"; 
     switch(choice) 
     { 
      case 'A': 
      { 
       cout<<endl<<"Option A!"; 
       break; 
      } 
      case 'B': 
      { 
       cout<<endl<<"Option B!"; 
       break; 
      } 
      case 'C': 
      { 
       cout<<endl<<"Option C!"; 
       break; 
      } 
      case 'Q': 
      { 
       return 0; 
      } 
      default: 
      { 
       cout<<endl<<"Invalid Choice! Please try again."; 
       break; 
      } 
     } 

    }while(1); 
} 

因为循环无限地继续,它等待执行先前选择选项的代码之后的另一输入选项。

Menu 

A. Option A 
B. Option B 
C. Option C 
Q. Quit 

Choice: A 
Option A! 

我希望行“选择:A”每次更新最近输入的选项。我希望先前选择的选项(选项A!)的输出替换为新选择的选项的输出。

我试过使用'\ r',因为你可能已经注意到了。这是行不通的,因为它给了我一个回车,即它回到行的开头。我希望它只能回到一个字符,而不是回到行首。

+0

conio应该有一个移动光标的功能。尝试:gotoxy(int x,int y) – Pubby

+0

http://stackoverflow.com/questions/45286/how-can-i-overwrite-the-same-portion-of-the-console-in-a-windows-native -c-conso – JRL

+0

因为我错过了你已经使用这个库,所以给标签添加了'conio' - 重新标记可能有助于找到conio专家(并且避免像我的(现在已删除)这样的ncurses答案)。 – Tom

回答

1

这本:

#include <iostream.h> 
#include <conio.h> 
int main() 
{ 
    char choice; 
    cout<<"Menu"<<endl<<endl; 
    cout<<"A. Option A"<<endl; 
    cout<<"B. Option B"<<endl; 
    cout<<"C. Option C"<<endl; 
    cout<<"Q. Quit"<<endl; 
    do 
    { 
     choice=getch(); 
     cout << "\r" << "Choice:\t"; // Moved into the loop 
     switch(choice) 
     { 
      case 'A': 
      { 
       cout << "Option A!"; // No more endl 
       break; 
      } 
      case 'B': 
      { 
       cout << "Option B!"; 
       break; 
      } 
      case 'C': 
      { 
       cout << "Option C!"; 
       break; 
      } 
      case 'Q': 
      { 
       return 0; 
      } 
      default: 
      { 
       cout << "Invalid Choice! Please try again."; 
       break; 
      } 
     } 
    }while(1); 
    cout << endl; // New sole endl 
} 

这不正是你想要什么,但它是最接近的一种,可以用最少的返工得到。