我是否可以在输入后摆脱行尾字符

Is it possible for me to get rid of the end of line character after an input?

本文关键字:字符 输入 是否      更新时间:2023-10-16
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转到下一行,用户可以再次输入他们的问题。

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

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

例如,您可以在conio.h中使用getch这不是一个有效的解决方案,因为 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;
}

有两种方法可以实现您正在寻找的目标。

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

其次 - 您可以关闭终端上的回声,关闭输入缓冲并自行处理整个输入回显。

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

我知道这对初学者来说听起来可能很可怕,因此您可能会对可能仍然适合您需求的更简单的解决方案感到满意。您可以在平台上找到清除整个终端的任何命令(在Linux上清除,在Windows上清除cls),通过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;
}