删除换行符号

时间:2016-03-29 17:02:45

标签: c io newline user-input

我有一个计算器应用程序,它询问用户输入像10 + 15这样的算术表达式,用=符号跟随它,然后按Enter键。程序应该评估表达式并打印结果。

然而,答案是在新的一行,即使我希望它在同一个像

10 + 15 = 25

我也尝试使用ungetch,但它没有用。

那么如何删除该换行符以获得更高的结果呢?

3 个答案:

答案 0 :(得分:0)

如果您正在从控制台读取一行输入,则用户可以自由编辑他们输入的文本,直到他们按下gr_modtool。按下Enter时,光标会立即移动到行的开头,可能会在此过程中向上滚动屏幕缓冲区。

要将光标移回上一行,您需要使用“curses”库,它允许您发送光标移动命令以将光标移回上一行,然后再输入到输入的末尾。如果他们使用制表符和/或输入多行输入,这可能会很复杂。

请参阅“ncurses”或在Windows上PDCurses

答案 1 :(得分:0)

如果您正在使用终端,那么它并不容易,因为它通常会在换行之前等待新行。看看这里......

setvbuf not able to make stdin unbuffered

如果您在套接字或其他完全控制的流上执行此操作,则需要使用无缓冲输入。看看这里

Buffered and Unbuffered inputs in C

注意,这会使你的计算器更难写。或者,您可以打印整行,即在终端输入和回答。

答案 2 :(得分:0)

如果您的终端支持它们,您可以使用终端转义码来移动光标。

#include <stdio.h>

int main ( ) {
    char input[200] = "";
    int ch = 0;
    int count = 0;

    printf ( "\033[2J");//clear screen and move cursor to upper left corner
    printf ( "\033[8;H");//move cursor to line 8
    printf("Enter equation\n");//\n advances to line 9
    while ( ( ch = getchar ( )) != '\n' && ch != EOF) {
        input[count] = ch;//store input for processing
        count++;//count characters
    }
    printf ( "\033[9;%dH", count + 1);//move cursor to row 9 col count + 1
    printf ( "answer here\n");
    return 0;
}