【问题标题】:Is it possible for me to get rid of the end of line character after an input? [duplicate]我可以在输入后摆脱行尾字符吗? [复制]
【发布时间】:2013-12-26 19:56:26
【问题描述】:
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 转到下一行,用户可以再次输入他们的问题。

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

【问题讨论】:

  • 不要将 [c] 标签添加到 c++ 问题中。
  • @rullof 计算函数似乎不适用于问题。

标签: c++


【解决方案1】:

你不能使用 do it,因为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;
}

【讨论】:

  • 谢谢,帮了大忙!
  • @Shahzad 这不是最好的方法,因为使用 getch 你只能得到一位数?尝试找到其他更有效的方法。
【解决方案2】:

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

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

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

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

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

【讨论】:

  • @pkuik 在windows中你可以使用system(cls);但是清除屏幕不是一个好主意,因为你可能会丢失一些重要的东西。
  • @rullof 初学者经常寻找简单的解决方案。我提出了一种实现给定任务的特定方法 - 计算器,因此我发现清除屏幕是非侵入性的。感谢您指出正确的 Windows 命令。
猜你喜欢
  • 2012-07-29
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多