输入后我是否有可能摆脱行尾字符?

时间:2013-12-26 19:56:27

标签: c++

char choice;
float inputa, inputb;
cin >> inputa >> choice >> inputb;

while(inputa != 0 && choice != '0' && inputb != 0)
{
    cout << " = " << calculation(inputa,choice,inputb) << endl << endl;
    cin >> inputa >> choice >> inputb;
}

system("PAUSE");
return 0;

这就是屏幕的样子:

5 + 4
 = 9

用户提供他们的输入并按下输入,这就是我猜他们到下一行的原因,但有没有办法让它显示:

5 + 4 = 9

显示结果后,它会使用endl转到下一行,用户可以再次输入问题。

我是一个完全的初学者,如果这个问题没有多大意义,那就很抱歉。

2 个答案:

答案 0 :(得分:1)

你不能使用它,因为cin在你击中后打印每个角色。您必须定义自己的输入函数。

例如,你可以在getch中使用conio.h这不是一个有效的解决方案,因为getch只接受一个字符。你必须采用另一种方式。这里的重要性是得到主意)。

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

using namespace std;

void input(float *a, char *c, float *b)
{
    char in;
    do {
        in = getch();
        cout << in;
    } while (in == ' ');
    *a = in - '0';
    do {
        in = getch();
        cout << in;
    } while (in == ' ');
    *c = in;
    do {
        in = getch();
        cout << in;
    } while (in == ' ');
    *b = in - '0';
}

int main()
{
    char choice;
    float inputa, inputb;
    cout << "Expression: ";
    input(&inputa, &choice, &inputb);
    cout << " = " << inputa+inputb << endl;
    return 0;
}

答案 1 :(得分:0)

有两种方法可以实现您的目标。

首先 - 您可以在cout之前删除终端中的最后一个字符,因此取消了endl。

第二 - 您可以关闭终端上的回声,关闭输入缓冲并处理整个输入回声。

不幸的是,这两种方法都无法从纯C ++中获取。您必须使用某些终端API,具体取决于您的平台(Windows上的conio.h和Linux上的termios.h)。虽然第一种方法更容易编码,但我不确定它是否可以在所有平台上使用。通用解决方案根本不可能。

我知道这对初学者来说可能听起来很可怕,所以你可能会对更容易解决的问题感到满意,这可能仍然适合你的需求。您可以在平台上找到清除整个终端的任何命令(在Linux上清除,在Windows上清除),通过cstdlib中的系统函数调用它并打印整个等式。

#include <cstdlib>
#include <iostream>

using namespace std;

int main() {
   float a,b; char choice;
   cin>>a>>choice>>b;
   system("clear"); //on Windows "cls"
   cout<<a<<choice<<b<<"="<<calculation(a,choice,b)<<"\n";
   system("PAUSE");
   return 0;
}